首页
论坛
专栏
课程

[讨论][求助]反调试问题

2019-4-13 13:48 1349
Xu.

[讨论][求助]反调试问题

2019-4-13 13:48
1349
对某64位程序做逆向分析,由于新手刚接触这一块出现了很多问题,不知道该从哪儿下手,现将问题汇总如下,希望大佬不惜赐教:

1、x64dbg直接附加程序,会导致程序退出
2、x64dbg采用隐藏模式附加程序,程序正常运行,但下断调试会导致程序退出
3、使用x64dbg插件ScyllaHide,将选项全部选上,下断调试会退出
4、采用CE VEH模式,可以在CE调试器里面调试。
5、使用ExeinfoPe查出VMP2.X的壳
6、使用PCHunter未发现程序做了驱动保护

该程序的反调试检测做了哪些。


[公告]LV6级以上的看雪会员可以免费获得《2019安全开发者峰会》门票一张!!

最新回复 (15)
Lixinist 1 2019-4-13 16:41
2
0
ThreadHideFromDebugger(0x11)
白菜大哥 2019-4-13 17:12
3
0
发程序
你的香气 2019-4-13 17:20
4
0
你的程序发出来看看, 检测点应该是不少的, 你提供的信息太少了。

你的2,3 两点,估计是程序调用NtSetInformationThread设置了标志ThreadHideFromDebugger导致的。
最后于 2019-4-13 17:22 被你的香气编辑 ,原因:
Xu. 2019-4-13 17:56
5
0
我用sharpod 试了一下 ThreadHideFromDebugger  程序在调试的时候还是会崩溃掉
我不知道这么做对不对 但是看资料这个插件是支持这个反反调试的吧 不知道有没有理解上的错误


Xu. 2019-4-13 17:57
6
0
白菜大哥 发程序
程序太大了
Sprite雪碧 2019-4-13 22:21
7
0
传送门:https://bbs.pediy.com/thread-250468.htm
你的香气 2019-4-15 10:09
8
0
那你再看看程序是不是设置了UEH(UnhandlerExceptionFilter),并且还在UEH里面处理由程序主动触发的异常。
UEH在有调试器的情况下不会被调用,所以如果你的调试器忽略了这个异常,那么程序也是基本上直接就退了。

你现在可以这样测试一波,在异常分发之前(在异常发给调试器或者程序之前, 在NTDLL.dll, 找到KiUserExceptionDispather的处理流程里面)下一个断点, 然后在你的目标程序里面下断点,然后借此看看你的的断点命中之后会不会进入异常分发之前设置的这个断点, 如果断下来了, 借此看看程序在什么地方被停止了。
Xu. 2019-4-16 04:57
9
0
你的香气 那你再看看程序是不是设置了UEH(UnhandlerExceptionFilter),并且还在UEH里面处理由程序主动触发的异常。 UEH在有调试器的情况下不会被调用,所以如果你的调试器忽略了这个异 ...
按照您的方法做了一遍,程序没有在KiUserExceptionDispather这个地方断下来,然后就退出了,还有别的点可以去检测吗
你的香气 2019-4-23 09:45
10
0
你下的断点是硬件断点,还是软件断点?调试器设置一下不要忽略异常。看看会不会产生异常并且中断。 

程序没有在KiUserExceptionDispather断下来,有可能是你的调试器处理了这个异常,那么异常处理流程肯定不会进入到这个流程。你顺便再看看硬件断点是否是被占坑了(查看DR0~DR7的值); 可以尝试在非关键代码上面任意下一个硬件断点, 看看会不会出现程序退出。

在非常关键代码上使用int3 断点来下一个断点,看看有没有可能是程序的对函数代码等有检测。如果是API断点的话, 尝试把断点下的更深入一些, 不要在函数头下断点。

如果以上都不是的话, 那么可能还是因为这个程序设置了ThreadHideFromDebugger.
Xu. 2019-4-25 05:20
11
0
之前采用的是软件断点,调试器也做了异常区间的忽略;
本次试验,删除了忽略的异常区间,并对KiUserExceptionDispather设置硬件断点(执行),未发生异常并且中断;
硬件断点(DR0~DR7)值为0;
在非关键代码上面任意下一个硬件断点,程序不会退出,但是如果执行此处会退出;
在非关键代码使用INT3断点,程序不会退出,同样是执行会退出。

对ThreadHideFromDebugger检查的时候,在NtSetInformationThread 处下了硬件断点(或软件断点),第二个参数也并非 ThreadHideFromDebugger ,这是我截取下断时候的传递参数。


另外在NtSetInformationThread处下断的时候,能看到这个函数反复在调用,不知道可否依据此判断这个地方确实存在反检测呢
最后于 2019-4-25 10:03 被Xu.编辑 ,原因:
Xu. 2019-4-25 05:23
12
0
你的香气 你下的断点是硬件断点,还是软件断点?调试器设置一下不要忽略异常。看看会不会产生异常并且中断。 程序没有在KiUserExceptionDispather断下来,有可能是你的调试器处理了这个异常 ...
回复在上面,忘了引用消息,感谢你持续的关注。
吾之初心_717666 2019-4-25 17:47
13
0
调试游戏遇到和楼主一样的问题断点下不了,SE2.3.9的壳;NtSetInformationThread的参数也是0000000A;下断点(硬断,int3, 内存)游戏假死 取消后恢复,如果下断点的同时对KiUserExceptionDispather也下断点,那游戏直接蹦掉。单独下KiUserExceptionDispather也断不下来。@你的香气  这是什么情况
你的香气 2019-4-26 15:54
14
0
Xu. 回复在上面,忘了引用消息,感谢你持续的关注。
你是附加的这个程序么? ThreadHideFromDebugger 的设置不需要一直调用,他只用在程序运行之前调用一次即可。
你的香气 2019-4-26 15:57
15
0
吾之初心_717666 调试游戏遇到和楼主一样的问题断点下不了,SE2.3.9的壳;NtSetInformationThread的参数也是0000000A;下断点(硬断,int3, 内存)游戏假死 取消后恢复,如果下断点的同 ...
KiUserExceptionDispather这个函数的断点要注意了, 可以尝试下断点更深入一些, 某些程序会检测函数头。 然后, 啥游戏?
游客
登录 | 注册 方可回帖
返回