VB的OEP特征

前言

看到一个小工具,用来查一个指定壳.
主要是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的方法.

  • 程序跑起来后,用OD暂停
  • OD => 菜单View => Memory
  • 找到程序的PE头下面的节,记下地址 => 右键菜单 => Dump in cpu
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

这样看不出来是代码,删除OD的分析,就看出是代码了.

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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...