首页
社区
课程
招聘
[旧帖] [求助]逆向分析软件中碰到的问题 0.00雪花
发表于: 2013-12-13 11:54 1469

[旧帖] [求助]逆向分析软件中碰到的问题 0.00雪花

2013-12-13 11:54
1469
在逆向分析一个软件的过程中,碰到如下的反调试问题
用ollydbg加载该软件后,软件停在了00403B80处:

00403B80 >/$ /E9 00000000         jmp     00403B85
00403B85  |> \E9 00000000          jmp     00403B8A
00403B8A  |>  55                           push    ebp
00403B8B  |.  89E5                        mov     ebp, esp
00403B8D  |.  53                            push    ebx
00403B8E  |.  56                            push    esi
00403B8F  |.  57                            push    edi
00403B90  |.  81EC 70020000       sub     esp, 270

此时的eip指向00403B80,也就是下一条指令的地址

然而当我按一下单步调试时,软件就跳转到了以下界面
0367FF75    9C                         pushfd
0367FF76    68 54FD6703        push    367FD54
0367FF7B    E8 60FDFFFF         call    0367FCE0
0367FF80    9D                         popfd
0367FF81    61                         popad
0367FF82    81C4 E4020000    add     esp, 2E4
0367FF88  - E9 F33BD8FC        jmp     LogIC.<模块入口点>

此时的eip指向了0367FF75,而不是指向本应该指向的00403B85

这是为什么呢?是怎么实现的?如何破解这个反调试呢?
我发现这个软件的每一条指令当单步执行时都会跳到类似的界面,pushfd,popfd
貌似是用pushfd和popfd构建了一个反调试的环境。
这个原理是什么呢?

我在网上搜了一下,貌似跟这个反调试相关的内容:
int3
pushfd

int3
popfd
一样的效果。
只要修改int3后面的popfd为其他值,OD都能通过。老掉牙的技术又重新被用了。SEH异常机制的运用而已。
原理:
在SEH异常处理中设置了硬件断点DR0=EIP+2,并把EIP的值加2,那么应该在int3,popfd后面的指令执行时会产生单步异常。但是OD遇到前面是popfd/pushfd时,OD会自动在popfd后一指令处设置硬件断点,而VMP的seh异常处理会判断是否已经设置硬件断点,如果已经有硬件断点就不产生单步异常,所以不能正常执行。

只是我还没有搞明白,呵呵,有没有相关的书籍介绍呀
软件的下载地址在http://www.logicomep.com/assets/downloads/logic201e4.exe

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//