难点
源码压缩
,混淆
,反调
,时间检测
Tip:文末可以下载例子
猿人学官网:http://match.yuanrenxue.com/
确定逆向目标
这个
m
值
开始逆向
过反调
跟值
此处是 加密的url
在发送出去最后出现的地方,我们可以通过函数调用的栈
,进行跟值,找到大体加密的地方
本地调试
最终我们跟到了此处,发现它在
<script>
标签里,我们无法格式化,就无法断点调试
我采用把
整个网页 扒下来
,修改其中的<href> 为绝对路径
,采用fiddler 本地替换网页响应
,实现把在本地把 <script> 压缩的代码 格式化
,在手动加断点
寻找 window.f 值
逆向需要有怀疑精神,
oo0O0()
这个函数返回空,不会这么简单吧,进入它
定位加密位置
经过分析最终确定在这一行
改造加密函数
到这里,差不多就分析完成,就改造一下加密函数就完成了
function f(){ var mv = Date.parse(new Date()) + 100000000; var window = {}; var m = eval(" 把 eval 里的全部复制过来 window.f = hex_md5('bigdataboy')".replace(/bigdataboy/, mv)) // 这里有个小坑 必须要用替换,因为拼接的 md5 值是不对的 return m + '丨' + mv / 1000 }
请求计算结果
import execjs import requests def get_m(): return execjs.compile(open('./main.js', 'r', encoding="utf-8").read()).call('f') def app(page: int) -> dict: rep = requests.get( url="http://match.yuanrenxue.com/api/match/1", headers={ "Cookie": "自己的 sessionid", 'User-Agent': 'yuanrenxue.project', }, params={"page": page,"m": get_m(),} ) return rep.json() if __name__ == '__main__': sum = 0 count = 0 for _ in range(1, 6): data = app(_) count = count + len(data.get("data")) for value in data.get("data"): sum = sum + value.get("value") print(sum / count)
结果成功
版权声明:《 【猿人学】第一题逆向分析 》为明非原创文章,转载请注明出处!
最后编辑:2021-6-12 10:06:34