首页
社区
课程
招聘
[原创]XX分析软件双重手动脱壳 ASPack 2.12 & UPX 0.89.6 - 1.02 / 1.05 - 1.24
发表于: 2007-10-6 11:20 5694

[原创]XX分析软件双重手动脱壳 ASPack 2.12 & UPX 0.89.6 - 1.02 / 1.05 - 1.24

2007-10-6 11:20
5694
作 者:dongfeng
Email: dongfeng4478@163.com
Q   Q: 447224949

目的:今天弄了一个分析软件来用,可是要注册,想着这看雪混了这么久也试着破解破解,可是加了壳了,只有先脱掉再说,虽说最终还是因为功力不够没破到这个软件,但还把它的两层壳脱掉了。相信有很多新朋友还和我是一个水平,把脱壳的过程写下来新朋友们可以看看。

脱壳软件:XX分析软件
软件下载:http://www.cncpsoft.com/showsoft.asp?soft_id=48
脱壳日期:2007-10-4

脱壳环境:Windows XP SP2
使用工具:PEID,OLLYDBG,Imprec

首先用PEID查壳,显示ASPack 2.12 -> Alexey Solodovnikov,是ASPack2.12的壳,以前只练习过2.11以下的,心想着不知2.12是否能脱。

用OLLYDBG载入软件主程序:提示代码部分也许是经过了压缩,加密,或者包含很大数目的嵌入式数据。……直接点否就可以。

0055C001 z>  60                pushad                代码起始位置,按F8过到下一步
0055C002     E8 03000000       call zhyc.0055C00A    这个CALL 要按F7进入此时代码跳到另一段
0055C007   - E9 EB045D45       jmp 45B2C4F7
0055C00C     55                push ebp
0055C00D     C3                retn

0055C00A     5D                pop ebp                        上面按F7后的首行,同样F8过
0055C00B     45                inc ebp
0055C00C     55                push ebp
0055C00D     C3                retn                            一直走到这里又返回另一段
0055C00E     E8 01000000       call zhyc.0055C014
0055C013     EB 5D             jmp short zhyc.0055C072

0055C007   - E9 EB045D45       jmp 45B2C4F7             从005C00D返回来这里,同样F8过
0055C00C     55                push ebp
0055C00D     C3                retn
0055C00E     E8 01000000       call zhyc.0055C014        从第一行无条件跳到这里,这里要用F7进入
0055C013     EB 5D             jmp short zhyc.0055C072
0055C015     BB EDFFFFFF       mov ebx,-13

0055C014     5D                pop ebp                     F7进入后到这里,一路按F8过
0055C015     BB EDFFFFFF       mov ebx,-13
0055C01A     03DD              add ebx,ebp
0055C01C     81EB 00C01500     sub ebx,15C000
0055C022     83BD 22040000 00  cmp dword ptr ss:[ebp+422],0
0055C029     899D 22040000     mov dword ptr ss:[ebp+422],ebx
*省略部分*
0055C136     74 0A             je short zhyc.0055C142
0055C138     EB 00             jmp short zhyc.0055C13A
0055C13A     3C E9             cmp al,0E9
0055C13C     74 04             je short zhyc.0055C142
0055C13E     43                inc ebx
0055C13F     49                dec ecx
0055C140   ^ EB EB             jmp short zhyc.0055C12D        一直到这里有个往回跳,不要往回跳
0055C142     8B06              mov eax,dword ptr ds:[esi]     点一下这一行,按下F4运行到所选,再按F8
0055C144     EB 00             jmp short zhyc.0055C146
0055C146     803E 2B           cmp byte ptr ds:[esi],2B
0055C149   ^ 75 F3             jnz short zhyc.0055C13E       这里也有一个跳,同样不能跳
0055C14B     24 00             and al,0                       点一下这一行,F4,再F8
0055C14D     C1C0 18           rol eax,18
0055C150     2BC3              sub eax,ebx
0055C152     8906              mov dword ptr ds:[esi],eax
0055C154     83C3 05           add ebx,5
0055C157     83C6 04           add esi,4
0055C15A     83E9 05           sub ecx,5
0055C15D   ^ EB CE             jmp short zhyc.0055C12D       到这里不能跳
0055C15F     5B                pop ebx                       点一下,F4,再F8
0055C160     5E                pop esi
0055C161     59                pop ecx
0055C162     58                pop eax
0055C163     EB 08             jmp short zhyc.0055C16D
0055C165     0000              add byte ptr ds:[eax],al
0055C167     0000              add byte ptr ds:[eax],al
0055C169     0000              add byte ptr ds:[eax],al
0055C16B     0000              add byte ptr ds:[eax],al
0055C16D     8BC8              mov ecx,eax
0055C16F     8B3E              mov edi,dword ptr ds:[esi]
0055C171     03BD 22040000     add edi,dword ptr ss:[ebp+422]
0055C177     8BB5 52010000     mov esi,dword ptr ss:[ebp+152]
0055C17D     C1F9 02           sar ecx,2
0055C180     F3:A5             rep movs dword ptr es:[edi],dword ptr ds:[esi>
0055C182     8BC8              mov ecx,eax
0055C184     83E1 03           and ecx,3
0055C187     F3:A4             rep movs byte ptr es:[edi],byte ptr ds:[esi]
0055C189     5E                pop esi
0055C18A     68 00800000       push 8000
0055C18F     6A 00             push 0
0055C191     FFB5 52010000     push dword ptr ss:[ebp+152]
0055C197     FF95 51050000     call dword ptr ss:[ebp+551]
0055C19D     83C6 08           add esi,8
0055C1A0     833E 00           cmp dword ptr ds:[esi],0
0055C1A3   ^ 0F85 1EFFFFFF     jnz zhyc.0055C0C7             这里不能跳
0055C1A9     68 00800000       push 8000                     点一下,F4,再F8
0055C1AE     6A 00             push 0
0055C1B0     FFB5 56010000     push dword ptr ss:[ebp+156]
0055C1B6     FF95 51050000     call dword ptr ss:[ebp+551]
0055C1BC     8B9D 31050000     mov ebx,dword ptr ss:[ebp+531]
0055C1C2     0BDB              or ebx,ebx
0055C1C4     74 08             je short zhyc.0055C1CE
*部分省略*
0055C372     50                push eax
0055C373     57                push edi
0055C374     EB 4A             jmp short zhyc.0055C3C0
0055C376     8907              mov dword ptr ds:[edi],eax
0055C378     8385 49050000 04  add dword ptr ss:[ebp+549],4
0055C37F   ^ E9 32FFFFFF       jmp zhyc.0055C2B6                    一直到这里,还是不能跳
0055C384     8906              mov dword ptr ds:[esi],eax          点一下,F4,再F8
0055C386     8946 0C           mov dword ptr ds:[esi+C],eax
0055C389     8946 10           mov dword ptr ds:[esi+10],eax
0055C38C     83C6 14           add esi,14
0055C38F     8B95 22040000     mov edx,dword ptr ss:[ebp+422]
0055C395   ^ E9 EBFEFFFF       jmp zhyc.0055C285                   一直F8到这里也不能跳
0055C39A     B8 60A11500       mov eax,15A160                       点这一行,F4,再接着F8
0055C39F     50                push eax
0055C3A0     0385 22040000     add eax,dword ptr ss:[ebp+422]
0055C3A6     59                pop ecx
0055C3A7     0BC9              or ecx,ecx
0055C3A9     8985 A8030000     mov dword ptr ss:[ebp+3A8],eax
0055C3AF     61                popad                               看,这里面出口标志
0055C3B0     75 08             jnz short zhyc.0055C3BA
0055C3B2     B8 01000000       mov eax,1
0055C3B7     C2 0C00           retn 0C                              
0055C3BA     68 60A15500       push zhyc.0055A160                 这里跨区段
0055C3BF     C3                retn                                  注间从这里返回到入回地址
0055C3C0     8B85 26040000     mov eax,dword ptr ss:[ebp+426]

0055A160     60                pushad                       从上面跳到这里,在这里应该是入口地址
0055A161     BE 15905200       mov esi,zhyc.00529015
0055A166     8DBE EB7FEDFF     lea edi,dword ptr ds:[esi+FFED7FEB]
0055A16C     57                push edi
0055A16D     83CD FF           or ebp,FFFFFFFF
0055A170     EB 10             jmp short zhyc.0055A182
0055A172     90                nop

在0055A160 这一行点右键,再点“脱壳在当前调试的进程”用OD插件脱壳,然后其它的都默认,直接点脱壳,另起一个名字比如我起的123保存就行了。
然后找到这个软件,运行,还可以的,心想这个壳就这样被干掉了,那看看是什么语言写的,同样用PEID查看,显示UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo  ,不会吧,还有一个壳,不过不要紧,不是什么难的壳,同样用手动脱掉。

这次用OD载入我们刚才脱掉壳的那个名为123的程序。同样提示代码部分也许是经过了压缩,加密,或者包含很大数目的嵌入式数据。……和上个壳一样点否就行了。

0055A160 1>  60                pushad                               这时代码停在这,一路F8过
0055A161     BE 15905200       mov esi,123.00529015
0055A166     8DBE EB7FEDFF     lea edi,dword ptr ds:[esi+FFED7FEB]
0055A16C     57                push edi
0055A16D     83CD FF           or ebp,FFFFFFFF
0055A170     EB 10             jmp short 123.0055A182
0055A172     90                nop
0055A173     90                nop
0055A174     90                nop
0055A175     90                nop
0055A176     90                nop
0055A177     90                nop
0055A178     8A06              mov al,byte ptr ds:[esi]
0055A17A     46                inc esi
0055A17B     8807              mov byte ptr ds:[edi],al
0055A17D     47                inc edi
0055A17E     01DB              add ebx,ebx
0055A180     75 07             jnz short 123.0055A189
0055A182     8B1E              mov ebx,dword ptr ds:[esi]
0055A184     83EE FC           sub esi,-4
0055A187     11DB              adc ebx,ebx
0055A189   ^ 72 ED             jb short 123.0055A178             F8到这里
0055A18B     B8 01000000       mov eax,1                     点这一行F4,再按F8
0055A190     01DB              add ebx,ebx
0055A192     75 07             jnz short 123.0055A19B
0055A194     8B1E              mov ebx,dword ptr ds:[esi]
*省略部分*
0055A1E3     01DB              add ebx,ebx
0055A1E5     75 07             jnz short 123.0055A1EE
0055A1E7     8B1E              mov ebx,dword ptr ds:[esi]
0055A1E9     83EE FC           sub esi,-4
0055A1EC     11DB              adc ebx,ebx
0055A1EE   ^ 72 CC             jb short 123.0055A1BC                  一直F8到这里
0055A1F0     41                inc ecx                                F4 , F8
0055A1F1     01DB              add ebx,ebx
0055A1F3     75 07             jnz short 123.0055A1FC
0055A1F5     8B1E              mov ebx,dword ptr ds:[esi]
0055A1F7     83EE FC           sub esi,-4
0055A1FA     11DB              adc ebx,ebx
0055A1FC   ^ 72 BE             jb short 123.0055A1BC                到这里
0055A1FE     01DB              add ebx,ebx                         F4,F8
0055A200     75 07             jnz short 123.0055A209
0055A202     8B1E              mov ebx,dword ptr ds:[esi]
0055A204     83EE FC           sub esi,-4
0055A207     11DB              adc ebx,ebx
*部分省略*
0055A23C     8B02              mov eax,dword ptr ds:[edx]
0055A23E     83C2 04           add edx,4
0055A241     8907              mov dword ptr ds:[edi],eax
0055A243     83C7 04           add edi,4
0055A246     83E9 04           sub ecx,4
0055A249   ^ 77 F1             ja short 123.0055A23C               到这里
0055A24B     01CF              add edi,ecx                         F4,F8
0055A24D   ^ E9 2CFFFFFF       jmp 123.0055A17E                    到这里
0055A252     5E                pop esi                               F4,F8
0055A253     89F7              mov edi,esi
0055A255     B9 6C000000       mov ecx,6C
0055A25A     8A07              mov al,byte ptr ds:[edi]
0055A25C     47                inc edi
0055A25D     2C E8             sub al,0E8
0055A25F     3C 01             cmp al,1
0055A261   ^ 77 F7             ja short 123.0055A25A                  F8到这里
0055A263     803F 09           cmp byte ptr ds:[edi],9                F4,F8
0055A266   ^ 75 F2             jnz short 123.0055A25A                  F8到这里
0055A268     8B07              mov eax,dword ptr ds:[edi]             F4,F8
0055A26A     8A5F 04           mov bl,byte ptr ds:[edi+4]
0055A26D     66:C1E8 08        shr ax,8
0055A271     C1C0 10           rol eax,10
0055A274     86C4              xchg ah,al
0055A276     29F8              sub eax,edi
0055A278     80EB E8           sub bl,0E8
0055A27B     01F0              add eax,esi
0055A27D     8907              mov dword ptr ds:[edi],eax
0055A27F     83C7 05           add edi,5
0055A282     88D8              mov al,bl
0055A284   ^ E2 D9             loopd short 123.0055A25F                F8到这里  
0055A286     8DBE 00801500     lea edi,dword ptr ds:[esi+158000]          F4,F8
0055A28C     8B07              mov eax,dword ptr ds:[edi]
0055A28E     09C0              or eax,eax
0055A290     74 45             je short 123.0055A2D7
*部分省略*
0055A2BF     55                push ebp
0055A2C0     FF96 58AE1500     call dword ptr ds:[esi+15AE58]
0055A2C6     09C0              or eax,eax
0055A2C8     74 07             je short 123.0055A2D1
0055A2CA     8903              mov dword ptr ds:[ebx],eax
0055A2CC     83C3 04           add ebx,4
0055A2CF   ^ EB D8             jmp short 123.0055A2A9                一直F8 到这里
0055A2D1     FF96 5CAE1500     call dword ptr ds:[esi+15AE5C]
0055A2D7     61                popad                               这里出口标志,直点这行,F4,F8
0055A2D8   - E9 276EEAFF       jmp 123.00401104                   跨区段跳
0055A2DD     0000              add byte ptr ds:[eax],al

00401104     68 6C1B4000       push 123.00401B6C              跳到这里,这应该是真正的程序入口地址了吧
00401109     E8 EEFFFFFF       call 123.004010FC                          0040110E     0000              add byte ptr ds:[eax],al
00401110     0000              add byte ptr ds:[eax],al
00401112     0000              add byte ptr ds:[eax],al
00401114     3000              xor byte ptr ds:[eax],al

在00401104这一行点右键,再点“脱壳在当前调试的进程”用OD插件脱壳,然后其它的都默认,直接点脱壳,另起一个名字比如我起的456保存就行了。
这一次脱完壳后赶快用PEID查一下脱了没有,显示Microsoft Visual Basic 5.0 / 6.0,呵呵,脱掉了,欣喜之余一运行,提示这个程序不是有效的Win32应用程序,郁闷啊。看来是PE头被破坏,用Imprec来修复试试。

打开Imprec,点获取系统中的进程下面的下拉列表,找到123.exe,(此时OD没关闭,可以直接找到进程,如果关了,要先运行123.exe.)
在OEP后面的输入框里填上1104,就是我们刚才脱壳的入口地址,但00400000是基址,不用填。然后点“自动搜索IAT”,会弹出发现某些数据对话框,点确定就可以了。再点下面的“获取输入表”会自动获得不用操作。最后点“修复抓取文件”,选择我们刚脱了壳的456.exe文件打开就可以了。会自动生成一个456_.exe的文件,这个就是修复好了的,运行还真的可以了。

顺便说一下,第一次写破文,写得不清楚,望各位前辈多多指教和多多原谅。还有这个软件是VB写的,好像不怎么好破,有次数限制,有功能限制,用OD载入又搜索不到字串,望各位前辈指教指教,不甚感激。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 471
活跃值: (3718)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
压缩壳基本上用esp搞定了
2007-10-6 11:34
0
游客
登录 | 注册 方可回帖
返回
//