读<<IDA pro权威指南>>之动态计算目标地址

<<IDA pro权威指南>> p348页,另一种技巧常用于面向Windows的恶意软件中,它配置一个异常处理程序,并有意触发一个异常,然后在处理异常时操纵进程的寄存器状态。

下面的例子被tElock反逆向工程工具用于隐藏程序的真实控制流。

00535FC2    E8 00000000     call    00535FC7
00535FC7    5D              pop     ebp                              ;相当于ebp = 00535FC7
00535FC8    8D45 46         lea     eax, dword ptr [ebp+46]          ;0053600D
00535FCB    45              inc     ebp
00535FCC    50              push    eax                              ; push 后,esp = 0018FB58
00535FCD    33C0            xor     eax, eax
00535FCF    64:FF30         push    dword ptr fs:[eax]               ; push 后,ESP = 0018FB54
00535FD2    64:8920         mov     dword ptr fs:[eax], esp          ;fs:[0] = 0018FB54
00535FD5    90              nop
00535FD6    F7F1            div     ecx                              ;引发除0异常
00535FD8    0000            add     byte ptr [eax], al
00535FDA    0000            add     byte ptr [eax], al
00535FDC    90              nop

执行完 00535FD6后,程序引发异常,堆栈如下:

121624_LQH2_1044317.png

可以看到0018FB54栈上存放指向一个SEH记录的指针

             0018FB58指向一个SE处理程序的指针

而这个刚好满足_EXCEPTION_REGISTRATION_RECORD结构

0:003> dt _EXCEPTION_REGISTRATION_RECORD

ntdll!_EXCEPTION_REGISTRATION_RECORD

   +0x000 Next             : Ptr32 _EXCEPTION_REGISTRATION_RECORD

   +0x004 Handler          : Ptr32     _EXCEPTION_DISPOSITION 

也即0053600D为事先注册的SEH异常处理程序的地址,0018FB5C为指向下一个SEH记录的指针

这样也达到了必须计算才能跟踪程序流程的目的,隐藏了程序的真实控制流。

转载于:https://my.oschina.net/Yuqingmu/blog/393245

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值