声明:本文仅限交流学习使用,请勿使用在任何非法商业活动,禁止用于非法用途。否则后
果自负。如有侵权,请告知删除,谢谢!
前面文章我们分析了 Payload 里面的__m__和 bella 的生成,细心的同学会发现,在__m__和bella的下面几行,就有疑似pre的地方
全局搜索pre也可以,但是全局搜出来的结果太多了,分析起来比较麻烦
先在之前发现的 疑似 pre 的地方 打断点,结果发现无法下断点,这时候需要一定经验,js调试过程下断点时最好在,代码所在的 return 语句 或者 函数 的开头和结尾打上断点
刷新网页,成功断下,发现pre 被绑定在了 window._pt_ ,
接下来 全局搜 _pt_,发现没什么用,找不到生成的地方
此时静下心思考,搜不到应该是因为字符串被加密 或者 参数是动态生成,怎么办呢?
一般遇到这样的情况,我们可以看下这次请求是什么类型的,如果是XHR,那么就可以下xhr断点,然后查看调用栈寻找关键代码
如何查看请求类类型呢,资源面板左侧,找到js文件,鼠标右键,选择在 网络面板 中打开,如下
然后发现并不是XHR,是script类型的
有基础的都知道xhr是什么, 这里是script代表这个js文件在HTML的script标签里,怎么办呢? 那就打 script 断点呗
监听哪里添加window._pt_, 作用是在调试过程中一旦生成_pt_的值,就能看到,进而就能确定pre生成的大概位置, 接下来, 刷新网页,单步调试
F10单步调试十几下,有发现了
再次刷新网页,F10跟进,当刚刚执行到script标签时,按F11步入进去,
然后格式化代码,发现又是混淆的JS,整体结构跟生成bella的js代码类似,但是多刷新几次,发现是动态混淆,并且复制到本地调试时(Vscode和pycharm都行),发现会卡死 报内存溢出的错误, 经过仔细观察,发现有多处格式化检测,用来内存爆破,真的很恶心人呀,那就先不格式化,运行下看看
竟然是 undefind, 应该是运行环境不同(浏览器环境和和node环境)条件缺失,造成某些代码没有执行
回到浏览器,一步步调试,这个过程很漫长很苦B,发现有多处环境检测,环境检测中还有html标签检测,缺什么补什么,经过一番掉头发调试,结果如下
你以为这就完了吗? 别忘了这是动态混淆的,每次刷新请求 返回的代码时变化的,
要么利用AST技术把代码进行混淆还原,在慢慢梳理进行算法还原,,要想完全还原其实步骤也挺复杂的 , 我选择用python请求这个HTML, 然后动态的获取script标签里的JS代码,最后效果如下
至此,pre 的算法分析解决完成,难的是调试过程 ,混淆的代码确实看着不舒服,很多地方都需要一边控制台输出,一边调试。
欢迎私信技术交流!