反调试与反反调试
来源:互联网 发布:部落冲突数据 编辑:程序博客网 时间:2024/04/28 19:10
1-DebugPort
2-KdDisableDebugger
3-IsDebuggerPresent和CheckRemoteDebuggerPresent
4-hook
http://www.moguizuofang.com/bbs/thread-3235-1-1.html
http://bbs.pediy.com/showthread.php?t=126802
http://bbs.pediy.com/showthread.php?t=129810
DebugPort是进程EPROCESS结构里的一个成员,指向了一个用于进程调试的对象,如果一个进程不在被调试的时候那么就是NULL,否则他是一个指针。该对象负责在调试器与被调进程之间进行调试事件传递,因此被称为调试端口。被调试程序的事件由这个端口发送到调试器进程的。
HOOK系统中一些与调试相关的函数,也可以防止被各种调试器调试。比如某款程序在内核中就HOOK了下面这些函数:
NtOpenThread():防止调试器在程序内部创建线程
NtOpenProcess():防止OD(OllyDbg)等调试工具在进程列表中看到
KiAttachProcess():防止被附加上
NtReadVirtualMemory():防止被读内存
NtWriteVirtualMemory():防止内存被写
KdReceivePacket():KDCOME.dll 中Com串口接收数据函数
KdSendPacket():KDCOME.dll 中Com串口发送数据函数,可以HOOK这2个函数用来防止双机调试。
反反调试的思路也就出来了。针对清零DebugPort来防止调试的方法,可以通过对DebugPort内存地址下内存断点:
ba w4 debugport_addr
这样一旦有程序代码在修改DebugPort,就会被断下,从而找到对应的清零DebugPort的反调试代码,然后对这部分代码进行patch(用机器码0×90(nop)或者0xC3(ret)取代),从而让它失去作用,当然有的程序会对代码进行校验,一旦发现代码被篡改,就会采取保护措施,比如抛出异常或者退出程序。
针对调用系统函数如KdDisableDebugger()来检测调试器存在从而禁止被调试的方法,可以在对应的这些函数的地址下断点,然后对相关的代码进行patch,然后使该函数判断失效。比如:
bp KdDisableDebugger、eb xxx
针对通过HOOK系统函数来防止进程被调试的方法,可以直接将这些系统函数的钩子直接恢复,可以通过内核驱动程序或者借助一些ARK工具(比如Pchunter)就可以直接检测和恢复这些函数钩子。
- 反调试与反反调试
- 反调试与反反调试
- 静态反调试与动态反调试
- 反反调试总结
- 基于STARTUPINFO的反调试与反反调试
- 反调试技术- IsDebuggerPresent,原理 与 反反调试
- 反调试与反反调试内容收集
- 反调试
- SEH反调试的实现与调试
- 【反调试】去除各种反调试
- 关于反调试&反反调试那些事
- 关于反调试&反反调试那些事
- 反调试与反反调试内容收集帖 方便大家学习
- 反 DebugAPI 调试?
- icesword120反调试分析
- 游戏反调试技术研究
- 反调试指南
- 反调试技术
- 漫谈iOS Crash收集框架
- Android官方开发文档Training系列课程中文版:分享简单数据之从其它APP接收简单数据
- 22.4-2简单路径条数
- 在SourceInsight中使用SourceMonitor对C语言程序进行度量,以及Kiviat图说明
- 数据库的备份和恢复
- 反调试与反反调试
- Using Multiple Android Studio Versions
- Android 自定义View高级特效,神奇的贝塞尔曲线
- 融银p2p系统时间,时区说明
- 用事件适配器来实现窗口的关闭
- php mvc 框架演示
- 引用和指针
- 多线程:使用ImageView下载图片(模仿 SDWebImage)
- 第1周 项目(A)-4周求两数正差值