吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7052|回复: 61
收起左侧

[Web逆向] 反调试-编译pass彻底解决调试web无限debugger问题

  [复制链接]
6767 发表于 2023-12-13 22:29
本帖最后由 6767 于 2024-9-8 08:04 编辑

本文尝试从编译过程彻底解决调试web无限debugger问题

背景

当我们调试JS的时候,时常会遇见无限debugger。
debugger 语句用于停止执行 JavaScript(以下简称JS),并调用 (如果可用) 调试函数。

使用 debugger 语句类似于在代码中设置断点。

setInterval(()=>{debugger;}, 100);
setInterval(()=>{eval("debugg"+"er");}, 100);

复制上述语句到控制台执行就可以触发了。

实际中的反调试语句会更加复杂和嵌套各种调试技巧,例如常见的无限制debugger、配合settimeout延迟debugger、代码混淆+debugger等等.

解决思路

任何代码都必须编译原理几步-词法语法中间代码机器码,js既然要编译,直接在编译时把关键词屏蔽掉/或生成空语句。

实现

Chrome浏览器内置的是v8 engine,

1源代码

chromium代码搜索:
https://source.chromium.org/chromium

49424255.png

<!--more-->

注意到v8和nodejs项目基本一致,直接下载nodejs进行关键词检索:

node/node-v12.22.9/deps/v8/src$ grep -Rn '"[xd]ebugger"' 
parsing/keywords-gen.h:99:     {"debugger", Token::DEBUGGER},
parsing/token.h:139:  K(DEBUGGER, "debugger", 0)                                       \
parsing/scanner-inl.h:31:  KEYWORD("debugger", Token::DEBUGGER)                      \
heap/heap.cc:3793:      return "debugger";

替换掉parsing目录下的几个"debugger"就达到了目标.

只编译nodejs比较简单,make -j16 一把梭,使用修改后的node调试即可。

但对于Chrome浏览器内置v8就非常无敌超级麻烦要下载工具链,具体请参考网文 V8系统解读(一): V8 在 Chrome 中的位置&编译调试V8

那怎么办呢?挠头.jpg naotou.jpg

2二进制修改

系统环境 Windows 10,Chrome 109

先看看DLL内置的字符串信息,bingo,第一行就是了。

λ strings chrome.dll | grep debugger
debugger
ICE debugger
ICD2 in-circuit debugger
wait-for-debugger-children
Error loading debugger
await can not be used when evaluating code while paused in the debugger
Cannot access '%' from debugger
debuggerStatement
debuggerId
debuggerEnabled
DevTools debugger
debuggerId
devtools-frontend/front_end/panels/browser_debugger/browser_debugger-legacy.js
devtools-frontend/front_end/panels/browser_debugger/browser_debugger-meta.js
devtools-frontend/front_end/panels/browser_debugger/browser_debugger.js
permission:debugger
wait-for-debugger
silent-debugger-extension-api
Cannot navigate to a devtools:// page without either the devtools or debugger permission.
[...其他...]

编译字符串常量必直接表示在rdata区,可直接修改这些hard token。

  • 📢修改前请备份文件chrome.dll;
  1. 打开chrome安装目录⚙,使用{010 editor/IDA Pro/Win HEX }暴力搜索实际字节为\x00debugger\x00 的地方,前后都是16进制的00;.
    文件修改.png
  2. debugger修改为别的等长字符比如xebugger
λ grep -aboP "\x00[xd]ebugger\x00" chrome.dll
167677043: xebugger

λ xxd -l10 -s 167677043 chrome.dll
09fe8c73: 0078 6562 7567 6765 7200                 .debugger.

λ printf x | dd of=chrome.dll   bs=1 seek=167677044 count=1 conv=notrunc
1+0 records in
1+0 records out
1 byte copied, 0.0017532 s, 0.6 kB/s

λ xxd -l20 -s 167677043 chrome.dll
09fe8c73: 0078 6562 7567 6765 7200 0000 0001 0000  .xebugger.......
09fe8c83: 0070 6572                                .per
  1. 重新打开 chrome 控制台测试 debugger 是否生效;正常情况下应该已经不会触发debug状态了。
    调试测试.png
  2. 完工,这样就绕过编译Chrome的工程问题。

副作用

  • 代码中的debugger成为非法语句,调试器中人工鼠标设置的line breakpoint依然生效。
  • 破坏标准语法完整性,导致被探测到debug被破坏输出了warning error,相比之下源码解除debugger\修改ast编译过程更加安全。
  • 部分插件失效,如油猴插件

EOF

/革命尚未成功,同志任需努力;
欲知后事如何,请听下回分解😁/

免费评分

参与人数 27威望 +1 吾爱币 +45 热心值 +25 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
gdlwolf + 1 + 1 谢谢@Thanks!经测试的确管用
mingyuetianya + 1 + 1 热心回复!
我不是旧时 + 1 + 1 谢谢@Thanks!
aichoupang + 1 + 1 我很赞同!
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
YI0IX + 1 + 1 谢谢@Thanks!
zhczf + 1 + 1 我很赞同!
allspark + 1 + 1 用心讨论,共获提升!
5omggx + 1 + 1 用心讨论,共获提升!
gmx1222 + 1 + 1 谢谢@Thanks!
fzhhn + 1 我很赞同!
pnccm + 2 + 1 谢谢@Thanks!
光影魔术 + 1 + 1 用心讨论,共获提升!
hua_wu + 1 谢谢@Thanks!
ghd19940802 + 1 + 1 debugger攻防的革命性里程碑
月清晖 + 1 + 1 我很赞同!
无问且问 + 1 + 1 牛逼了
scz + 1 + 1 用心讨论,共获提升!
hehehero + 1 + 1 热心回复!
WFXL + 1 + 1 用心讨论,共获提升!
MakiseSatsuki + 1 用心讨论,共获提升!
willbe001 + 1 + 1 我很赞同!
weiai987 + 1 用心讨论,共获提升!
唐小样儿 + 1 + 1 我很赞同!
SKnight + 1 + 1 我很赞同!
laos + 1 + 1 这是要扬了无限debugger的骨灰呀

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

alanfish 发表于 2023-12-14 08:06
感谢感谢,要加强学习
MIAIONE 发表于 2023-12-24 23:41
谢谢楼主分享,我觉得就应该出个专用浏览器内核,专门伪装用来自动化和爬虫用,从底层让浏览器和我们统一战线,而不是让js操控浏览器内核干扰我们的逆向工作
mcpan 发表于 2024-4-11 15:48
https://greasyfork.org/en/scripts/440060-anti-anti-debugger 有个专用反debugger脚本
头像被屏蔽
moruye 发表于 2023-12-13 23:09
提示: 作者被禁止或删除 内容自动屏蔽
iaoedsz2018 发表于 2023-12-13 23:45
我还以为关键字实在v8相关的dll里面,原来就在chrome.dll里面啊
iaoedsz2018 发表于 2023-12-13 23:46
你那个strings指令是哪儿来的
头像被屏蔽
86618513 发表于 2023-12-14 06:38
提示: 作者被禁止或删除 内容自动屏蔽
CQGaxm 发表于 2023-12-14 06:45
学习学习,感谢分享
yuleniwo 发表于 2023-12-14 08:54
确实还不太成功,期待改改dll忽略掉debugger
xzdatm 发表于 2023-12-14 08:56
好看 爱看 下次还看点赞
darksied 发表于 2023-12-14 09:11
一般是想尽办法在js层面去掉。你的方法直接掀桌子了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 01:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表