飘云 发表于 2005-3-24 13:18:02

PECompact2.x脱壳

【文章标题】PECompact2.x脱壳----绿鹰PC万能精灵 3.89主程序
【脱壳作者】 飘云
【脱壳平台】 winxp
【脱壳工具】 二哥版OD 、Peid0.92、ImportREC1.6
【软件名称】 绿鹰PC万能精灵3.76
【下载页面】 http://www.onlinedown.net/soft/6396.htm
【软件大小】 1275KB
【开 发 商】 http://www.cnlvker.com
【软件介绍】 这是一款集系统优化,病毒清理,黑客防御,OICQ娱乐于一体的综合软件。该软件将不同的功能分成不同的精灵管理,其功能涵盖了个人电脑用户日常需求,其中包括:清除各种流行木马及病毒的[守卫精灵],实时监控木马进程及端口 - 功能判断,可杀未来木马;防止网站恶意修改及任意脚本病毒的;增强系统安全,优化系统配置的;功能强劲的。【脱壳声明】 只供学习和交流,没有其他目的。失误之处敬请诸位大侠赐教!
【脱壳过程】
用PEid查看为PECompact 2.x -> Jeremy Collake,用OD载入程序主程序adam.exe停在这里:

00439465 adam.<Mo> $B8 A8D25A00      mov eax,adam.005AD2A8
0043946A         .50               push eax
0043946B         .64:FF35 00000000   push dword ptr fs:
00439472         .64:8925 00000000   mov dword ptr fs:,esp
00439479         .33C0               xor eax,eax
0043947B         .8908               mov dword ptr ds:,ecx
0043947D         .50               push eax
0043947E         .45               inc ebp
0043947F         .43               inc ebx
00439480         .6F               outs dx,dword ptr es:
00439481         >6D               ins dword ptr es:,dx

下断点:bp VirtualFreeF9运行
77E59E34 kernel32>55                   push ebp
77E59E35            8BEC               mov ebp,esp
77E59E37            FF75 10            push dword ptr ss:
77E59E3A            FF75 0C            push dword ptr ss:
77E59E3D            FF75 08            push dword ptr ss:
77E59E40            6A FF                push -1
77E59E42            E8 04000000          call kernel32.VirtualFreeEx
77E59E47            5D                   pop ebp
77E59E48            C2 0C00            retn 0C

经过retn后:
00B8041C            8B46 0C            mov eax,dword ptr ds:
00B8041F            03C7               add eax,edi
00B80421            5D                   pop ebp
00B80422            5E                   pop esi
00B80423            5F                   pop edi
00B80424            5B                   pop ebx
00B80425            C3                   retn

再次经过retn后:
005AD355            8985 23120010      mov dword ptr ss:,eax            ; adam.<ModuleEntryPoint>
005AD35B            8BF0               mov esi,eax
005AD35D            59                   pop ecx
005AD35E            5A                   pop edx
005AD35F            03CA               add ecx,edx
005AD361            68 00800000          push 8000
005AD366            6A 00                push 0
005AD368            57                   push edi
005AD369            FF11               call dword ptr ds:
005AD36B            8BC6               mov eax,esi
005AD36D            5A                   pop edx
005AD36E            5E                   pop esi
005AD36F            5F                   pop edi
005AD370            59                   pop ecx
005AD371            5B                   pop ebx
005AD372            5D                   pop ebp
005AD373            FFE0               jmp eax ★★呵呵!注意这里,跳向OEP

一次F8来到这里:
00439465 adam.<Mo> $55               push ebp
00439466         ?8BEC               mov ebp,esp
00439468         ?6A FF            push -1
0043946A         .68 50594600      push adam.00465950
0043946F         ?68 E0CD4300      push adam.0043CDE0
00439474         ?64:A1 00000000   mov eax,dword ptr fs:
0043947A         ?50               push eax
0043947B         .64:8925 00000000   mov dword ptr fs:,esp

用OD脱壳插件直接脱壳,保存文件123.exe,晕!不能运行
但是不要急,ImportREC1.6出场:
启动绿鹰PC万能精灵主程序,打开ImportREC,选取adam进程,
1.按“IAT AutoSearch”,OEP:00039465, RAV:0005FFFC, Size:00000700
2.按“Get Imports”,IAT信息载入成功!
3.按“Show Invalid”,没有发现错误
4.按“Fix Dump”,选取123.exe,自动保存为123_.exe。

再次PEid查看,显示:Microsoft Visual C++ 6.0
运行123_exe,一切OK!

收工!

【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

yygx 发表于 2005-3-24 17:27:54

学习,谢谢

yijun 发表于 2005-3-24 19:39:19

学习~~~

Saver 发表于 2005-3-25 19:02:39

学习,呵呵~~~~~~~~

pearboy 发表于 2005-4-5 14:55:06

好,学习,学习~~~~~~~~~~~~~~

brightsm 发表于 2005-6-24 21:59:02

老大,软件是绿鹰PC万能精灵 3.89主程序,还是绿鹰PC万能精灵3.76

brightsm 发表于 2005-6-25 11:03:00

现在是版本3.92了。
老大,我也追到这儿了呀!

00439465 adam.<Mo> $55               push ebp
00439466         ?8BEC               mov ebp,esp
00439468         ?6A FF            push -1
0043946A         .68 50594600      push adam.00465950就这儿不太一样
0043946F         ?68 E0CD4300      push adam.0043CDE0这儿不太一样
,后面的地址不一样!
00439474         ?64:A1 00000000   mov eax,dword ptr fs:
0043947A         ?50               push eax
0043947B         .64:8925 00000000   mov dword ptr fs:,esp

用OD脱壳插件直接脱壳,保存文件123.exe,晕!不能运行
但是不要急,ImportREC1.6出场:
启动绿鹰PC万能精灵主程序,打开ImportREC,选取adam进程,
1.按“IAT AutoSearch”,OEP:00039465, RAV:0005FFFC, Size:00000700
2.按“Get Imports”,IAT信息载入成功!
3.按“Show Invalid”,没有发现错误   这儿发现个错误,我有跟踪,错误消除,
4.按“Fix Dump”,选取123.exe,自动保存为123_.exe。

完了后程序不能运行。老大看看呀!

[ Last edited by brightsm on 2005-6-25 at 11:06 AM ]

brightsm 发表于 2005-6-25 12:56:28

找了另一篇就是修复不了IAT?(3.92版)

PeCompact 2.x 通用简单脱壳法
文章作者: peaceclub 文章来源:看雪论坛
今天还有朋友在问PeCompact2.x的脱壳方法,我再这里把我的通用脱法提一下(在看其它高手们文章的基础上总结的,在此表示感谢).
[法则]:
PeCompact2.x是制造了两个异常(00000000内存写异常和Single Step单步循环异常),我们可以轻松通过查看SEH链来进行脱壳

下面我说一下通用简单脱壳法:

1、去掉所有异常忽略,保留kernel32里的内存读写异常忽略
2、F9,run
3、遇到写内存异常,暂停
4、查看SEH 链,也可从esp+4获得第一个SE Handle,Ctrl+G,来到此地址
5、向下找jmp eax,大概在$+CB处,记住此地址
6、ollydbg重新载入,下硬件执行断点: he 第5步的地址,F9,Shift+F9,中断
7、F8
8、dump,imprec fix iat,完工

[例子]:
GameThrust1.2: http://www.onlinedown.net/soft/37372.htm
工具: Ollydbg/LordPE/Imprec
依照上面提及通用方法,去掉ollydbg中所有异常忽略,保留kernel32里的内存读写异常忽略
用ollydbg载入GameThrust.exe,F9

引用:
--------------------------------------------------------------------------------

00401000 > B8 34C05000 MOV EAX,GameThru.0050C034
00401005 50 PUSH EAX
00401006 64:FF35 00000000 PUSH DWORD PTR FS:
0040100D 64:8925 00000000 MOV DWORD PTR FS:,ESP
00401014 33C0 XOR EAX,EAX
00401016 8908 MOV DWORD PTR DS:,ECX ;****此处异常****
00401018 50 PUSH EAX
00401019 45 INC EBP
0040101A 43 INC EBX
--------------------------------------------------------------------------------


查看SEH 链,也可从esp+4获得第一个SE Handle

引用:
--------------------------------------------------------------------------------

0012FFBC 0012FFE0 Pointer to next SEH record
0012FFC0 0050C034 SE handler ;******SE handle 50C034*****
0012FFC4 7C816D4F RETURN to kernel32.7C816D4F
0012FFC8 7C930738 ntdll.7C930738
0012FFCC FFFFFFFF
0012FFD0 7FFD9000
0012FFD4 8054C038


--------------------------------------------------------------------------------


Ctrl+G,50C034

引用:
--------------------------------------------------------------------------------

0050C034 B8 DEAE50F0 MOV EAX,F050AEDE ;***来到这里***
0050C039 8D88 79110010 LEA ECX,DWORD PTR DS:
0050C03F 8941 01 MOV DWORD PTR DS:,EAX
0050C042 8B5424 04 MOV EDX,DWORD PTR SS:
0050C046 8B52 0C MOV EDX,DWORD PTR DS:
0050C049 C602 E9 MOV BYTE PTR DS:,0E9
0050C04C 83C2 05 ADD EDX,5
0050C04F 2BCA SUB ECX,EDX
0050C051 894A FC MOV DWORD PTR DS:,ECX
0050C054 33C0 XOR EAX,EAX
0050C056 C3 RETN
0050C057 B8 78563412 MOV EAX,12345678
0050C05C 64:8F05 00000000 POP DWORD PTR FS:
0050C063 83C4 04 ADD ESP,4
0050C066 55 PUSH EBP
0050C067 53 PUSH EBX
0050C068 51 PUSH ECX
0050C069 57 PUSH EDI
0050C06A 56 PUSH ESI
0050C06B 52 PUSH EDX
0050C06C 8D98 32110010 LEA EBX,DWORD PTR DS:
0050C072 8B53 18 MOV EDX,DWORD PTR DS:
0050C075 52 PUSH EDX
0050C076 8BE8 MOV EBP,EAX
0050C078 6A 40 PUSH 40
0050C07A 68 00100000 PUSH 1000
0050C07F FF73 04 PUSH DWORD PTR DS:
0050C082 6A 00 PUSH 0
0050C084 8B4B 10 MOV ECX,DWORD PTR DS:
0050C087 03CA ADD ECX,EDX
0050C089 8B01 MOV EAX,DWORD PTR DS:
0050C08B FFD0 CALL EAX
0050C08D 5A POP EDX
0050C08E 8BF8 MOV EDI,EAX
0050C090 50 PUSH EAX
0050C091 52 PUSH EDX
0050C092 8B33 MOV ESI,DWORD PTR DS:
0050C094 8B43 20 MOV EAX,DWORD PTR DS:
0050C097 03C2 ADD EAX,EDX
0050C099 8B08 MOV ECX,DWORD PTR DS:
0050C09B 894B 20 MOV DWORD PTR DS:,ECX
0050C09E 8B43 1C MOV EAX,DWORD PTR DS:
0050C0A1 03C2 ADD EAX,EDX
0050C0A3 8B08 MOV ECX,DWORD PTR DS:
0050C0A5 894B 1C MOV DWORD PTR DS:,ECX
0050C0A8 03F2 ADD ESI,EDX
0050C0AA 8B4B 0C MOV ECX,DWORD PTR DS:
0050C0AD 03CA ADD ECX,EDX
0050C0AF 8D43 1C LEA EAX,DWORD PTR DS:
0050C0B2 50 PUSH EAX
0050C0B3 57 PUSH EDI
0050C0B4 56 PUSH ESI
0050C0B5 FFD1 CALL ECX
0050C0B7 5A POP EDX
0050C0B8 58 POP EAX
0050C0B9 0343 08 ADD EAX,DWORD PTR DS:
0050C0BC 8BF8 MOV EDI,EAX
0050C0BE 52 PUSH EDX
0050C0BF 8BF0 MOV ESI,EAX
0050C0C1 8B46 FC MOV EAX,DWORD PTR DS:
0050C0C4 83C0 04 ADD EAX,4
0050C0C7 2BF0 SUB ESI,EAX
0050C0C9 8956 08 MOV DWORD PTR DS:,EDX
0050C0CC 8B4B 10 MOV ECX,DWORD PTR DS:
0050C0CF 894E 24 MOV DWORD PTR DS:,ECX
0050C0D2 8B4B 14 MOV ECX,DWORD PTR DS:
0050C0D5 51 PUSH ECX
0050C0D6 894E 28 MOV DWORD PTR DS:,ECX
0050C0D9 8B4B 0C MOV ECX,DWORD PTR DS:
0050C0DC 894E 14 MOV DWORD PTR DS:,ECX
0050C0DF FFD7 CALL EDI
0050C0E1 8985 23120010 MOV DWORD PTR SS:,EAX
0050C0E7 8BF0 MOV ESI,EAX
0050C0E9 59 POP ECX
0050C0EA 5A POP EDX
0050C0EB 03CA ADD ECX,EDX
0050C0ED 68 00800000 PUSH 8000
0050C0F2 6A 00 PUSH 0
0050C0F4 57 PUSH EDI
0050C0F5 FF11 CALL DWORD PTR DS:
0050C0F7 8BC6 MOV EAX,ESI
0050C0F9 5A POP EDX
0050C0FA 5E POP ESI
0050C0FB 5F POP EDI
0050C0FC 59 POP ECX
0050C0FD 5B POP EBX
0050C0FE 5D POP EBP
0050C0FF FFE0 JMP EAX ;*****JMP EAX*****
0050C101 0000 ADD BYTE PTR DS:,AL
0050C103 0000 ADD BYTE PTR DS:,AL


--------------------------------------------------------------------------------


向下找jmp eax,大概在$+CB处,记住此地址50c0ff

用ollydbg重新载入,下硬件执行断点: he 50c0ff,F9,Shift+F9,中断
F8,来到487228处

引用:
--------------------------------------------------------------------------------

00487228 55 PUSH EBP *****OEP******
00487229 8BEC MOV EBP,ESP
0048722B B9 35000000 MOV ECX,35
00487230 6A 00 PUSH 0
00487232 6A 00 PUSH 0
00487234 49 DEC ECX
00487235 ^75 F9 JNZ SHORT GameThru.00487230
00487237 51 PUSH ECX
00487238 53 PUSH EBX
00487239 56 PUSH ESI
0048723A 57 PUSH EDI
0048723B B8 706E4800 MOV EAX,GameThru.00486E70
00487240 E8 97EDF7FF CALL GameThru.00405FDC
00487245 33C0 XOR EAX,EAX


--------------------------------------------------------------------------------


dump,imprec fix iat,完工.


别看写了这么多,真正做起来就几步,实际上有经验的话,几个F8,然后shift+F8,跟踪几下就到了.

brightsm 发表于 2005-6-25 13:57:57

还要问下老大,用OD脱壳时,有一个“方法 一”和“方法二”那个有什么区别?

brightsm 发表于 2005-6-25 13:59:30

import的用法给贴出来呀!
每个按扭的功能,还有涉及的专业术语,修复原理都给说说!
页: [1] 2 3
查看完整版本: PECompact2.x脱壳