E盾反调试分析
GetStartupInfo
在程序启动后,会有一个StartupInfo的结构体变量,来保存程序启动的信息,我们通过其中参数的改变来检测程序是正常运行还是在调试器中运行的
参考地址:https://www.cnblogs.com/ziolo/p/3434815.html
参考地址:https://blog.csdn.net/tk86935367/article/details/8174368
E盾V51代码:
1 | BOOL UseGetStartupInfoCheckDebug() |
反反调试方案:
- Hook GetStartupInfo 返回一个 非0值 就好了
- Hook GetStartupInfo 返回一个 非0值 就好了
IsDebuggerPresent
这个函数可以用在程序中,检测当前程序是否正在被调试,从而执行退出等行为,达到反调试的作用。
该函数通过 fs:[0x18] 获取 TEB -> TEB:[0x30] 获取 PEB -> PEB:[0x2] BeingDebugged:UChar 调试标志, 通过调试标志 来判断是否调试
参考资料:https://blog.csdn.net/chriz_w/article/details/52096552
参考资料:https://blog.csdn.net/ls1160/article/details/38105873
E盾V51代码:
1 | BOOL UseIsDebuggerPresentCheckDebug() |
反反调试方案:hook函数直接返回false
心得
- 部分根据标志来判断反调试的,可以通过 直接使用汇编来写反调试 比如:
IsDebuggerPresent
# 推荐文章
1.minifilter-学习笔记1
2.Android Killer 不反编译资源
3.xposed 原理初探
4.AndroidStudio调试smali代码
5.jeb调试smali代码
6.xposed 小实战
1.minifilter-学习笔记1
2.Android Killer 不反编译资源
3.xposed 原理初探
4.AndroidStudio调试smali代码
5.jeb调试smali代码
6.xposed 小实战