目录

  • 反调试与反反调试

    • 一丶反调试的几种方法

      • 1.DebugPort端口清零
      • 2.KdDisableDebugger
      • 3.ring3下的 isDebuggerpresent和CheckRemoteDebuggerPresent
      • 4.使用Hook手段.
    • 二丶反反调试
      • 1.针对DebugPort
      • 2.针对 KdDisableDebugger
      • 3.花指令

反调试与反反调试

一丶反调试的几种方法

1.DebugPort端口清零

debugport是在EPROCESS结构中的.调试时间会通过DebugPort端口将调试事件发送给ring3进行调试的.如果设置为0.则ring3就无法进行调试了
也就是说你不能单步了.等相关调试操作了.

如果做反调试.开启一个线程.不断的对这个DebugPort进行清零.
进而进行反调试.
思路:
1.找到当前进程的EPROCESS结构
2.通过硬编码找到这个位置.(硬编码)
如果是硬编码.就需要自己根据系统去判断.

2.KdDisableDebugger

在内核中调用这个函数后,它会检测是否检测是否挂载了windbg.
也是开启线程.不断调用.

3.ring3下的 isDebuggerpresent和CheckRemoteDebuggerPresent

应用层可以调用这两个函数判断

4.使用Hook手段.

如在内核中进行HOOK

下面列出函数名

函数名字 作用 HOOK后
NtOpenThread 创建内核线程 防止调试器在内部创建线程
NtOpenProcess 打开进程 防止OD等调试工具在调试列表中看到
kiAttachProcess 附加调试进程 防止被附加
NtReadVirtualMemory 读取虚拟内存 防止自己进程被读内存(ReadProcessMemory)
NtWriteVirtualMemory 写内存 防止内存被写
KdReceivePacket KDCOM.dll中Com串口接收数据的函数 你自己做过滤
KdSendPacket KDCOM.dll中的Com串口发送数据函数 HOOK上面跟这个函数.可以防止双机调试

二丶反反调试

上面说的是防,那么我们可以进行攻击

1.针对DebugPort

1.可以对DebugPort下内存断点.一旦有程序进行修改.就会被断下.
从而找到对应的反调试代码.对这个代码进行patch.

2.可以自建调试体系.不走它的.进而绕过这个保护.

2.针对 KdDisableDebugger

这个函数会检测调试器.从而禁止被调试.

可以在对应的这些函数地址下段点.然后对相关代码进行patch.比如进行返回.

3.针对HOOK
如果是HOOK.我们可以借助一些工具进行恢复.当然如果可以你自己也可以写恢复代码.这看你当时的需求了.
常见的就比如: pchunter PowerTools anti(安天)

3.花指令

进行反调试可以进行加花.故意进行干烧.

如:

push edx
pop edx
inc ecx
dec ecx
add  esp,1
sub esp,1

直接对一个寄存器进行加.然后进行减.操作完根本不会影响寄存器的原值.

jmp LABEL
db opcode
LABEL

还有这种.中间加个db.但是他会影响你.

db Opcode跟后面指令结合就会错乱.但是不会影响程序正常执行.

jz  label
jnz label
db opcode
Label

不管是否正确.都会进行强制跳转.进而进行干扰.

转载于:https://www.cnblogs.com/iBinary/p/10990674.html

64位内核开发第五讲,调试与反调试相关推荐

  1. 64位内核开发第二讲.内核编程注意事项,以及UNICODE_STRING

    目录 一丶驱动是如何运行的 1.服务注册驱动 二丶Ring3跟Ring0通讯的几种方式 1.IOCTRL_CODE 控制代码的几种IO 2.非控制 缓冲区的三种方式. 三丶Ring3跟Ring0开发区 ...

  2. 64位内核开发第8讲,文件操作.以及删除文件.

    目录 文件操作,以及强删文件. 一丶文件操作 1.文件操作的几种方式 1.2 文件的表示 二丶文件操作的常见内核API 三丶内核中三种定义结构体的方式 四丶驱动创建文件的完整代码示例 4.1.4内核中 ...

  3. 64位内核开发第14将,路径的相互转换以及获取.

    待定 转载于:https://www.cnblogs.com/iBinary/p/11257361.html

  4. 64位内核第一讲,和32位内核的区别

    64位内核第一讲,和32位内核的区别 双击调试配置请查看 连接: https://www.cnblogs.com/aliflycoris/p/5877323.html 一丶编译的区别. 首先,还是使用 ...

  5. android5.1内核版本,Android-x86现已基于5.1.1 Lollipop:支持UEFI和64位内核

    由于采用了Linux 4.0.9内核,Android-x86 5.1 RC1也是首个支持64位内核的版本.此外,它还支持多点触控.UEFI启动.蓝牙.摄像头.以太网(仅HDCP).Wi-Fi.音频.以 ...

  6. mac开启64位内核

    sudo nvram boot-args="arch=x86_64" 查看是否是64位: 桌面左上角的小苹果,关于本机,更多信息,软件,64位内核,开启 在终端输入上面的命令就能开 ...

  7. linux 进程映射空间 libc,为什么不能在64位内核的32位Linux进程中映射(MAP_FIXED)最高虚拟页面?...

    尝试测试时是否允许访问跨越x86中零边界的内存?在Linux的用户空间中,我编写了一个32位测试程序,该程序试图映射32位虚拟地址空间的低和高页. 之后echo 0 | sudo tee /proc/ ...

  8. 64位内核第二讲,进程保护之对象钩子

    64位内核第二讲,进程保护. 一丶什么是保护. 什么是保护. 比如我们安装了xxx杀毒软件.那么此时你用任务管理器关闭.是关闭不了的.原因是内核已经做了保护. 那么去掉保护的前提就是你要给自己的软件做 ...

  9. AIX 64位内核与32位内核区别

    Q:怎么确定机器会运行 64 位内核?  A:运行 64 位内核要求 64 位硬件.对于 AIX 5.2,所有 IBM eServer pSeries 64 位硬件都能运行 64 位或 32 位内核. ...

最新文章

  1. 先为成功的人工作,再与成功的人合作,最后是让成功的人为你工作
  2. OpenCV图像数据访问,查询表和时间消耗测试
  3. POJ 2513 Colored Sticks
  4. python按索引删除字符串,基于特定的索引字符串值选择记录,然后通过python删除后续字段...
  5. 实现拷贝函数(strcpy)
  6. 探索 OpenStack 之(7):Neutron 深入探索之 Open vSwitch (OVS) + GRE 之 Neutron节点篇
  7. elasticsearch问题解决之分片副本UNASSIGNED
  8. PHP之webservice调用接口
  9. 对数似然值 matlab,matlab aic准则 怎么计算对数似然值
  10. 澳洲计算机信息安全专业,澳洲网络信息安全专业有哪些牛校?本科硕士有哪些方向可以选择?...
  11. 工业机器人产业链展板_赵德明调研六大新产业十大产业链发展情况
  12. Mirror for Samsung TV for mac(三星智能电视投屏软件)
  13. 视频剪辑,就上这5个网站找素材,免费可商用。
  14. 参考文档一:性能测试---测试方案
  15. MATLAB在线工具
  16. Arduino + AD9851 DDS信号模块 频率控制字和相位控制字写入
  17. 2021年中国奶油行业上市企业对比分析:海融科技VS 立高食品[图]
  18. Qualcomm NPU 高通神经网络处理芯片
  19. WEB UI自动化测试框架搭建(一)_公用方法Utils
  20. D3D12渲染技术之纹理坐标

热门文章

  1. 模板引擎——Thymeleaf
  2. 案例:文件下载需求:1. 页面显示超链接 2. 点击超链接后弹出下载提示框 3. 完成图片文件下载||中文文件问题
  3. 判断一个整数是否是水仙花数 || 编写程序,根据输入的月份和年份,求出该月的天数(1-12)|| 运算符的优先级问题 ||输出小写的a-z以及大写的Z—A||求出1-1/2+1/3-1/4…..1/
  4. eclipse安装软件时长时间停留在calculating requirements and dependencies 的解决方案
  5. Python 【企鹅号、QQ看点】短视频的自动上传与发布实例演示,同时支持抖音、快手、哔哩哔哩、小红书、微视、西瓜视频、视频号等平台的视频自动化同步发布
  6. BAT批处理文件无法运行提示“/E /I /Y ‘XCOPY‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”解决方法
  7. Python 基础语法(三)
  8. android界面不可见键盘隐藏功能,Android中点击隐藏软键盘最佳方法
  9. 模拟退火算法解决TSP(python实现 110+行代码)【gif生成】
  10. idea调试怎么跳出循环_使用IDEA的Debug调试功能,查看程序的运行过程