壳学习二:Aspack 2.12 加壳脱壳

本文详细记录了使用Aspack2.12进行软件加壳与脱壳的过程,包括利用OllyDbg逐步分析加壳程序的入口点,并通过修改关键指令实现脱壳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

壳学习二:Aspack 2.12 加壳脱壳

SkyJacker
Http://blog.youkuaiyun.com/skyjacker
Email:HeMiaoYu <At> gmail.com
QQ:67705517
2007-2-10

1、加壳过程

自动动手编写一个简单的窗体程序.
使用Aspack2.12 加壳(按默认选项),生成已加壳程序NullFormAspack.exe.

原始文件与加壳后文件信息描述:
原始文件大小:379 KB (388,096 字节)
原始文件占用空间:384 KB (393,216 字节)
加壳文件大小:157 KB (161,280 字节)
加壳文件占用空间:160 KB (163,840 字节)
Aspack2.12 压缩率:41%

2、脱壳过程

使用PEID查壳: ASPack 2.12 -> Alexey Solodovnikov
OllyDbg加载,停在程序入口点:

OllyDbg加载,停在程序入口点:
00465001 >  60              pushad
00465002    E8 03000000     call    0046500A  // F7 进入
00465007  - E9 EB045D45     jmp     45A354F7
0046500C    55              push    ebp
0046500D    C3              retn
0046500E    E8 01000000     call    00465014
00465013    EB 5D           jmp     short 00465072
00465015    BB EDFFFFFF     mov     ebx, -13

call    0046500A
0046500A    5D              pop     ebp                              ; NullForm.00465007
0046500B    45              inc     ebp   // 00465008
0046500C    55              push    ebp   // 00465008 入栈。 函数功能:将返回地址加1,即修改了下一条要执行的指令地址
0046500D    C3              retn

进入46500A时栈信息为:
0012FFA0   00465007  返回到 NullForm.00465007 来自 NullForm.0046500A
0012FFA4   7C930738  ntdll.7C930738
0012FFA8   FFFFFFFF
0012FFAC   0012FFF0

retn 之后:
EIP=465008

00465008   /EB 04           jmp     short 0046500E //已修改EIP := EIP +1 因为指令转换为 jmp short
0046500A   |5D              pop     ebp  // 来自call    0046500A。隐身法:) 
0046500B   |45              inc     ebp
0046500C   |55              push    ebp
0046500D   |C3              retn
0046500E   /E8 01000000     call    00465014 // F7进入。 又执行到了EIP := EIP +1 。单字节进行。
00465013    EB 5D           jmp     short 00465072
00465015    BB EDFFFFFF     mov     ebx, -13
0046501A    03DD            add     ebx, ebp
0046501C    81EB 00500600   sub     ebx, 65000
00465022    83BD 22040000 0>cmp     dword ptr [ebp+422], 0

call    00465014
00465014    5D              pop     ebp    //返回时EIP修改为:7C930738     ; NullForm.00465013
00465015    BB EDFFFFFF     mov     ebx, -13 //原EBX := 7FFDE000 ,现:EBX:=FFFFFFED
0046501A    03DD            add     ebx, ebp //EBX := FFFFFFED + 00465013 = 00465000
0046501C    81EB 00500600   sub     ebx, 65000 //EBX := 400000 MZP
00465022    83BD 22040000 0>cmp     dword ptr [ebp+422], 0
00465029    899D 22040000   mov     dword ptr [ebp+422], ebx
0046502F    0F85 65030000   jnz     0046539A   //长跳转,移到此地址,按F4
00465035    8D85 2E040000   lea     eax, dword ptr [ebp+42E]
0046503B    50              push    eax
0046503C    FF95 4D0F0000   call    dword ptr [ebp+F4D]

进入00465014时栈信息为:
0012FFA0   00465013  返回到 NullForm.00465013 来自 NullForm.00465014
0012FFA4   7C930738  ntdll.7C930738
0012FFA8   FFFFFFFF
0012FFAC   0012FFF0

jnz     0046539A   //长跳转,移到此地址,鼠标点击这一行,按F4
0046539A    B8 84320500     mov     eax, 53284 //立即数.  用于生成 OEP
0046539F    50              push    eax
004653A0    0385 22040000   add     eax, dword ptr [ebp+422] // EAX := NullForm.00453284
004653A6    59              pop     ecx
004653A7    0BC9            or      ecx, ecx
004653A9    8985 A8030000   mov     dword ptr [ebp+3A8], eax // 动态修改程序指令.
                                                             //被修改指令的地址:00465013 + 3A8 = 4653BB                                                           
004653AF    61              popad
004653B0    75 08           jnz     short 004653BA 
004653B2    B8 01000000     mov     eax, 1
004653B7    C2 0C00         retn    0C
004653BA    68 00000000     push    0  // 被修改的数据为 PUSH 的值      
004653BF    C3              retn

转到0046539A时,cpu信息为:
EAX 00000000
ECX 7C939AEB ntdll.7C939AEB
EDX 00400000 ASCII "MZP"
EBX 00000000
ESP 0012FFA4
EBP 00465013 NullForm.00465013
ESI 004570F0 NullForm.004570F0
EDI 004576EC NullForm.004576EC
EIP 0046539A NullForm.0046539A
C 0  ES 0023 32位 0(FFFFFFFF)
P 1  CS 001B 32位 0(FFFFFFFF)
A 0  SS 0023 32位 0(FFFFFFFF)
Z 1  DS 0023 32位 0(FFFFFFFF)
S 0  FS 003B 32位 7FFDF000(FFF)
T 0  GS 0000 NULL
D 0
O 0  LastErr ERROR_NO_IMPERSONATION_TOKEN (0000051D)

堆栈信息为:
0012FFA4   7C930738  ntdll.7C930738
0012FFA8   FFFFFFFF
0012FFAC   0012FFF0
0012FFB0   0012FFC4

mov     dword ptr [ebp+3A8], eax 执行完这行后,下面的指令转为:
004653A9    8985 A8030000   mov     dword ptr [ebp+3A8], eax
004653AF    61              popad
004653B0    75 08           jnz     short 004653BA
004653B2    B8 01000000     mov     eax, 1
004653B7    C2 0C00         retn    0C
004653BA    68 84324500     push    00453284 // OEP
004653BF    C3              retn


F8执行,到达目的地:Dump之,OK!
00453284      55            db      55                               ;  CHAR 'U'
00453285      8B            db      8B
00453286      EC            db      EC
00453287      83            db      83
00453288      C4            db      C4
00453289      F0            db      F0
0045328A      B8            db      B8
0045328B      14            db      14
0045328C      31            db      31                               ;  CHAR '1'
0045328D      45            db      45                               ;  CHAR 'E'
0045328E      00            db      00
0045328F      E8            db      E8
00453290      80            db      80
00453291      33            db      33                               ;  CHAR '3'
00453292      FB            db      FB
00453293      FF            db      FF
00453294      A1            db      A1
00453295      20            db      20                               ;  CHAR ' '
00453296      4F            db      4F                               ;  CHAR 'O'
00453297      45            db      45                               ;  CHAR 'E'

 

<br> <img src=DownloadFilesother_activeximagesaspack_scr1.gif><br> <br> ASPACK 2.12 是高效的Win32可执行程序压缩工具,能对你开发的32位Windows可执行程序进行压缩,使最终文件减小达70%!<br> <br> ASPACK 在ZIP压缩格式工业标准的基础上进行改进,压缩率提高了10%~%20, ASPACK使Windows 95/98/NT下运行的程序文件和库文件变的更小,减少了文件在网络中的传输时间和通过因特网下载的时间,并可以保护开发出来的程序不受黑客的破解或攻击。用ASPack压缩的程序将自动包含所有的程序文件,保证和不压缩前一样顺畅高效地执行。<br> <br> ASPACK的程序界面如下(点击可放大):<br> <br> <img src=DownloadFilesother_activeximagesaspack_scr2.gif border="0"> <img src=DownloadFilesother_activeximagesaspack_scr3.gif border="0"> (1)程序主界面 (2)压缩过程 <br> <br> ASPACK的关键特色: 能够对可执行程序(EXE、DLL、OCX)进行高效率的压缩; 能够对程序的代码、数据、资源文件等进行编码和压缩; 简单明了的操作界面,对预压缩的程序自打包功能,并支持长文件名; 其快速高效的压缩算法是别的压缩程序无法比拟的; 可以直接完全地集成到Windows操作系统中,非常易于使用; 完全支持Windows 95、Windows 98、Windows NT/2000/XP操作系统。 ASPACK 的优势: 可将执行程序文件的大小平均减少40%~70%; 减少了文件在网络中的传输时间和通过因特网下载的时间; 使Windows应用程序需要的存储空间变得更少; 保护源代码不受到偷看、破解、反编译等破坏; 对最终的压缩文件的发布不按执行次数来收取版税。 ASPACK 完全兼容Microsoft Visual C++、Visual Basic、Inprise (Borland) Delphi and C++ Builder及其它的Win32开发工具。<br><br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值