Re: 求助,张老师,逆向软件中碰到的反调试问题
C/C++本地代码调试
求助,张老师,逆向软件中碰到的反调试问题
luckyzhangwei
2013-12-12, 10:43 上午
在逆向分析一个软件的过程中,碰到如下的反调试问题
用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
Re: 求助,张老师,逆向软件中碰到的反调试问题
luckyzhangwei
2013-12-13, 16:32 下午
经过测试,发现在ollydbg1.0和windbg6.12的情况下调试都会出现这个问题。
但如果更换到ollydbg2.0版本下就不会出现这个问题,单步运行正常
只是还是不知道产生这个问题的根本原因是什么,只知道应该和调速器相关,而不是反调试的原因
Re: 求助,张老师,逆向软件中碰到的反调试问题
格蠹老雷
2013-12-14, 12:58 下午
石油勘采有关的软件,正常的软件版权保护,为何要破解呢?
Re: 求助,张老师,逆向软件中碰到的反调试问题
luckyzhangwei
2013-12-14, 20:46 下午
为了研究里面采用的算法,提高我们国内的算法水平,呵呵
我换个台电脑,发现ollydbg1.0就可以运行了。应该是装的操作系统的问题,这个已经超出我的能力了,所以暂时不考虑了
不过这个软件是qt写的,用平常的破解mfc的方法还是不能破解,看来得去研究研究qt软件的逆向了
anyway,谢谢张老师了,呵呵,再碰到什么难题,还会找您的,您真热心。