魔弑神 发表于 2019-8-23 19:34

Check OD



炒冷饭系列

有个 Sharpod bug

https://share.weiyun.com/5pKN5r0

梦游枪手 发表于 2019-8-23 23:00

本帖最后由 梦游枪手 于 2019-8-25 13:20 编辑

比之前的多了这些反调试。
GetProcessTimes,sharpOD没处理好GetProcessTimes,直接返回0,被检测。只修改返回值没有用,程序还会用GetProcessTimes检测时间差。
NtSetThreadInformation,也是没处理好的一个点,连续调用两次该函数,第一次正常使用,第二次设置了最后一个参数,正常情况会调用失败,具体可以看xjun大佬的反调试源码。
0xc0000004是正常运行的返回值。

peb64,拿到wow64进程的peb64,然后取标志位反调试。正常运行的程序标志位值为
_RTL_USER_PROCESS_PARAMETERS64->Flags==0x?01(不同类型的程序不一样)
_RTL_USER_PROCESS_PARAMETERS64->StandardOutput==0x10001
peb32,多检测了一个_RTL_USER_PROCESS_PARAMETERS->Flags,跟上面一样。
搞定上面那些就能运行起来了。接下来是按钮点击。

多线程检测,这个就不多讲了,直接挂起两条线程,处理一下402c8e的检测。
ThreadContext,用来检测程序设置的硬件断点。设置在dr1,dr2,dr3,如图

OD自行设置一下就行。
crc检测,比之前的多了一个crc,在402d96获取,4baf24,4baf28,4baf2c存放三个crc,第一个crc就是402d96获取的,402e3e获取后面两个的crc,填进去就完事。还有一次crc是复制到kernel32.dll里面执行的。硬件断点会带你到取crc的地方的。
过完就是YES了。

魔弑神 发表于 2019-8-24 23:38

本帖最后由 魔弑神 于 2019-8-24 23:47 编辑

梦游枪手 发表于 2019-8-23 23:00
比之前的多了这些反调试。
GetProcessTimes,sharpOD没处理好GetProcessTimes,直接返回0,被检测。只修改 ...
NtSetThreadInformation 这个地方说错了    最后参数设置一个未知的数 就可以了 并非调用两次检测 (xjun的那个是sod bug这个可以说是shapod bug)
在附加方面新增一种故意调试的反调试目前所有的插件都会陷入这个陷阱


Dr0忘记加进去了 汗

梦游枪手 发表于 2019-8-25 00:35

魔弑神 发表于 2019-8-24 23:38
NtSetThreadInformation 这个地方说错了    最后参数设置一个未知的数 就可以了 并非调用两次检测 (xjun ...

我是觉得NtSetThreadInformation跟xjun的有异曲同工之处,第一次先调用正常的NtSetThreadInformation,第二次就传入无效参数来anti,他的源码用是两个sizeof(PVOID),这里是只设置了最后一个参数。
附加的话,我补上MZ头,附加上去后把两条线程挂起就能运行了。
页: [1]
查看完整版本: Check OD