• 标 题:PicturesToExe3.51的脱壳 (2千字)
  • 作 者:hying
  • 时 间:2001-4-22 19:18:35
  • 链 接:http://bbs.pediy.com

文章标题:PicturesToExe3.51的脱壳
加壳软件:Asprotect1.2以上(本人估计,不一定准确)
文章重点:输入表的修复(关于如何寻找入口点等可参考其他脱壳文章)
使用软件:Trw2000、Import REConstructor v1.2 beta2、procdump162、Uedit32
参考文章:BestFont《用Import REConstructor v1.2 beta2 修复输入表》
    PicturesToExe3.51用Asprotect加的壳,估计是1.2以上版本,用caspr1.012无法脱壳,只能手动。
    先用冲击波2000找入口点,竟然没有找到,看样子得全手动了。祭起Trw2000,经过若干小时的艰苦奋战(有点夸张),终于找到入口点为51133C,停下后用procdump162选“使用实际输入表”然后dump(full),再修改入口为51133C,到此第一场战役胜利结束。
    接下来就该修复输入表了,按照《用Import REConstructor v1.2 beta2 修复输入表》的方法修复,最后发现还有几个无法解决,分别如下:
偏移        值
1161F8        E3C86C
116320        E3C874
116364        E3C834
1163B4        E3C864
1163BC        E3C87C
那么这些值所指向的地址到底有什么呢?我们看一下:
0167:00E3C834  MOV      EAX,[00E435D8]
0167:00E3C839  RET
(调用:00407824 FF2564635100            jmp dword ptr [00516364])

0167:00E3C864  MOV      EAX,[00E435E0]
0167:00E3C869  RET
(调用:00407784 FF25B4635100            jmp dword ptr [005163B4])

0167:00E3C86C  MOV      EAX,[00E43678]
0167:00E3C871  RET
(调用:004012C0 FF25F8615100            jmp dword ptr [005161F8])

0167:00E3C874  PUSH    EBP        \
0167:00E3C875  MOV      EBP,ESP         |实际什么都没干,
0167:00E3C877  POP      EBP         |相当于 ret  04
0167:00E3C878  RET      04        /
(调用:004078AC FF2520635100            jmp dword ptr [00516320])

0167:00E3C87C  PUSH    EBP        \
0167:00E3C87D  MOV      EBP,ESP         |同上
0167:00E3C87F  POP      EBP         |
0167:00E3C880  RET      04        /
(调用:00407774 FF25BC635100            jmp dword ptr [005163BC])

先解决最后两个,我们找到:0040402A C20400    ret 0004,所以只要将上面两个调用处改为:
0167:004078AC E979C7FFFF    jmp 0040402A
0167:00407774 E9B1C8FFFF    jmp 0040402A
就行了。
再来看前面三个,发现:
[00E435D8]=C000A004
[00E435E0]=FFF9CAB3
[00E43678]=816CD848
而且都是固定不变的,所以可以这样改:
00407824 B804A000C0              mov eax, C000A004
00407829 C3                      ret

00407784 B8B3CAF9FF              mov eax, FFF9CAB3
00407789 C3                      ret

004012C0 B848D86C81              mov eax, 816CD848
004012C5 C3                      ret
现在输入表里那些无用的垃圾就都没用了,你可以随便选一个函数填上去。然后将脱下来的原始文件先修改一下,再修复输入表,都做好以后就可以运行了。