Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

C/C++本地代码调试

帖子发起人: luckyzhangwei   发起时间: 2013-12-12 10:43 上午   回复: 3

Print Search
帖子排序:    
   2013-12-12, 10:43 上午
luckyzhangwei 离线,最后访问时间: 2013/12/11 14:04:04 luckyzhangwei

发帖数前500位
注册: 2013-12-11
发 贴: 3
求助,张老师,逆向软件中碰到的反调试问题
Reply Quote
在逆向分析一个软件的过程中,碰到如下的反调试问题
用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


IP 地址: 已记录   报告
   2013-12-13, 16:32 下午
luckyzhangwei 离线,最后访问时间: 2013/12/11 14:04:04 luckyzhangwei

发帖数前500位
注册: 2013-12-11
发 贴: 3
Re: 求助,张老师,逆向软件中碰到的反调试问题
Reply Quote
经过测试,发现在ollydbg1.0和windbg6.12的情况下调试都会出现这个问题。
但如果更换到ollydbg2.0版本下就不会出现这个问题,单步运行正常
只是还是不知道产生这个问题的根本原因是什么,只知道应该和调速器相关,而不是反调试的原因

IP 地址: 已记录   报告
   2013-12-14, 12:58 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 求助,张老师,逆向软件中碰到的反调试问题
Reply Quote
石油勘采有关的软件,正常的软件版权保护,为何要破解呢?
IP 地址: 已记录   报告
   2013-12-14, 20:46 下午
luckyzhangwei 离线,最后访问时间: 2013/12/11 14:04:04 luckyzhangwei

发帖数前500位
注册: 2013-12-11
发 贴: 3
Re: 求助,张老师,逆向软件中碰到的反调试问题
Reply Quote
为了研究里面采用的算法,提高我们国内的算法水平,呵呵
我换个台电脑,发现ollydbg1.0就可以运行了。应该是装的操作系统的问题,这个已经超出我的能力了,所以暂时不考虑了
不过这个软件是qt写的,用平常的破解mfc的方法还是不能破解,看来得去研究研究qt软件的逆向了
anyway,谢谢张老师了,呵呵,再碰到什么难题,还会找您的,您真热心。

IP 地址: 已记录   报告
高端调试 » 软件调试 » C/C++本地代码调试 » Re: 求助,张老师,逆向软件中碰到的反调试问题

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.