2023-06-17 00:44:30 +08:00
..
2023-06-17 00:33:04 +08:00
2023-05-22 19:49:46 +08:00
2023-05-22 19:50:05 +08:00
2023-06-17 00:44:30 +08:00
2023-05-22 19:49:46 +08:00

知识点: AES算法魔改md5算法魔改,环境检测

debugger

第二届猿人学js逆向大赛本以为送分题分分钟搞定没想到第一题就这么难。

查看请求存在token加密参数,接下就是打断点找到加密点破解

debugger

直接进入下一步函数

debugger

可以看到如下代码

var e = Date['now']()
  , f = a('crypto-js')
  , g = '666yuanrenxue66'
  , h = f['AES']['encrypt'](e + String(d), g, {
    'mode': f['mode']['ECB'],
    'padding': f['pad']['Pkcs7']
})
  , i = '/api/match2023/1'
  , j = {
    'page': String(d),
    'token': f['MD5'](h['toString']())['toString'](),
    'now': e
};

可以清楚的看到AES加密和md5加密,控制台调试了一下发现加密是魔改过的。

debugger

接下来不要急着去扣加密代码仔细看整段js代码

debugger

发现这就是browserify打包,类似于webpack打包,这就比较简单了

直接扣下全部代码,在模块加载处插入window.dddd = c;,控制台输出window.dddd;就可以查看全部的模块

debugger

先解决md5加密问题找到模块位置尝试控制台输出

浏览器控制台

debugger

源代码控制台

debugger

经测试发现明文1加密后值是不同的这里就要思考一个问题同样的浏览器环境为什么加密值不同。

我这里总结2种情况一是当前页面的网址不同二是代码没有压缩。

有了猜想就开始执行,搜索location['href']

debugger

对比

debugger

对比发现,在加密中存在判断当前网址的代码

location['href']['indexOf']('topic') !== -0x1改成location['href']['indexOf']('topic') == -0x1

测试一下

debugger

成功打印出相同的密文,以此类推AES加密也存在环境检测的代码删除或者改写就OK了