首页
社区
课程
招聘
[分享] 爱琴海CrackMe 第三道题的程序快速解密
2017-6-11 04:04 4158

[分享] 爱琴海CrackMe 第三道题的程序快速解密

2017-6-11 04:04
4158

虽然没有做出来,也阻止不了我来分享。

看了其他几位大牛的writeup,很多反调试手段并没有特别指明。

可以参考风间仁的writeup,对反调试处理过程较为详细。http://bbs.pediy.com/thread-218241.htm

这道程序是使用VB语言写的,然后作者使用手工汇编对程序增加了几个反调试的处理。所幸的是只是做了VB程序入口前的反调试。

第一个反调试,修改程序入口

作者将程序入口修改为0x0,意味着在程序入口(EIP)在基址0x00400000处,在0x00400000处的汇编指令发现会跳转到0x00401090。

HEADER:00400000                 dec     ebp
HEADER:00400001                 pop     edx
HEADER:00400002                 push    edx
HEADER:00400003                 inc     ebp
HEADER:00400004                 push    401090h
HEADER:00400009                 retn

第二个反调试(不太合适),VB程序入口变形

VB程序的入口就是将程序控制权交给MSVBxx.dll,这个入口就是ThunRTMain。而在到达这个入口前,作者大量使用push +retn指令,使用非正常手段来控制程序流程。


第三个反调试 堆栈段寄存器

从.text:00408EC0 开始,利用pop SS + pushf + pop edi,判断TF标志,进行流程控制。

具体解释可以搜索加粗关键字


第四个反调试 OEP 程序入口

004088F4    B8 26FFBFFF     mov     eax, FFBFFF26
00408908    F7D0            not     eax
00408911    8B00            mov     eax, dword ptr [eax] 


004088DF    A3 E5884000     mov     dword ptr [4088E5], eax
004088E4   /E9 57000000     jmp     00408940

mov eax, dword ptr [eax],恰好是程序入口的第二个字节,如果没有修改程序入口地址,那么 eax=0,否则是10H,

再通过mov [4088E5],eax 隐秘地修改跳转指令的偏移。


第五个反调试 IsDebuggerPresent

这个比较常见,不叙述了


第六个反调试 修改VB程序的指令

我想说,这个无语。修改了三个加法指令,并互调两个VB全局变量


做完题目后,我萌生了一个想法,对这个程序脱壳,还原它的本来面目。

VB程序的入口在 jmp ThunRTMain,在到达这个入口前,程序已经被还原成了作者未加壳前的样子。

可以对程序进行patch,修改jmp ThunRTMain,为 

.text:00401088 loc_401088:                             ; CODE XREF: .text:loc_401088j

.text:00401088                 jmp     short loc_401088

对应指令为 0EBH 0FEH。当启动程序时,便会卡在这里。

然后使用OD加载,然后在dump,最后修改OEP为0x00001090,再还原修改的指令为jump ThunRTMain

完毕,可以流畅运行。

最后使用VB decompiler逆向出算法。(from 风间仁)

2
3
4
5
6
7
8
c=1711722997.0
条件1: 
sqrt((c+a+b)*(c+a-b)*(c+b-a)*(a+b-c))*0.5/(c+a+b) =373414231.362502
条件2:
(c*a*b)/sqrt((c+a+b)*(c+(a)-b)*(c+(b)-a)*(a+(b)-c))=874402299.931726

三种解题思路

第一种使用matlab等数学软件,是最快的办法(不算安装软件的话)。

第二种发现这两个分别是内切圆和外切圆公式。

最后一种就是枚举。



[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 1355
活跃值: (329)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
爱琴海 13 2017-6-11 08:21
2
0
还少分析了时间反调试,DLL检测反调试,很有意思的
雪    币: 187
活跃值: (70)
能力值: ( LV5,RANK:155 )
在线值:
发帖
回帖
粉丝
流年似风 1 2017-6-11 11:35
3
0
还漏了两个反调试
游客
登录 | 注册 方可回帖
返回