JS逆向基础

SuanYunyan / 2023-05-11 / 原文

JS逆向基础


简单记录一下JS逆向用到的一些知识。

一、常见的加密算法及特点

  • MD5: 加密后有16位和32位,以0-9和小写a-f组成。其中16位的就是截取中间的第9至第24位,判断是否以MD5加密,主要看一下两点:是否符合16位或32位,加密后的结果是否是0-9,A-F。
  • AES:对称加密算法,加密和解密用同一个秘钥,密钥长度主要有128位,192位,256位。没法直接通过密文判断是否是AES加密,加密后的结果通过Base64编码,主要可以推断:例如密文长度是否为16的倍数。对于前端来说,可以找到加密源码来判断一下。
  • Base64: 准确来说,Base64是一种编码。以a-z,A-Z,0-9和+/=组成。
  • RSA: 非对称加密,有公钥和私钥两种秘钥。加密后的结果同样是经过Base64编码的。
  • SHA:常见的有SHA1,SHA256,SHA512。组成以0-9和a-f组成。加密后分别为sha1(40位),sha256(64位),sha512(128位)。

二、禁用Debugger的一些方法

主要针对无限Debugger的一些处理方法

1.暴力禁用法:

直接禁用所有断点,这样其实也无法调试了,不推荐。

image

点击“停用断点”,所有断点都不生效。

2.利用条件断点

image

在debugger处打上条件断点,置为false,debugger就不执行了

3.中间人工具
  • 利用fidder拦截并改写含有debugger语句的js文件
  • 浏览器自带的Overrides本地覆盖改写JS文件等方式
4.改写函数法

置空含有debugger语句的函数:

image

控制台进行变量覆盖,重新声明一下函数,直接置空。缺点是刷新页面就失效

还有另外一种方式,直接重置构造器:

Function.prototype.constructor = function(){}
5.无限Debugger

一打开F12就无限debugger,这时无法调试其他代码,可以通过call stack调用栈层层找到最开始的调用者:

image

虽然是加密过的,不过不影响,直接重写函数:

image

这时debugger已经失效了。

小提示:一般无限debugger都会配合定时器无限复活,把setInterval干掉就行。