首页
社区
课程
招聘
PESpin V1.0本机修复笔记
发表于: 2005-1-9 10:42 5043

PESpin V1.0本机修复笔记

David 活跃值
20
2005-1-9 10:42
5043
【脱文标题】 PESpin V1.0本机修复笔记

【脱文作者】 二哥weiyi75[Dfcg]

【作者邮箱】 [email]weiyi75@sohu.com[/email]

【作者主页】 Dfcg官方大本营

【使用工具】 Peid,olldbg,Loadpe,WinHex,ImportREC

【破解平台】 Win2000/XP

【软件名称】 PESpin V1.0
  
【软件简介】 老虎壳

【软件大小】 19k

【下载地址】 本地下载

【加壳方式】 PESpin V1.0 -> cyberbob

【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)

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

【脱壳内容】

首先奉上PEID精确扩展方式扫描特征库

[PESpin v0.70 -> cyberbob]
signature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 83 D5 46 00 0B E4 74 9E
ep_only = true

[PESpin v1.0 -> cyberbob]
signature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 C8 DC 46 00 0B E4 74 9E
ep_only = true

[PESpin v1.1 -> cyberbob]
signature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 7D DE 46 00 0B E4 74 9E
ep_only = true

snaker还是太忙了,0.7-1.1的PESpin一律用PESpin 0.3x - 0.4x -> cyberbob代替,不难看出PESpin的作者特地留下某个标记识别各个版本,只是老虎壳只适合forgot,loveboom等高手分析,对我等汇编编程都不会的菜鸟真是巨难。

这个版本同0.3版本的变化主要加入了代码重定位(变态啊,修复要累死,代码在壳中已经固化为重定位形式,全部还原除了手动就是软件作者你不加重定位这个选项,或者我们Patch了脱壳的Pespin再给软件作者用^-^。),Replace Code for IAT用以壳解壳法是无法跨机的,跨平台更不提,随着壳的升级,不断的变态方式会陆续加入,温馨提示软件作者不要用这个加密软件,fly第一个脱掉它导致共享变成免费软件^-^,作者也提示使用自己承担后果。枯燥的脱文导致辛苦的脱壳工作更辛苦,适当讲些废话中和一下。

【详细内容】

首先我希望你阅读了二哥的

PESpin V0.3怒而脱之

PESpin V0.70简单脱壳方案

并看懂调试通过,如果0.3你都不会就搞1.0,真服了你。

用PESpin加密记事本(全部Anti选项),OD选项不忽略特权指令,其余全部忽略。这个壳是在最后一次特权指令SEH异常后就开始处理IAT,如果问为什么,很简单,到那里后dd 4062e4 (IAT的开始地址)往下看IAT还没有写入。然后到Stolen code

OD载入全部Anti的记事本

0040C087 N> /EB 01                jmp short NOTEPAD2.0040C08A   //开始就有小花,用花指令插件清除12个
0040C089    |68 60E80000          push 0E860
0040C08E     0000                 add byte ptr ds:[eax],al
0040C090     8B1C24               mov ebx,dword ptr ss:[esp]
0040C093     83C3 12              add ebx,12
0040C096     812B E8B10600        sub dword ptr ds:[ebx],6B1E8
0040C09C     FE4B FD              dec byte ptr ds:[ebx-3]
0040C09F     822C24 C8            sub byte ptr ss:[esp],-38
0040C0A3     DC46 00              fadd qword ptr ds:[esi]
0040C0A6     0BE4                 or esp,esp
0040C0A8   ^ 74 9E                je short NOTEPAD2.0040C048
0040C0AA     75 01                jnz short NOTEPAD2.0040C0AD
0040C0AC     C781 7304D77A F72F81>mov dword ptr ds:[ecx+7AD70473],7>
0040C0B6     1977 00              sbb dword ptr ds:[edi],esi
0040C0B9     43                   inc ebx
0040C0BA     B7 F6                mov bh,0F6
0040C0BC     C3                   retn
..............................................................

0040C087 N>  90                   nop
0040C088     90                   nop
0040C089     90                   nop
0040C08A     60                   pushad   //这里hr esp,方便找Stolen code,这是最后一个可以用esp定律的pespin,聊以记念,一定要调试并写脱文。
0040C08B     E8 00000000          call NOTEPAD2.0040C090
0040C090     8B1C24               mov ebx,dword ptr ss:[esp]
0040C093     83C3 12              add ebx,12
0040C096     812B E8B10600        sub dword ptr ds:[ebx],6B1E8
0040C09C     FE4B FD              dec byte ptr ds:[ebx-3]
0040C09F     822C24 C8            sub byte ptr ss:[esp],-38
0040C0A3     DC46 00              fadd qword ptr ds:[esi]
0040C0A6     0BE4                 or esp,esp
0040C0A8   ^ 74 9E                je short NOTEPAD2.0040C048
0040C0AA     90                   nop
0040C0AB     90                   nop
0040C0AC     90                   nop
0040C0AD     8173 04 D77AF72F     xor dword ptr ds:[ebx+4],2FF77AD7
0040C0B4     8173 19 770043B7     xor dword ptr ds:[ebx+19],B743007>
0040C0BB     F6C3 6B              test bl,6B
..............................................................

Shfit+F9 4次(其中硬件中断一次)运行到最后一次特权指令SEH处

00400161     FFFF                 ???                               ; 未知命令
00400163     FFFF                 ???                               ; 未知命令
00400165     FFFF                 ???                               ; 未知命令
00400167     FFFF                 ???                               ; 未知命令
00400169     FFFF                 ???                               ; 未知命令
0040016B     FFFF                 ???                               ; 未知命令
0040016D     FFFF                 ???                               ; 未知命令
0040016F     FFFF                 ???                               ; 未知命令
00400171     FFFF                 ???                               ; 未知命令
00400173     FFFF                 ???                               ; 未知命令
00400175     FFFF                 ???                               ; 未知命令
00400177     FFFF                 ???                               ; 未知命令
00400179     FFFF                 ???                               ; 未知命令
0040017B     FFFF                 ???                               ; 未知命令
.......................................................

命令行

bp LoadLibraryA

Shift+F9中断

77E668FB K>  55                   push ebp
77E668FC     8BEC                 mov ebp,esp
77E668FE     837D 08 00           cmp dword ptr ss:[ebp+8],0
77E66902     53                   push ebx
77E66903     56                   push esi
77E66904     57                   push edi
77E66905     74 18                je short KERNEL32.77E6691F
77E66907     68 3469E677          push KERNEL32.77E66934            ; ASCII "twain_32.dll"
77E6690C     FF75 08              push dword ptr ss:[ebp+8]
77E6690F     FF15 0413E677        call dword ptr ds:[<&NTDLL._strcm>; ntdll._stricmp
................................................................

清除断点,Alt+F9返回

0040CF11     85C0                 test eax,eax                      ; SHELL32.#468
0040CF13     0F84 31080000        je NOTEPAD2.0040D74A
0040CF19     E8 01000000          call NOTEPAD2.0040CF1F
0040CF1E     FF59 50              call far fword ptr ds:[ecx+50]
0040CF21     51                   push ecx
0040CF22     55                   push ebp
0040CF23     810424 AE324000      add dword ptr ss:[esp],NOTEPAD2.0>
0040CF2A     814424 04 22000000   add dword ptr ss:[esp+4],22
0040CF32     C3                   retn

整个区段搜索写iat指令

mov dword ptr ds:[edx],eax  //PESpin的死穴1,你调试通过我前两篇文章一点知道,不再重复。

找到这里

0040CA37     8902                 mov dword ptr ds:[edx],eax
0040CA39     EB 4E                jmp short NOTEPAD2.0040CA89
0040CA3B     EB 04                jmp short NOTEPAD2.0040CA41
0040CA3D     FFEB                 jmp far ebx                       ; 非法使用寄存器

加密Call 特征指令,死穴2,不懂脑筋即可取完整的IAT

jmp dword ptr ss:[esp-4]

依次找到,按Ctrl+L找下一个

0040CDA3     FF6424 FC            jmp dword ptr ss:[esp-4]

0040CEE3     FF6424 FC            jmp dword ptr ss:[esp-4]

0040CF7E   ^\FF6424 FC            jmp dword ptr ss:[esp-4]          ; NOTEPAD2.0040CF70

0040D01D     FF6424 FC            jmp dword ptr ss:[esp-4]

0040D05F     FF6424 FC            jmp dword ptr ss:[esp-4]  //这个就是,识别很容易,作者精心研究的加密IAT代码是不会轻易变化的,一,黔驴技穷,二,技术原因,虽然他已经知道不可靠的,也不会去掉,只是变形而已,分别下断,F8中断后到一个Call的就是

0040D064     E8 03000000          call NOTEPAD2.0040D06C  //PESpin主程序好像有两个Call,特征位置差不多。
0040D069     EB 04                jmp short NOTEPAD2.0040D06F

下F2断点,F9中断清除断点

这里就可以补丁了。

修改为

0040D05F   ^\E9 D3F9FFFF          jmp NOTEPAD2.0040CA37
0040D064     90                   nop
0040D065     90                   nop
0040D066     90                   nop
0040D067     90                   nop
0040D068     90                   nop
0040D069     90                   nop

上次就知道要找到ret的正确位置

0040CA8E     C3                   retn //跟踪一次知道是40D0a1

0040CA89     59                   pop ecx
0040CA8A     EB 01                jmp short NOTEPAD2.0040CA8D
0040CA8C     9A 5FC368FF 608B     call far 8B60:FF68C35F

于是这里修改为

0040CA89    /E9 13060000          jmp NOTEPAD2.0040D0A1
0040CA8E    |90                   nop
0040CA8F    |90                   nop
0040CA90    |90                   nop
0040CA91    |90                   nop
0040CA92    |90                   nop

Shfit+F9 运行Esp定律中断。

0040D27A     55                   push ebp  //现在还不能脱壳,因为简单PATCH IAT不完善,程序中存在大量解码错误,重新到这里脱个干净壳出来。
0040D27B     EB 01                jmp short NOTEPAD2.0040D27E
0040D27D     698B ECEB01DA 83EC44>imul ecx,dword ptr ds:[ebx+DA01EB>
0040D287     01C7                 add edi,eax
0040D289     56                   push esi
0040D28A     EB 01                jmp short NOTEPAD2.0040D28D
0040D28C     0AFF                 or bh,bh
0040D28E     15 BEE54000          adc eax,NOTEPAD2.0040E5BE
0040D293     EB 01                jmp short NOTEPAD2.0040D296
0040D295     53                   push ebx
0040D296     8BF0                 mov esi,eax
0040D298     EB 01                jmp short NOTEPAD2.0040D29B
0040D29A     138A 00EB01B3        adc ecx,dword ptr ds:[edx+B301EB0>
0040D2A0     3C 22                cmp al,22
0040D2A2     EB 01                jmp short NOTEPAD2.0040D2A5
.........................................................................

命令行D 4062e4

看到IAT都是好的,其它程序类似手动计算IAT地址和大小。

运行ImportREC,选择这个进程。把OEP改为D27A,RVA 62e0,Size 248,保存一个IAT树文件出来。

0040D27A     55                   push ebp
0040D27B     90                   nop
0040D27C     90                   nop
0040D27D     90                   nop
0040D27E     8BEC                 mov ebp,esp
0040D280     90                   nop
0040D281     90                   nop
0040D282     90                   nop
0040D283     83EC 44              sub esp,44
0040D286     90                   nop
0040D287     90                   nop
0040D288     90                   nop
0040D289     56                   push esi
0040D28A     90                   nop
0040D28B     90                   nop
0040D28C     90                   nop
0040D28D     FF15 BEE54000        call dword ptr ds:[40E5BE] //定位区域脱壳位置。

ds:[40E5BE]=008A0490

然后是

区域脱壳,解决Replace Code for IAT,PESpin极度变态,占领了无名高地(所有高位区段),无法获取一个有效的高位区段,Xp系统居然申请到低位区段,又要重定位,所以我用2K系统调试。 Call机,手机,商务通 一个都不能少,Win98,win2k,winxpsp1

地址=008A0000

大小=00002000 (8192.)

PE编辑器编辑脱壳修复文件,选择从磁盘载入区域脱壳文件,然后编辑刚加入的区段,虚拟地址修正为004A0000,重建PE选项只保留验证PE即可,现在IR可以修复这个文件了。

如果你不选重定位代码这个选项,此时就可以正常运行了(不能跨机,只是脱壳修炼级而已,慢慢来,不知不觉二哥连续Debug已经3年了,人也胖了。)。

OD载入脱壳文件,F9运行。

不忽略内存异常,注意切换,方便Debug.

F9运行出错

堆栈友好提示

0012FF64    00401158  返回到 Unpack_.00401158 来自 Unpack_.00400178 //反汇编中跟随。
0012FF68    00400000  Unpack_.00400000
0012FF6C    00000000
0012FF70    00132A05
0012FF74    0000000A
0012FF78    00000000
0012FF7C    00000044
0012FF80    00133EE0
0012FF84    00133F00  ASCII "WinSta0\Default"

00401153    .  E8 20F0FFFF        call Unpack_.00400178  //这里访问40000-400FFE中的PE头代码,这些代码不能dump出来,原因有重定位问题等。
00401158    .  50                 push eax
00401159    .  8BF0               mov esi,eax
0040115B    .  FF15 69E54000      call dword ptr ds:[40E569]        ;  Unpack_.008A027B
........................................................................................

往下看到

00401168    $- E9 11F0FFFF        jmp Unpack_.0040017E

0040117D    >-\E9 08F0FFFF        jmp Unpack_.0040018A

大量访问PE头代码,手动修复几乎不可能。

现在要做的就是找一段空间代替放在PE头的代码,然后修正两处重定位代码。

分析重定位的最佳地址

00401153    .  E8 20F0FFFF        call Unpack_.00400178  //这里访问40000-400FFE中的PE头代码

E8 20F0FFFF 我们二进制编辑为 EB20F00000

此时代码变为

00401153       E8 20F00000        call Unpack_.00410178

进去看看。

00410178     8000 80              add byte ptr ds:[eax],80 //好一片废物利用空间,Pespin存放垃圾代码的地方,可恶的病毒校验让你无法加入区段,否则也不用那么幸苦。留意这里,后来大量要回到这里,这是个中间跳板。
0041017B     0080 800000C0        add byte ptr ds:[eax+C0000080],al
00410181     C0C0 00              rol al,0
00410184     C0DC C0              rcr ah,0C0
00410187     00F0                 add al,dh
00410189     CA A600              retf 0A6
0041018C     04 04                add al,4
0041018E     04 00                add al,0
00410190     0808                 or byte ptr ds:[eax],cl
00410192     0800                 or byte ptr ds:[eax],al
00410194     0C 0C                or al,0C
00410196     0C 00                or al,0
00410198     1111                 adc dword ptr ds:[ecx],edx
0041019A     1100                 adc dword ptr ds:[eax],eax
0041019C     16                   push ss
0041019D     16                   push ss
0041019E     16                   push ss
0041019F     001C1C               add byte ptr ss:[esp+ebx],bl
.............................................................................

现在就是赶往PE头,狸猫换太子。

载入加密程序,最后一次Seh异常处。

00400161     FFFF                 ???                               ; 未知命令
00400163     FFFF                 ???                               ; 未知命令
00400165     FFFF                 ???                               ; 未知命令
00400167     FFFF                 ???                               ; 未知命令
00400169     FFFF                 ???                               ; 未知命令
0040016B     FFFF                 ???                               ; 未知命令
0040016D     FFFF                 ???                               ; 未知命令
0040016F     FFFF                 ???                               ; 未知命令
00400171     FFFF                 ???                               ; 未知命令

Alt+M

对准PE头下内存写入断点。

内存镜像,项目 11
地址=00400000
大小=00001000 (4096.)
Owner=NOTEPAD2 00400000 (itself)
区段=
包含=PE header
类型=Imag 01001040
访问=RWE
初始访问=RWE

Shift+F9 立即中断

0040D240     F3:A4                rep movs byte ptr es:[edi],byte p> //刀下留代码,EDI=00400178,首先第一句代码写在这里,然后累加地址解码。

狸猫换太子,修改EDI为刚才找到的最佳地址 00410178

0040D242     60                   pushad
0040D243     E8 03000000          call NOTEPAD2.0040D24B

Shift+F9来到脱壳入口点

0040D27A     55                   push ebp
0040D27B     EB 01                jmp short NOTEPAD2.0040D27E
0040D27D     698B ECEB01DA 83EC44>imul ecx,dword ptr ds:[ebx+DA01EB>
0040D287     01C7                 add edi,eax
0040D289     56                   push esi
0040D28A     EB 01                jmp short NOTEPAD2.0040D28D
0040D28C     0AFF                 or bh,bh
0040D28E     15 BEE54000          adc eax,NOTEPAD2.0040E5BE
0040D293     EB 01                jmp short NOTEPAD2.0040D296
..............................................................................

Ctrl+G去410178看看太子

00410178   - E9 511F0000          jmp 004120CE
0041017D     F5                   cmc
0041017E     833D B8574000 00     cmp dword ptr ds:[4057B8],0
00410185     E9 E50F0000          jmp NOTEPAD2.0041116F
0041018A     833D BC574000 00     cmp dword ptr ds:[4057BC],0
.................................................................
004103EE   - E9 EA2D0000          jmp 004131DD
004103F3     40                   inc eax
004103F4     68 A0564000          push NOTEPAD2.004056A0
004103F9     E9 89140000          jmp NOTEPAD2.00411887
004103FE     09E9                 or ecx,ebp

动脑分析那些是有效的代码,既然是跳板,很容易确定范围如上,后面都是无意义的代码。

然后看如何重定位,随便找一句。

00410178   - E9 511F0000          jmp 004120CE

这句在pe头中是这样的

00410178   - E9 511FFFFF         jmp 004020CE

同理将类似代码后6为替换为xxFFFF即可,不可漏掉一个。

整理一下

00410178   - E9 511F0000          jmp 004120CE

00410185    /E9 E50F0000          jmp NOTEPAD2.0041116F

00410191    /E9 EE0F0000          jmp NOTEPAD2.00411184

0041019B    /E9 18100000          jmp NOTEPAD2.004111B8

004101AE    /E9 23110000          jmp NOTEPAD2.004112D6

004101B8    /E9 27110000          jmp NOTEPAD2.004112E4

004101CB    /E9 5A110000          jmp NOTEPAD2.0041132A

004101D5    /E9 60110000          jmp NOTEPAD2.0041133A

004101DB    /E9 68160000          jmp NOTEPAD2.00411848

004101F2    /E9 A6110000          jmp NOTEPAD2.0041139D

00410214   - E9 07360000          jmp 00413820

0041021A    /E9 A8160000          jmp NOTEPAD2.004118C7

00410226    /E9 9C160000          jmp NOTEPAD2.004118C7

0041022C    /E9 2F180000          jmp NOTEPAD2.00411A60

00410237    /E9 C8110000          jmp NOTEPAD2.00411404

00410242    /E9 D3110000          jmp NOTEPAD2.0041141A

0041025E    /E9 00120000          jmp NOTEPAD2.00411463

0041026F    /E9 21120000          jmp NOTEPAD2.00411495

0041027A    /E9 21120000          jmp NOTEPAD2.004114A0

00410291   - E9 144D0000          jmp 00414FAA

00410297   - E9 71210000          jmp 0041240D

004102A8    /E9 64120000          jmp NOTEPAD2.00411511

004102AE    /E9 14160000          jmp NOTEPAD2.004118C7

004102B4   - E9 B1480000          jmp 00414B6A

004102BA    /E9 08160000          jmp NOTEPAD2.004118C7

004102CD    /E9 7F120000          jmp NOTEPAD2.00411551

004102D9    /E9 A0120000          jmp NOTEPAD2.0041157E

004102DE   - E9 2A210000          jmp 0041240D

00410314    /E9 C1120000          jmp NOTEPAD2.004115DA

00410319   - E9 0A220000          jmp 00412528

0041031F    /E9 A3150000          jmp NOTEPAD2.004118C7

00410336    /E9 F2120000          jmp NOTEPAD2.0041162D

00410348    /E9 7A150000          jmp NOTEPAD2.004118C7

0041036A    /E9 00140000          jmp NOTEPAD2.0041176F

00410387   - E9 2A4C0000          jmp 00414FB6

0041038D   - E9 184C0000          jmp 00414FAA

00410392    /36:E9 D00D0000       jmp NOTEPAD2.00411168

0041039E    /E9 1D140000          jmp NOTEPAD2.004117C0

004103B4    /E9 17140000          jmp NOTEPAD2.004117D0

004103BF    /E9 11140000          jmp NOTEPAD2.004117D5

004103C5   - E9 5E210000          jmp 00412528

004103CB    /E9 F7140000          jmp NOTEPAD2.004118C7

004103D1   - E9 37200000          jmp 0041240D

004103E2    /E9 76140000          jmp NOTEPAD2.0041185D

004103EE   - E9 EA2D0000          jmp 004131DD

004103F9    /E9 89140000          jmp NOTEPAD2.00411887

打开Winhex,编辑内存,选定Unpackme进程。

批量修改内存得选定范围,否则错误不断,内存可不是能乱改的。

位置,转到偏移量 410178,对E9选定开始

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

00410178   - E9 511F0000          jmp 004120CE
0041017D     F5                   cmc
0041017E     833D B8574000 00     cmp dword ptr ds:[4057B8],0
00410185     E9 E50F0000          jmp NOTEPAD2.0041116F
0041018A     833D BC574000 00     cmp dword ptr ds:[4057BC],0
.................................................................
004103EE   - E9 EA2D0000          jmp 004131DD
004103F3     40                   inc eax
004103F4     68 A0564000          push NOTEPAD2.004056A0
004103F9     E9 89140000          jmp NOTEPAD2.00411887
004103FE     09E9                 or ecx,ebp

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

然后转到004103FE,选块结尾。然后光标指到410178

Ctrl+Alt+H 打开替换对话框

设置替换全部事件,搜索向下,仅在选块中替换打勾。

然后就是替换了,循环填入

1F0000

lFFFFF  确定,替换一次。

0F0000

0FFFFF  2次

100000

10FFFF  3次
...................................................

2D0000

2DFFFF

呼,总算壳中代替PE头重定位工作完成,可以现在脱壳了,用刚才的树文件修复IAT,组合一下区域脱壳可以得到脱壳文件1,我是OD插件在去花后直接脱壳,不选择重建输入表。

关闭先前的调试器和Winhex,OD载入脱壳文件1,F9运行出错。

00400178     FFFF                 ???     //代码段还是指向PE头,还需要重定位。
0040017A     FFFF                 ???                               ; 未知命令
0040017C     40                   inc eax
0040017D     0000                 add byte ptr ds:[eax],al
0040017F     C02E 61              shr byte ptr ds:[esi],61
00400182     73 70                jnb short Unpack_.004001F4

堆栈友好提示

0012FF64    00401158  Unpack_.00401158  //右键跟踪错误地址。
0012FF68    00400000  Unpack_.00400000
0012FF6C    00000000
0012FF70    00132A05
0012FF74    0000000A
0012FF78    00000000
0012FF7C    00000044
0012FF80    001348D8
0012FF84    001348F8  ASCII "WinSta0\Default"

00401153       E8 20F0FFFF        call Unpack_.00400178 //这里。
00401158    .  50                 push eax
00401159    .  8BF0               mov esi,eax

整理一下代码段要重定位的代码

00401153       E8 20F0FFFF        call Unpack_.00400178

00401168    $- E9 11F0FFFF        jmp Unpack_.0040017E

004011B3    .- E9 DEEFFFFF        jmp Unpack_.00400196

004012CA    .- E9 D2EEFFFF        jmp Unpack_.004001A1
004012CF    >- E9 D3EEFFFF        jmp Unpack_.004001A7

004012DF    .- E9 CFEEFFFF        jmp Unpack_.004001B3

004012E5    .  E8 D4EEFFFF        call Unpack_.004001BE

00401323    .- E9 9CEEFFFF        jmp Unpack_.004001C4

00401335    .- E9 96EEFFFF        jmp Unpack_.004001D0

00401341    .- E9 95EEFFFF        jmp Unpack_.004001DB

0040137F    .- E9 63EEFFFF        jmp Unpack_.004001E7

00401398    .- E9 50EEFFFF        jmp Unpack_.004001ED

004013AB    .- E9 48EEFFFF        jmp Unpack_.004001F8

004013BC    .- E9 42EEFFFF        jmp Unpack_.00400203

004013CE    .- E9 36EEFFFF        jmp Unpack_.00400209

004013D8    .- E9 3DEEFFFF        jmp Unpack_.0040021A

004013E4    .- E9 3DEEFFFF        jmp Unpack_.00400226

004013FF    .- E9 2EEEFFFF        jmp Unpack_.00400232

00401415    .- E9 23EEFFFF        jmp Unpack_.0040023D

00401440    .  E8 03EEFFFF        call Unpack_.00400248

00401454    .- E9 F5EDFFFF        jmp Unpack_.0040024E

0040145E    .- E9 F6EDFFFF        jmp Unpack_.00400259

00401490    .- E9 D5EDFFFF        jmp Unpack_.0040026A

0040149B    .- E9 D5EDFFFF        jmp Unpack_.00400275
004014A0    .- E9 DBEDFFFF        jmp Unpack_.00400280

004014CB    .- E9 BBEDFFFF        jmp Unpack_.0040028B

004014F8    .- E9 A0EDFFFF        jmp Unpack_.0040029D

0040150C    .- E9 92EDFFFF        jmp Unpack_.004002A3

00401523    .- E9 86EDFFFF        jmp Unpack_.004002AE

0040152A    .  E8 85EDFFFF        call Unpack_.004002B4
0040152F    .- E9 86EDFFFF        jmp Unpack_.004002BA
00401534    .  E8 87EDFFFF        call Unpack_.004002C0

0040154A    .- E9 77EDFFFF        jmp Unpack_.004002C6

00401577    >-\E9 56EDFFFF        jmp Unpack_.004002D2

0040159A    .  E8 3FEDFFFF        call Unpack_.004002DE
0040159F    .- E9 40EDFFFF        jmp Unpack_.004002E4

004015AD    .- E9 38EDFFFF        jmp Unpack_.004002EA

004015B9    .- E9 37EDFFFF        jmp Unpack_.004002F5
004015BE    .- E9 38EDFFFF        jmp Unpack_.004002FB

004015CA    .  E8 38EDFFFF        call Unpack_.00400307

004015D3    .- E9 35EDFFFF        jmp Unpack_.0040030D

004015E3    .  E8 31EDFFFF        call Unpack_.00400319
004015E8    .- E9 32EDFFFF        jmp Unpack_.0040031F

00401603    .  E8 1DEDFFFF        call Unpack_.00400325
00401608    .- E9 1EEDFFFF        jmp Unpack_.0040032B

00401628    .- E9 04EDFFFF        jmp Unpack_.00400331

00401688    .  E8 AFECFFFF        call Unpack_.0040033C

004016E1    .  E8 5CECFFFF        call Unpack_.00400342

004016ED    .- E9 56ECFFFF        jmp Unpack_.00400348

004016FB    .- E9 4EECFFFF        jmp Unpack_.0040034E

0040173D    .- E9 17ECFFFF        jmp Unpack_.00400359

00401752    .- E9 08ECFFFF        jmp Unpack_.0040035F

0040176A    .- E9 F6EBFFFF        jmp Unpack_.00400365

0040176F    .  E8 FCEBFFFF        call Unpack_.00400370

00401779    .- E9 F8EBFFFF        jmp Unpack_.00400376

00401780    >-/E9 F7EBFFFF        jmp Unpack_.0040037C
00401785    . |E8 FDEBFFFF        call Unpack_.00400387

0040178E    .  E8 FAEBFFFF        call Unpack_.0040038D

004017A8    > \E8 E6EBFFFF        call Unpack_.00400393

004017BB    >-\E9 D9EBFFFF        jmp Unpack_.00400399
004017C0    .- E9 DFEBFFFF        jmp Unpack_.004003A4

004017CB    .- E9 DFEBFFFF        jmp Unpack_.004003AF
004017D0    .- E9 E5EBFFFF        jmp Unpack_.004003BA

004017DB    .  E8 E5EBFFFF        call Unpack_.004003C5
004017E0    .- E9 E6EBFFFF        jmp Unpack_.004003CB

00401831    .  E8 9BEBFFFF        call Unpack_.004003D1
00401836    .- E9 9CEBFFFF        jmp Unpack_.004003D7

00401858    .- E9 80EBFFFF        jmp Unpack_.004003DD
0040185D    .  E8 86EBFFFF        call Unpack_.004003E8

00401872    .  E8 77EBFFFF        call Unpack_.004003EE

00401882    .- E9 6DEBFFFF        jmp Unpack_.004003F4

00401899    > \E8 61EBFFFF        call Unpack_.004003FF

004018B8    .  E8 48EBFFFF        call Unpack_.00400405

004018F1    .- E9 15EBFFFF        jmp Unpack_.0040040B
004018F6       14                 db 14

同样Winhex打开脱壳文件,转到偏移量1153,选为起点,然后到18F6 终点,然后光标到1153

Ctrl+Alt+H

循环填入

F0FFFF

F00000

EFFFFF

EF0000  就是壳代码的逆过程。

中间可能有些Bug,昨夜修复正确,第二天记事本有几个功能没修复,灵感没有了,脱文是用回忆写的,调试了一天,算了,只是练兵而已,完美脱壳得看loveboom的,只是汇编差的看那些什么分配内存,脚本如同天书。

最后完成两大重定位,程序即修复为不能跨机的。

【脱壳总结】

修复实际是以下几个步骤

1, Esp定律直接到Stolen code脱壳,预先区域脱壳Replace Code for IAT,预留重地位代码位置。

2, 用PATCH IAT 的方式修复脱壳文件

3, 组合修复文件和区域脱壳

4, 代码段重定位
  
--------------------------------------------------------------------------------

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

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 93908
活跃值: (200199)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
辛苦了!!!
2005-1-9 10:44
0
雪    币: 303
活跃值: (461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习ING
2005-1-9 11:35
0
雪    币: 411
活跃值: (1160)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
4
附件无法上传,pespinv1.0自己全部antidbg选项加个记事本调试.
2005-1-9 11:52
0
雪    币: 11957
活跃值: (3730)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持!
谢谢提供!
2005-1-9 13:14
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
6
继续努力
脱主程序
2005-1-9 15:09
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好文要DING
2005-1-9 17:05
0
游客
登录 | 注册 方可回帖
返回
//