64位内核开发第五讲,调试与反调试
目录
- 反调试与反反调试
- 一丶反调试的几种方法
- 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位内核开发第五讲,调试与反调试相关推荐
- 64位内核开发第二讲.内核编程注意事项,以及UNICODE_STRING
目录 一丶驱动是如何运行的 1.服务注册驱动 二丶Ring3跟Ring0通讯的几种方式 1.IOCTRL_CODE 控制代码的几种IO 2.非控制 缓冲区的三种方式. 三丶Ring3跟Ring0开发区 ...
- 64位内核开发第8讲,文件操作.以及删除文件.
目录 文件操作,以及强删文件. 一丶文件操作 1.文件操作的几种方式 1.2 文件的表示 二丶文件操作的常见内核API 三丶内核中三种定义结构体的方式 四丶驱动创建文件的完整代码示例 4.1.4内核中 ...
- 64位内核开发第14将,路径的相互转换以及获取.
待定 转载于:https://www.cnblogs.com/iBinary/p/11257361.html
- 64位内核第一讲,和32位内核的区别
64位内核第一讲,和32位内核的区别 双击调试配置请查看 连接: https://www.cnblogs.com/aliflycoris/p/5877323.html 一丶编译的区别. 首先,还是使用 ...
- android5.1内核版本,Android-x86现已基于5.1.1 Lollipop:支持UEFI和64位内核
由于采用了Linux 4.0.9内核,Android-x86 5.1 RC1也是首个支持64位内核的版本.此外,它还支持多点触控.UEFI启动.蓝牙.摄像头.以太网(仅HDCP).Wi-Fi.音频.以 ...
- mac开启64位内核
sudo nvram boot-args="arch=x86_64" 查看是否是64位: 桌面左上角的小苹果,关于本机,更多信息,软件,64位内核,开启 在终端输入上面的命令就能开 ...
- linux 进程映射空间 libc,为什么不能在64位内核的32位Linux进程中映射(MAP_FIXED)最高虚拟页面?...
尝试测试时是否允许访问跨越x86中零边界的内存?在Linux的用户空间中,我编写了一个32位测试程序,该程序试图映射32位虚拟地址空间的低和高页. 之后echo 0 | sudo tee /proc/ ...
- 64位内核第二讲,进程保护之对象钩子
64位内核第二讲,进程保护. 一丶什么是保护. 什么是保护. 比如我们安装了xxx杀毒软件.那么此时你用任务管理器关闭.是关闭不了的.原因是内核已经做了保护. 那么去掉保护的前提就是你要给自己的软件做 ...
- AIX 64位内核与32位内核区别
Q:怎么确定机器会运行 64 位内核? A:运行 64 位内核要求 64 位硬件.对于 AIX 5.2,所有 IBM eServer pSeries 64 位硬件都能运行 64 位或 32 位内核. ...
最新文章
- 先为成功的人工作,再与成功的人合作,最后是让成功的人为你工作
- OpenCV图像数据访问,查询表和时间消耗测试
- POJ 2513 Colored Sticks
- python按索引删除字符串,基于特定的索引字符串值选择记录,然后通过python删除后续字段...
- 实现拷贝函数(strcpy)
- 探索 OpenStack 之(7):Neutron 深入探索之 Open vSwitch (OVS) + GRE 之 Neutron节点篇
- elasticsearch问题解决之分片副本UNASSIGNED
- PHP之webservice调用接口
- 对数似然值 matlab,matlab aic准则 怎么计算对数似然值
- 澳洲计算机信息安全专业,澳洲网络信息安全专业有哪些牛校?本科硕士有哪些方向可以选择?...
- 工业机器人产业链展板_赵德明调研六大新产业十大产业链发展情况
- Mirror for Samsung TV for mac(三星智能电视投屏软件)
- 视频剪辑,就上这5个网站找素材,免费可商用。
- 参考文档一:性能测试---测试方案
- MATLAB在线工具
- Arduino + AD9851 DDS信号模块 频率控制字和相位控制字写入
- 2021年中国奶油行业上市企业对比分析:海融科技VS 立高食品[图]
- Qualcomm NPU 高通神经网络处理芯片
- WEB UI自动化测试框架搭建(一)_公用方法Utils
- D3D12渲染技术之纹理坐标
热门文章
- 模板引擎——Thymeleaf
- 案例:文件下载需求:1. 页面显示超链接 2. 点击超链接后弹出下载提示框 3. 完成图片文件下载||中文文件问题
- 判断一个整数是否是水仙花数 || 编写程序,根据输入的月份和年份,求出该月的天数(1-12)|| 运算符的优先级问题 ||输出小写的a-z以及大写的Z—A||求出1-1/2+1/3-1/4…..1/
- eclipse安装软件时长时间停留在calculating requirements and dependencies 的解决方案
- Python 【企鹅号、QQ看点】短视频的自动上传与发布实例演示,同时支持抖音、快手、哔哩哔哩、小红书、微视、西瓜视频、视频号等平台的视频自动化同步发布
- BAT批处理文件无法运行提示“/E /I /Y ‘XCOPY‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”解决方法
- Python 基础语法(三)
- android界面不可见键盘隐藏功能,Android中点击隐藏软键盘最佳方法
- 模拟退火算法解决TSP(python实现 110+行代码)【gif生成】
- idea调试怎么跳出循环_使用IDEA的Debug调试功能,查看程序的运行过程