0 声明
仅用于技术交流
脱敏地址:aHR0cHM6Ly93d3cuYXFpc3R1ZHkuY24vaGlzdG9yeWRhdGEvaW5kZXgucGhw
1 分析和解密
0x01 F12检查
发现右击被禁用,F12快捷键也被禁用,换一种方式,先打开F12,在访问网页,发现会断在一处debugger出,这个debugger比较简单,在前面右击一律不在此暂停即可,打过断点之后点击继续执行脚本即可跳过

跳过之后发现页面显示检测到非法调试,说明仍被检测到调试了。那就再换一种方式,把调试窗口独立出来,再调试

换个城市,发现已经跳过了检测,并在Fetch/XHR中检测到了一个请求,发现其是POST请求,其中表单数据为加密数据,返回数据也为加密数据


至此,任务就是解析加密参数和解密返回结果。
0x02 解析加密参数
首先发现加密参数的表单数据的Key的值为hA4Nse2cT,去搜索一下,发现没有找到匹配项

那么只能调用堆栈去跟了,在启动器里点击堆栈进入代码

打个断点,然后换个城市重新请求,断在了一个send处,继续往上跟

发现是在Ajax里进行的操作,即表单数据中加密的value值即为pKmSFk8。

可以看到是函数poPBVxzNuafY8Yu中传入了两个参数,一个为固定值GETMONTHDATA,另一个是一个字典,字典的值为我们搜索的城市名

先找一下这个函数并扣下来,在本地给起个函数名为parse_params

先粗略观察一下这个函数,发现有个osZ34YC04S(oNLhNQ),运行发现就是传入的第二个参数,可直接进行替换
还有一个hex_md5的函数,疑似md5算法,在控制台测试一下发现确实是md5标准加密算法,那么我们可以直接使用crypto-js中的MD5算法替换这个函数,可以少补很多代码
const CryptoJS = require("crypto-js");
let md5 = val => CryptoJS.MD5(val).toString();
运行发现报错:BASE64未定义

直接去页面里进入相应函数

粗略观察下这个代码

里面有一行new Base64(),说明我们还需要继续补这个Base64(),用相同的办法继续跟
发现是个比较大的函数,直接扣下来

再运行代码,发现报错:AES未定义

用补base64的方式补全代码
发现运行后得到了正确的结果

0x03 对加密结果进行解密
观察下这个Ajax代码,对其success后面的代码进行解析,发现原本结果dGHdO还是密文,在经过函数dxvERkeEvHbS后变成了明文,判断此函数为正确的机密函数

粗略观察下代码,原来是经过了以下步骤:1. base64解码 2. DES解码 3. AES解码 4. base64解码

根据扣加密参数相同的步骤,扣出相应的代码到本地,运行测试,得到正确结果

2438

被折叠的 条评论
为什么被折叠?



