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

举报
悦来客栈的老板 发表于 2022/09/25 06:09:42 2022/09/25
【摘要】 关注它,不迷路。        本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除! 1. 需求 众所周知,某数的js不仅混淆了,而且还是动态的,非常的难以阅读,能让小白直接劝退。 我是研究js混淆代码还原的,希望有一种方法能动态调...

关注它,不迷路。       

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

1. 需求

众所周知,某数的js不仅混淆了,而且还是动态的,非常的难以阅读,能让小白直接劝退。

我是研究js混淆代码还原的,希望有一种方法能动态调试还原后的VM,经过一番摸索,它来了。

2. 准备

因为需要替换html响应,需要安装 mitmproxy 这个库:

pip install mitmproxy
  

这个库是 @渔滒 推荐的,在此感谢!

这个库需要配合代理,因此需要修改系统的代理,win系统打开 网络和Internet 设置 ,如下图设置代理:

9746b6f3c6d6affe908c4d4b0c4f0626.png

注意,设置好后一定要点击保存按钮

3. 编写脚本,替换响应

编写如下脚本,保存为 main.py :


   
  1. import mitmproxy.http
  2. print('脚本初始化成功')
  3. def request(flow: mitmproxy.http.HTTPFlow):
  4. pass
  5. def response(flow: mitmproxy.http.HTTPFlow):
  6. if '某数4代URL' == flow.request.url:
  7.         html = flow.response.text
  8. print("ret=" in html)
  9. html = html.replace("{ret=","{debugger;ret=")
  10. flow.response.text = html

这里将 "{ret=" 替换成 "{debugger;ret=" 这里将关键位置进行插桩,便于快速定位,至于为什么是这里,请参考其他大佬的文章。

运行如下命令:

mitmdump -q -p 8888 -s main.py
  

打开目标网站和调试面板,清空所有cookie和其他的缓存,再次刷新,停到这里:

fedd63f6635acd07c28a0e10d2b2ab23.png

控制台输出 _$OF 的值 : 

796f0e8d58e3456a0b27c392696567fb.png

聪明的你,肯定发现了它就是VM里的代码,并且它是被eval的对象。注意它是字符串,并非代码,因此,复制后,还需要将其 console.log ,转换成代码再进行还原:

dc9919ce4937c8449e686bae3d5e9a7b.png

复制保存,并对其进行还原处理,复制还原后的代码,赋值给_$OF :

d037949c376066b7db7e7a3a3d68753f.png

注意在第一行加入 debugger;  回车后再次F8运行,停在第一行的debugger位置:

6c61aee1101b2f73e99f65783de00fe1.png

全局搜索cookie,在下面这个位置打上断点:

898a51a936aa75bc367f73225cb656b0.png

再次F8运行,停在断点位置:

3edf5a797e893171ddea5520a240a4fb.png

堆栈往上追,进入假cookie生成的地方:

69bde0d74d8d82320e969753c87ec4cc.png

再次F8运行,J继续停在断点位置:

1e59d786c18374336d2a9bef9dbf688c.png

堆栈往上追,进入真cookie生成的地方:

c1e8f69196c437f8b8bffaaef336a23b.png

说明替换是可以走正确逻辑的。

4. 后记

遇到了两个小问题,记录一下。

  1. 需要将字符串转换成代码,使用console.log;

  2. 需要将还原后的代码转换成字符串,使用了 JSON.stringify,在此感谢 @Echowxsy,后来发现保存为文件后复制,还是会报错,于是干脆直接复制到剪切板,使用了 copy-paste 这个库,问题解决。

今天的文章就分享到这里,后续分享更多的技巧,敬请期待。

6948abab83522df079363c349a766e28.jpeg

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

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/126900160

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。