网页抓取 加密html(逆向某网站的登录接口加密还是挺有意思的,故写下日志)
优采云 发布时间: 2022-02-04 22:22网页抓取 加密html(逆向某网站的登录接口加密还是挺有意思的,故写下日志)
反转某个网站的登录界面,生成元素加密
因为是非法的网站,所以这篇文章屏蔽了URL,但是登录界面的加密还是蛮有意思的,所以写下日志逆向吧,本文仅供参考!
登录界面分析
还是用我们老套路,发送登录请求,获取登录url,看参数加密
密码显然是加密的。作者在这里输入了123456却返回了一堆乱码。事不宜迟,直接搜索登录网址,看看能否找到请求码。
很快找到登录界面
由于代码完全是纯文本的,我们可以很容易地看到代码的作用:
判断isCrypt是否为真,如果为真,调用cryptStr函数传入密码参数。如果为false,则直接返回密码,加上下面提交的crypt参数。估计能不能提交,把crypt改成0,直接把密码传进去。明文能否成功登录也是charles在发包后确认的,但本文的目的是为了逆向学习交流分析,所以如下
而我们的逆向思维也很明显。我们在这里下断点,看看cryptStr函数是怎么工作的,重新发送登录请求,破解成功。跟进F11看代码内部逻辑
这是这段代码:
var cryptStr = 函数 (val) {
变量温度 = $("
提交
");
var cryptStrInput = temp.find(".cryptStr").val(val);
temp.appendTo(document.body);
temp.find(".btnCrypt").click();
var cryptStr = cryptStrInput.val();
temp.remove();
返回 cryptStr;
};
首先从传入的参数可以清楚的看出是我们输入的明文密码,然后我们逐句分析。
第一行代码是生成一个元素到临时变量中
第二行代码是定义一个cryptStrInput变量,定位到class=cryptStr样式中生成的元素,传入我们的val参数,也就是我们的明文密码
第三行将此元素添加到正文的最后一行
第四行找到class=btnCrypt样式,点击
第五行定义了一个变量 cryptStr 使其等于变量 cryptStrInput 中的值
第六行删除temp元素
第七行返回 cryptStr
经过逻辑分析,很明显有一段代码调用了click函数,然后使用加密函数对其进行加密。至于为什么程序员要费很大力气去生成要加密的元素,而不是直接在cryptStr函数中写加密代码segment呢?原因也很简单,因为在这种情况下,内存调用堆栈将无法追踪到密钥加密函数,这对于反向来说非常麻烦。但是我们之前分析的关键是点击btnCrypt,然后调用该函数。所谓的方法总是比那个难很多,我们可以在全宇宙第一个chrome浏览器中查看*敏*感*词*事件,看看click指向什么函数
可以清楚的看到调用中只涉及到了click的一个功能。毫不奇怪,这是密钥加密代码。点击查看
这里很容易分析。首先获取明文密码,然后获取cookie中randomYes的值。如果密码中已经收录randomYes的值,说明已经加密,所以直接返回。下面是判断这三个cookie是否存在。如果存在,则将其传递到 sessionCookie 变量中。以下代码如下
sessionCookie = sessionCookie || “不明确的”;
var randomId = encrypt(cryptStr,sdc(sessionCookie + randomYes));
$(".cryptStr").val(randomId + randomYes);
定义randomId变量,然后调用encrypt函数传入两个参数,一个是明文密码,另一个是sdc函数加密sessionCookie+randomYes并返回值。很明显加密功能是AES加密,模式是ECB模式。填写Pkcs7方法(不熟悉AES加密的同学此时可以百度一下新知识,这里就不过多描述了)然后传入文本参数和密钥secKey。加密后,将加密后的值返回给文本。至于 sdc 函数编辑器点进去看了看没看到原因,所以后来写python登录的时候只能生成直接调用js文件的sdc函数(希望回来看看自己< @文章
总结
理清了具体的加密逻辑之后,写python登录基本不难了。有兴趣的同学可以去我的github一起学习交流。这个网站reverse有两个重点要注意
当调用栈无法追踪到我们想要的函数时,我们该怎么办?需要从多方面去分析,方法难于难,除非是不存在的代码,否则我们是无法追根溯源的!
当你遇到一个不熟悉的函数时,这在逆向工程中是一件非常重要的事情。当你看不懂加密函数时,就说明反方向有障碍,逻辑效率就会出现偏差。sdc 功能只能更改。是一种常见的有名字的加密方式,但是小编没看到,很不合适,连程序员写的加密函数都要一步步分析它的逻辑,但是这个网站的加密方式网站 禁止您执行动态调试。自然不可能追查到这条路!希望大哥能站出来为小弟解决问题。
对了,本文分析的py文件已经放到了github,需要一起学习分析的同学可以在github上查看
我的github