sky827 发表于 2010-9-22 00:10

超级QQ申请器脱壳去自校验

1.查壳。
UPX的,ESP定律脱壳,REC修复。
2.Microsoft Visual C++ 6.0写的,运行下。
出现窗口几秒后自动退出。应该有自校验。
3。自校验有几种常用方法。
1.校检自身大小。看一下脱壳前的大小为:313344字节转16进制为4C800,脱壳后
958464字节转16进制为EA000。
用W32Dasm载入脱壳后的文件搜索4C800或0004C800.找不到相关有用的地址。
2.跟踪退出函数。下ExitProcess、PostQuitMessage,TerminateProcess等函数断点,堆栈返回后,查找关键点。
经测试下TerminateProcess函数能中断来。
BP TerminateProcess。F9运行。中断下来
0012FAA4   0040A47F/CALL 到 TerminateProcess 来自 123_.0040A47A 从这里我们可以看出TerminateProcess的调用地方是在0040A47A
0012FAA8   000002F4|hProcess = 000002F4 (window)
0012FAAC   00000000\ExitCode = 0
0012FAB0   0012FB3C
0012FAB4   00491870123_.00491870
在OD中CTRL+G,输入0040A47A:
0040A46D|.68 00000000   push 0
0040A472|.FF75 FC       push
0040A475|.B8 21000000   mov eax,21
0040A47A|.E8 D8630100   call 123_.00420857          这里调用。向上找首部
0040A47F|.3965 F4       cmp ,esp
0040A482|.74 0D         je short 123_.0040A491

0040A424/$55            push ebp               这个,注意信息栏的内容
0040A425|.8BEC          mov ebp,esp
0040A427|.81EC 18000000 sub esp,18
0040A42D|.C745 FC 00000>mov ,0
0040A434|.C745 F8 00000>mov ,0
0040A43B|.8965 F4       mov ,esp
0040A43E|.FF75 08       push
信息栏的内容:
Local Call from 00409F83
我们在内容上右击,“前往CALL来自00409F83”
00409F49|.E8 21690100   call 123_.0042086F
00409F4E|.83C4 18       add esp,18
00409F51|.833D F8C44B00>cmp dword ptr ds:,0
00409F58      0F85 2A000000 jnz 123_.00409F88
00409F5E|.E8 29000000   call 123_.00409F8C
00409F63|.8965 FC       mov ,esp
00409F66|.B8 1C000000   mov eax,1C
00409F6B|.E8 E7680100   call 123_.00420857
00409F70|.3965 FC       cmp ,esp
00409F73|.74 0D         je short 123_.00409F82
00409F75|.68 06000000   push 6
00409F7A|.E8 D2680100   call 123_.00420851
00409F7F|.83C4 04       add esp,4
00409F82|>50            push eax                                 ; /Arg1
00409F83|.E8 9C040000   call 123_.0040A424                     ; \123_.0040A424      就是这里了,最终会调用TerminateProcess,向上看是从哪里跳过来
00409F88|>8BE5          mov esp,ebp
00409F8A|.5D            pop ebp
00409F8B\.C3            retn
可以看出,00409F83处的CALL最终呼叫TerminateProcess退出,所以只要使000409F58处的跳转实现即可,将00409F58的跳转JMP后保存,测试运行正常。

还可以利用第三方软件辅助查找关键的地方。很多软件利用CRC或者MD5实现磁盘文件校验或者内存映像校验等,对此类软件我们可以利用算法识别工具找到密码学算法和核心,然后层层向上,找到最初的调用地方更改其流程方向。
先用PEID的插件kanal分析。可以看出,软件有CRC ,MD5.有个CRC32:0040AE40
CTRL+G搜索0040AE40
0040AE40|?2083 B8ED6801 and byte ptr ds:,al       找到的地方在这里,上拉找到这个CALL的首部
0040AE46|?0300          add eax,dword ptr ds:
0040AE48|?806A 00 FF    sub byte ptr ds:,0FF
0040AE4C|?^ 75 E0         jnz short 123_.0040AE2E
0040AE4E|.68 02000000   ||push 2
0040AE53|.BB 300D4200   ||mov ebx,123_.00420D30
0040AE58|.E8 EE590100   ||call 123_.0042084B
0040AE5D|.83C4 1C       ||add esp,1C
0040AE60|.8945 F4       ||mov ,eax
0040ACEF/$55            push ebp                               到这里,看OD的提示栏:Local Call from 0040AC85,从0040AC85跳转来的
0040ACF0|.8BEC          mov ebp,esp
0040ACF2|.81EC 34000000 sub esp,34
0040ACF8|.C745 FC 00000>mov ,0
0040ACFF|.C745 F8 00000>mov ,0
0040AD06|.C745 F4 00000>mov ,0
0040AD0D|.68 08040000   push 408
0040AD12|.E8 285B0100   call 123_.0042083F
右击,“前往JMP 来自0040AC85”

来到后再向上找
0040AA59/$55            push ebp
0040AA5A|.8BEC          mov ebp,esp
0040AA5C|.81EC 34000000 sub esp,34
0040AA62|.C745 FC 00000>mov ,0
0040AA69|.C745 F8 00000>mov ,0
0040AA70|.C745 F4 00000>mov ,0
0040AA77|.C745 F0 00000>mov ,0
0040AA7E|.C745 EC 00000>mov ,0
0040AA85|.C745 E8 00000>mov ,0
0040AA8C|.68 01030080   push 80000301
注意信息提示:Local Calls from 0040A60B, 0040B2A0, 004181B9, 0041896C
右击,“前往JMP 来自0040A60B”
0040A4D3/.55            push ebp
0040A4D4|.8BEC          mov ebp,esp
0040A4D6|.81EC 10000000 sub esp,10
0040A4DC|.6A 00         push 0
0040A4DE|.68 01000000   push 1
0040A4E3|.6A FF         push -1
0040A4E5|.6A 1A         push 1A
0040A4E7|.68 9E720106   push 601729E
0040A4EC|.68 9D720152   push 5201729D
0040A4F1|.E8 79630100   call 123_.0042086F
0040A4F6|.83C4 18       add esp,18
0040A4F9|.EB 10         jmp short 123_.0040A50B
0040A4FB|.56 4D 50 72 6>ascii "VMProtect begin",0
0040A50B|>68 04C54B00   push 123_.004BC504
0040A510|.8B0424      mov eax,dword ptr ss:
0040A513|.8B00          mov eax,dword ptr ds:
0040A515|.8B00          mov eax,dword ptr ds:
0040A517|.FF50 08       call dword ptr ds:
0040A51A|.85C0          test eax,eax
0040A51C|.0F84 2D000000 je 123_.0040A54F
0040A522|.68 04C54B00   push 123_.004BC504
0040A527|.8B0424      mov eax,dword ptr ss:
0040A52A|.8B00          mov eax,dword ptr ds:
0040A52C|.8B00          mov eax,dword ptr ds:
0040A52E|.FF50 10       call dword ptr ds:
0040A531|.68 04C54B00   push 123_.004BC504
0040A536|.8B0424      mov eax,dword ptr ss:
0040A539|.8B00          mov eax,dword ptr ds:
0040A53B|.8B00          mov eax,dword ptr ds:
0040A53D|.FF50 14       call dword ptr ds:
0040A540|.68 04C54B00   push 123_.004BC504
0040A545|.8B0424      mov eax,dword ptr ss:
0040A548|.8B00          mov eax,dword ptr ds:
0040A54A|.8B00          mov eax,dword ptr ds:
0040A54C|.FF50 18       call dword ptr ds:
0040A54F|>68 04C54B00   push 123_.004BC504
0040A554|.8B0424      mov eax,dword ptr ss:
0040A557|.8B00          mov eax,dword ptr ds:
0040A559|.8B00          mov eax,dword ptr ds:
0040A55B|.FF50 0C       call dword ptr ds:
0040A55E|.6A 00         push 0
0040A560|.6A 00         push 0
0040A562|.6A 00         push 0
0040A564|.68 01000000   push 1
0040A569|.BB 10114200   mov ebx,123_.00421110
0040A56E|.E8 D8620100   call 123_.0042084B
0040A573|.83C4 10       add esp,10
0040A576|.B8 928B4900   mov eax,123_.00498B92                  ;ASCII "7815696ECBF1C96E6894B779456D330E8ffa03da3984a947de1b07af57eecccf"
0040A57B|.8945 FC       mov ,eax
0040A57E|.8D45 FC       lea eax,
0040A581|.50            push eax
0040A582|.68 08C54B00   push 123_.004BC508
0040A587|.8B0424      mov eax,dword ptr ss:
0040A58A|.8B00          mov eax,dword ptr ds:
0040A58C|.8B00          mov eax,dword ptr ds:
0040A58E|.FF50 08       call dword ptr ds:
0040A591|.8945 F8       mov ,eax
0040A594|.8B5D FC       mov ebx,
0040A597|.85DB          test ebx,ebx
0040A599|.74 09         je short 123_.0040A5A4
0040A59B|.53            push ebx
0040A59C|.E8 A4620100   call 123_.00420845
0040A5A1|.83C4 04       add esp,4
0040A5A4|>8B45 F8       mov eax,
0040A5A7|.A3 F8C44B00   mov dword ptr ds:,eax
0040A5AC|.68 01030080   push 80000301
0040A5B1|.6A 00         push 0
0040A5B3|.68 F4010000   push 1F4
0040A5B8|.68 01030080   push 80000301
0040A5BD|.6A 00         push 0
0040A5BF|.68 64000000   push 64
0040A5C4|.68 02000000   push 2
0040A5C9|.BB B0114200   mov ebx,123_.004211B0
0040A5CE|.E8 78620100   call 123_.0042084B
0040A5D3|.83C4 1C       add esp,1C
0040A5D6|.6A 00         push 0
0040A5D8|.50            push eax
0040A5D9|.6A FF         push -1
0040A5DB|.6A 08         push 8
0040A5DD|.68 AB720116   push 160172AB
0040A5E2|.68 9D720152   push 5201729D
0040A5E7|.E8 83620100   call 123_.0042086F
0040A5EC|.83C4 18       add esp,18
0040A5EF|.EB 0E         jmp short 123_.0040A5FF
0040A5F1|.56 4D 50 72 6>ascii "VMProtect end",0
0040A5FF|>C745 FC 00000>mov ,0
0040A606|.6A 00         push 0                                 ; /Arg2 = 00000000
0040A608|.FF75 FC       push                            ; |Arg1
0040A60B|.E8 49040000   call 123_.0040AA59                     ; \123_.0040AA59
来到这里,中间是加密的地方。把0040A4F9|.EB 10         jmp short 123_.0040A50B修改为jmp0040A5FF。跳过加密的地方。保存,测试可运行。

sky827 发表于 2010-9-22 00:15

本帖最后由 sky827 于 2010-9-22 00:19 编辑

程序请到这里下载。http://www.52pojie.cn/thread-63772-1-1.html
看到有人要求上分析过程,趁放假有空的时间做了下。初学不久。不知上面有没有错的,有错的请指出:lol。共同学习。

犯贱 发表于 2010-9-22 01:06

顶你!

tysan 发表于 2010-9-22 01:28

很不错的文章,最近遇到不少自校验的程序,都没怎么搞定,这里学到了2种方法。谢谢咯~

610787311 发表于 2010-9-22 01:41

求啦很多人!没给!终于能看到这啦!谢谢LZ分享!

610787311 发表于 2010-9-22 01:45

十分谢谢LZ!对我们这些小菜很用啊!

tk885751 发表于 2010-9-22 02:11

自校验 失败 。。。 自动关闭

小举 发表于 2010-9-22 07:42

zaitchang 发表于 2010-9-22 09:37

LZ厉害……我是来学习————拿走

sky827 发表于 2010-9-22 09:59

回复 6# 610787311


    :lol 不客气,经验大家分享,我也是初学。
页: [1] 2
查看完整版本: 超级QQ申请器脱壳去自校验