找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 14180|回复: 13

反调试的几种方法

[复制链接]

8

主题

69

回帖

2

精华

钻石会员

积分
3279
发表于 2015-5-2 15:04:12 | 显示全部楼层 |阅读模式
本帖最后由 陌路人 于 2015-5-3 17:46 编辑

调试器在附加进程的时候 会调用 这个函数 NtDebugActiveProcess
这个函数内部呢 有很多判断 ,
比如 判断  +0x320 Wow64Process     : (null)   
这个是判断  是不是 32位 进程,  如果不等于0 表示是64位进程
如果 是32 位 进程 ,还 会判断  目标进程 是不是 32位 进程
如果 32位  进程 调试 64位 进程 就会 退出 无法附加 ,
所以 就会出现 od 无法 附加  64位 程序

2判断 有很多 但是都不是重点, 下面主要说下这个域
//  判断进程是否是受保护进程Flags2-> ProtectedProcess 是否为0  
正常情况下 是0的  ,如果判断 不等于0  就会退出 并返回错误码 return 0xc0000712;
//如果 我们 把它修改成 1  ,  看看会发生什么情况
  1.    +0x43c Flags2           : 0xd000
  2.    +0x43c JobNotReallyActive : 0y0
  3.    +0x43c AccountingFolded : 0y0
  4.    +0x43c NewProcessReported : 0y0
  5.    +0x43c ExitProcessReported : 0y0
  6.    +0x43c ReportCommitChanges : 0y0
  7.    +0x43c LastReportMemory : 0y0
  8.    +0x43c ReportPhysicalPageChanges : 0y0
  9.    +0x43c HandleTableRundown : 0y0
  10.    +0x43c NeedsHandleRundown : 0y0
  11.    +0x43c RefTraceEnabled  : 0y0
  12.    +0x43c NumaAware        : 0y0
  13.    +0x43c ProtectedProcess : 0y0   
  14.    +0x43c DefaultPagePriority : 0y101
  15.    +0x43c PrimaryTokenFrozen : 0y1
  16.    +0x43c ProcessVerifierTarget : 0y0
  17.    +0x43c StackRandomizationDisabled : 0y0
  18.    +0x43c AffinityPermanent : 0y0
  19.    +0x43c AffinityUpdateEnable : 0y0
  20.    +0x43c PropagateNode    : 0y0
  21.    +0x43c ExplicitAffinity : 0y0
  22.    +0x43c Spare1           : 0y0
  23.    +0x43c ForceRelocateImages : 0y0
  24.    +0x43c DisallowStrippedImages : 0y0
  25.    +0x43c LowVaAccessible  : 0y0
复制代码

现在 已经改成 1了
+0x43c ProtectedProcess : 0y1
NW33D@0([@R63[428OXXF.jpg

其次 在附加的过程中 会调用这个函数

DbgkpPostFakeThreadMessages  
这个函数的内部 会遍历 目标进程的线程
其中有一个判断 就是判断线程的  
判断 ETHREAD->CrossThreadFlags 第二 位 是否是0; 正常情况下是 1
  如果改成 0的话 会附加失败  ;  0x450 ThreadInserted   : 0y1
  1.    +0x450 CrossThreadFlags : 0xa802
  2.    +0x450 Terminated       : 0y0
  3.    +0x450 ThreadInserted   : 0y1
  4.    +0x450 HideFromDebugger : 0y0
  5.    +0x450 ActiveImpersonationInfo : 0y0
  6.    +0x450 Reserved         : 0y0
  7.    +0x450 HardErrorsAreDisabled : 0y0
  8.    +0x450 BreakOnTermination : 0y0
  9.    +0x450 SkipCreationMsg  : 0y0
  10.    +0x450 SkipTerminationMsg : 0y0
  11.    +0x450 CopyTokenOnOpen  : 0y0
  12.    +0x450 ThreadIoPriority : 0y010
  13.    +0x450 ThreadPagePriority : 0y101
  14.    +0x450 RundownFail      : 0y0
  15.    +0x450 NeedsWorkingSetAging : 0y0
复制代码

我们修改成 0 后
7I~9(6{R1RGS8CO1E{BH93S.jpg

还有一个就是  DbgkpSetProcessDebugObject 这个函数
这个函数 是把 调试对象 设置到 目标进程的调试端口的

附加进程后 进程的 eprocess->+0x440 NoDebugInherit  会变成 1
正常情况下是 0;
  +0x440 Flags            : 0x144d0801
   +0x440 CreateReported   : 0y1
   +0x440 NoDebugInherit   : 0y0    正常的情况下 是0 的
如果成为 1 了  表示 进程有调试器 附加了

8

主题

69

回帖

2

精华

钻石会员

积分
3279
 楼主| 发表于 2015-5-2 15:05:55 | 显示全部楼层
{:soso_e179:},太猥琐了

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2015-5-2 15:20:37 | 显示全部楼层
还有一个,把ETHREAD里某个成员的数值改乱也能达到同样的效果。。。

具体哪个不记得了,群里NPX说的。。。

不过,确实有些DBG开头的变量,不在PG的检测范围之内。

0

主题

46

回帖

0

精华

金牌会员

积分
788
发表于 2015-5-2 15:31:14 | 显示全部楼层
多线程互相加密解密也挺麻烦的..

0

主题

35

回帖

0

精华

铜牌会员

积分
158
发表于 2015-5-2 16:31:26 | 显示全部楼层
学习了!!

8

主题

69

回帖

2

精华

钻石会员

积分
3279
 楼主| 发表于 2015-5-2 17:41:57 | 显示全部楼层
Tesla.Angela 发表于 2015-5-2 15:20
还有一个,把ETHREAD里某个成员的数值改乱也能达到同样的效果。。。

具体哪个不记得了,群里NPX说的。。。 ...

线程有 一个ETHREAD->CrossThreadFlags  值 该0 就不可以附加了,
主要 今天发现这个再网上 没有发现  有介绍过的

1

主题

22

回帖

0

精华

铜牌会员

积分
156
发表于 2015-5-2 22:02:59 | 显示全部楼层
看看什么猥琐的方法

8

主题

69

回帖

2

精华

钻石会员

积分
3279
 楼主| 发表于 2015-5-3 16:01:03 | 显示全部楼层
Tesla.Angela 发表于 2015-5-2 15:20
还有一个,把ETHREAD里某个成员的数值改乱也能达到同样的效果。。。

具体哪个不记得了,群里NPX说的。。。 ...

哥 , 把帖子删了把   ,o(︶︿︶)o 唉

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-5-4 09:08:53 | 显示全部楼层
明天进步一点点

4

主题

145

回帖

0

精华

金牌会员

积分
1189
发表于 2015-8-5 21:37:23 | 显示全部楼层
第一个Flags2-> ProtectedProcess 为1 OD还是附加成功了 我是用windbg改的 平台是 win7 x64
第一种方法测试无用

4

主题

145

回帖

0

精华

金牌会员

积分
1189
发表于 2015-8-5 21:37:57 | 显示全部楼层
还有NoDebugInherit 附加后 没有变化...

4

主题

145

回帖

0

精华

金牌会员

积分
1189
发表于 2015-8-5 21:57:59 | 显示全部楼层
好吧 只是只有记事本才有效果 其它程序位数不同 比如calc.exe 标志位不同 calc.exe的前12个为1
这时候设置把第13位设置成1 有能附加...不知什么问题

4

主题

145

回帖

0

精华

金牌会员

积分
1189
发表于 2015-8-5 22:25:52 | 显示全部楼层
好吧!不是哪个程序的问题,有时候打开_eprocess 时 打开后的标志位不同 flags2.jpg
比如这次...这样如果把那个标志位改了没有效果 我尝试直接对地址写d800 也就是不出现上述标志位情况时显示的值(默认是d000,第13位为1后为d800)
还是能附加 不知什么原因...

9

主题

43

回帖

2

精华

铂金会员

积分
2525
发表于 2015-10-3 09:55:58 | 显示全部楼层
线程的 那个东西是因为 调试流程中会用到= = 乱改 就发送不了调试消息了并且会设置dbgport为0
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表