前言
看到一个小工具,用来查一个指定壳.
主要是size很小,只有9KB.
想逆向练习下,这么小,一定是没壳的,拖进IDA,一个函数都没有,才知道加了壳.
用PEID,Die,RDG查壳,都指出是UPX.
载入OD,ESP定律,F9后,直接停在jmp xx,再F8,到了OEP.
记录
- 00401074 68 F41B4000 push 00401BF4
- 00401079 E8 EEFFFFFF call 0040106C ; jmp to MSVBVM50.ThunRTMain
VB的OEP特征:
一个push + 一个call
call是MSVBVM50.ThunRTMain
push的内容是一个字符串”VB5!”
- 00401BF4 56 42 35 21 8C 0E 2A 00 00 00 00 00 00 00 00 00 VB5!?*.........
如果知道是VB的程序,在程序跑起来后,找OEP的方法.
- Memory map,item 22
- Address=00401000
- Size=00008000 (32768.)
- Owner=IsItArma 00400000
- Section=UPX0
- Type=Imag 01001002
- Access=R
- Initial access=RWE
- goto 到 00401000
- 右键菜单,搜索2进制字符串,填入Ascii字符串VB5!,开始搜索.
在代码中搜到了2进制字符串”VB5!”,不容易看出是字符串,CTRL_L只有这一个地方.
用”Analyze This”插件分析一下,可以看出是字符串了.
- 00401BF2 . FFE1 jmp ecx
- 00401BF4 56 db 56 ; CHAR 'V'
- 00401BF5 42 db 42 ; CHAR 'B'
- 00401BF6 35 db 35 ; CHAR '5'
- 00401BF7 21 db 21 ; CHAR '!'
- 00401BF8 8C db 8C
- 00401BF9 0E db 0E
- 00401BFA 2A db 2A ; CHAR '*'
- 00401BFB 00 db 00
可以看出”VB5!”字符串地址为00401BF4.
因为VB程序的OEP特征是:
push offset “VB5!”
call MSVBVM50.ThunRTMain
所以确定了offset “VB5!”之后,可以搜指令 push offset “VB5!”,即搜索 push 00401BF4
代码区 => search for => Command,这样找还找不到,要先删除OD的分析后,再查找才能找到.
还可以找字符串的地址参考
去00401075看看.
- 00401072 00 db 00
- 00401073 00 db 00
- 00401074 68 db 68 ; CHAR 'h'
- 00401075 F41B4000 dd IsItArma.00401BF4
- 00401079 E8 db E8
- 0040107A EE db EE
- 0040107B FF db FF
- 0040107C FF db FF
- 0040107D FF db FF
- 00401072 0000 add byte ptr [eax],al ; this is VB's OEP
- 00401074 68 F41B4000 push 00401BF4
- 00401079 E8 EEFFFFFF call 0040106C ; jmp to MSVBVM50.ThunRTMain
- 0040107E 0000 add byte ptr [eax],al