AST反混淆进阶|动态的混淆js(reese84)还原后如何替换调试?

关注它,不迷路。       

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!

1.需求

有个购买星球的兄弟问静态的混淆js可以还原后替换,但是动态的混淆js还原后就不知道怎么弄了。所以决定写篇文章来探讨一下。

2.目标地址

这次要拿捏的网站是这个:

https://www.flyscoot.com/en

它加密参数所在的混淆js是动态的,但是url地址是不变的:

https://www.flyscoot.com/g-Then-And-meeting-beding-O-Scena-Quarre-allowt-

如何使用 mitmproxy 库和设置本地代理,请参考这篇文章:

调试技巧|如何动态调试经过还原后的某数VM文件

设置好以后,修改main.py 如下:

import os
import mitmproxy.http
 
print('脚本初始化成功')
 
def request(flow: mitmproxy.http.HTTPFlow):
    pass
 
def response(flow: mitmproxy.http.HTTPFlow):
    if flow.request.method == "GET" and "g-Then-And" in flow.request.url:
        with open("ob.js","w",encoding = "utf-8") as fp:
            fp.write(flow.response.text)
        
        os.system("node main.js ob.js ok.js")
        with open("ok.js","r",encoding = "utf-8") as fp:
            flow.response.text = fp.read();

经过分析后得知,网站其实请求了两次 上面的混淆url,一次GET,一次是POST,因此需要在脚本中进行判断。

代码中的main.js,来自星球:

https://t.zsxq.com/19eQmMHZZ

并加了一行代码:

ast.program.body.unshift(types.DebuggerStatement());

即在代码的最开头加一个debugger;这样方便我们查看是否替换成功。

注意,main.js 和 main.py需要放在同一目录内。

3.运行

在进行替换前,建议先将该网站的所有 缓存,cookie 清空。打开cmder,输入:

mitmdump -q -p 8888 -s main.py

进行监听。再打开该网站,我们发现有替换的操作了:

f736aa9a301c6a1b54b9407ad0985d41.png

并且,网站停在了debugger的位置:

36aa89c987475afcab0bdffef879b54c.png

这个时候,搜"p",定位到代码位置并打断点:

b275f9ae0119fc93fadaded2c654f3a8.png

上面的debugger运行后,停到断点的位置:

92d70d7355428194fe8d7cea0160339e.png

可以直接看到 pD 的值,再运行,抓下一个混淆js的包:

3773f0ecc8cbf1f08bf703bc39552cd8.png

这样直接就定位到 加密参数 p 的位置了。

3.源码获取

完整的代码我放星球了,有需要的自取:

https://t.zsxq.com/XPyFs

今天的文章就分享到这里,感谢大家的阅读!

欢迎加入知识星球,学习更多AST和爬虫技巧。

b630df22da5ac9847d24fb18180cbeaf.jpeg

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值