android 多线程反调试,64位内核开发第五讲,调试与反调试

反调试与反反调试

一丶反调试的几种方法

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值