首页
社区
课程
招聘
Akala v3.20密码壳的完美脱壳
发表于: 2005-8-17 11:12 7140

Akala v3.20密码壳的完美脱壳

2005-8-17 11:12
7140

Akala v3.20密码壳的完美脱壳

看了http://bbs.pediy.com/showthread.php?s=&threadid=16248&highlight=Akala后,也动手脱了一下。结果发现完全可以完美脱壳,不必用SMC。

用OD载入程序:

00480001 >  60              PUSHAD
00480002    E8 03000000     CALL 0048000A                            ; 0048000A
00480007  - E9 EB045D45     JMP 45A504F7
0048000C    55              PUSH EBP
0048000D    C3              RETN
0048000E    E8 01000000     CALL 00480014                            ; 00480014
00480013    EB 5D           JMP SHORT 00480072                       ; 00480072
00480015    BB EDFFFFFF     MOV EBX,-13

在内存区12ffc0处的4个字节上下硬件访问断点,F9,断在:

004803A9    8985 A8030000   MOV DWORD PTR SS:[EBP+3A8],EAX
004803AF    61              POPAD
004803B0    75 08           JNZ SHORT 004803BA ///断在这里。
004803B2    B8 01000000     MOV EAX,1
004803B7    C2 0C00         RETN 0C
004803BA    68 E0444600     PUSH 4644E0
004803BF    C3              RETN ///返回到密码壳入口。
004803C0    8B85 26040000   MOV EAX,DWORD PTR SS:[EBP+426]

进入密码壳:

004644E0    55              PUSH EBP ///密码壳入口。
004644E1    8BEC            MOV EBP,ESP
004644E3    83C4 F0         ADD ESP,-10
004644E6    B8 D8414600     MOV EAX,4641D8
004644EB    E8 B01CFAFF     CALL 004061A0                            ; 004061A0
004644F0    A1 28634600     MOV EAX,DWORD PTR DS:[466328]
004644F5    8B00            MOV EAX,DWORD PTR DS:[EAX]
004644F7    E8 B01AFFFF     CALL 00455FAC                            ; 00455FAC
004644FC    A1 28634600     MOV EAX,DWORD PTR DS:[466328]
00464501    8B00            MOV EAX,DWORD PTR DS:[EAX]
00464503    BA 40454600     MOV EDX,464540                           ; ASCII "Akala EXE Lock"
00464508    E8 9716FFFF     CALL 00455BA4                            ; 00455BA4
0046450D    8B0D 2C644600   MOV ECX,DWORD PTR DS:[46642C]            ; VC++1.004690C4
00464513    A1 28634600     MOV EAX,DWORD PTR DS:[466328]
00464518    8B00            MOV EAX,DWORD PTR DS:[EAX]
0046451A    8B15 B8374600   MOV EDX,DWORD PTR DS:[4637B8]            ; VC++1.00463804
00464520    E8 9F1AFFFF     CALL 00455FC4                            ; 00455FC4
00464525    A1 28634600     MOV EAX,DWORD PTR DS:[466328]
0046452A    8B00            MOV EAX,DWORD PTR DS:[EAX]
0046452C    E8 131BFFFF     CALL 00456044                            ; 00456044
00464531    E8 F6F9F9FF     CALL 00403F2C                            ; 00403F2C
00464536    0000            ADD BYTE PTR DS:[EAX],AL

到004644E0时搜索所有字符串,查看后发现有“...FILE..LOCK...”。双击来到00463E0B处,F2下断。然后F9运行程序,随便输入密码,点“OK”后断下:

00463E0B    BA 5C3F4600     MOV EDX,463F5C   ; ASCII 10,"...FILE..LOCK..."///断在这里。
00463E10    33C9            XOR ECX,ECX
00463E12    8A08            MOV CL,BYTE PTR DS:[EAX]
00463E14    41              INC ECX
00463E15    E8 56EEF9FF     CALL 00402C70                            ; 00402C70
00463E1A    74 15           JE SHORT 00463E31                        ; 00463E31
00463E1C    BA 783F4600     MOV EDX,463F78                           ; ASCII "Encryption Flag Error!"
00463E21    8B86 28030000   MOV EAX,DWORD PTR DS:[ESI+328]
00463E27    E8 9428FDFF     CALL 004366C0                            ; 004366C0
00463E2C    E9 F1000000     JMP 00463F22                             ; 00463F22
00463E31    8D45 F8         LEA EAX,DWORD PTR SS:[EBP-8]
00463E34    8D96 59030000   LEA EDX,DWORD PTR DS:[ESI+359]
00463E3A    E8 6104FAFF     CALL 004042A0                            ; 004042A0
00463E3F    8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]
00463E42    8D55 FC         LEA EDX,DWORD PTR SS:[EBP-4]
00463E45    E8 0E9DFFFF     CALL 0045DB58                            ; 0045DB58
00463E4A    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
00463E4D    50              PUSH EAX
00463E4E    8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]
00463E51    8B86 2C030000   MOV EAX,DWORD PTR DS:[ESI+32C]
00463E57    E8 3428FDFF     CALL 00436690                            ; 00436690
00463E5C    8B55 F4         MOV EDX,DWORD PTR SS:[EBP-C] ///EDX为输入的验证密码。
00463E5F    58              POP EAX ///EAX为加密密码。
00463E60    E8 E305FAFF     CALL 00404448 ///比较。
00463E65    74 6D           JE SHORT 00463ED4 ///不等则出错。
00463E67    FE86 40030000   INC BYTE PTR DS:[ESI+340]
00463E6D    8A9E 40030000   MOV BL,BYTE PTR DS:[ESI+340]
00463E73    80FB 03         CMP BL,3
00463E76    76 0C           JBE SHORT 00463E84                       ; 00463E84
00463E78    8BC6            MOV EAX,ESI
00463E7A    E8 85EAFEFF     CALL 00452904                            ; 00452904
00463E7F    E9 9E000000     JMP 00463F22                             ; 00463F22

将00463E65处改为JMP,再F9,程序直接运行。关闭OD后程序照样继续运行,看来壳创建了一个新的进程。

重新加载程序,将00463E65处改为JMP后,bp WriteFile 断下:

77E192AA >  6A 18           PUSH 18 ///断在这里。
77E192AC    68 A0FEE477     PUSH 77E4FEA0
77E192B1    E8 4084FFFF     CALL 77E116F6                            ; 77E116F6
77E192B6    8B5D 14         MOV EBX,DWORD PTR SS:[EBP+14]
77E192B9    33C9            XOR ECX,ECX

堆栈区:

0012FB5C   00408735  /CALL 到 WriteFile 来自 VC++1.00408730
0012FB60   000000B8  |hFile = 000000B8 (window)
0012FB64   001937F8  |Buffer = 001937F8
0012FB68   0000D000  |nBytesToWrite = D000 (53248.)
0012FB6C   0012FB74  |pBytesWritten = 0012FB74
0012FB70   00000000  \pOverlapped = NULL

呵呵,缓冲区里就有完整的文件了。

把从001937F8处开始的大小为D000的缓冲区数据全部DUMP出来,保存为.exe文件即可。经比较DUMP出来的文件和加密前大小一致,可以说是完美脱壳:)附件:ael.rar


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 298
活跃值: (512)
能力值: ( LV12,RANK:490 )
在线值:
发帖
回帖
粉丝
2
汗~~经比较DUMP出来的文件和加密前大小一致
就是说等于把原先的软件运行起来,这不就是文件合并器嘛
再次感谢csjwaman的指导!
2005-8-17 11:57
0
雪    币: 109
活跃值: (543)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
3
00463F1B     8BC6                   mov eax,esi
00463F1D     E8 02FCFFFF            call Akala.00463B24
00463F22     33C0                   xor eax,eax
00463F24     5A                     pop edx

单步跟踪,修改 关节跳
来到这里
00463F1D     E8 02FCFFFF            call Akala.00463B24
程序就运行了~
跟进去
00463B24     55                     push ebp
00463B25     8BEC                   mov ebp,esp
00463B27     83C4 9C                add esp,-64
00463B2A     53                     push ebx
00463B2B     56                     push esi
00463B2C     57                     push edi
00463B2D     33DB                   xor ebx,ebx
00463B2F     895D A0                mov dword ptr ss:[ebp-60],ebx
00463B32     895D 9C                mov dword ptr ss:[ebp-64],ebx
00463B35     894D FC                mov dword ptr ss:[ebp-4],ecx
00463B38     8BDA                   mov ebx,edx
00463B3A     8BF8                   mov edi,eax
00463B3C     8B45 FC                mov eax,dword ptr ss:[ebp-4]
00463B3F     E8 A809FAFF            call Akala.004044EC
00463B44     33C0                   xor eax,eax
00463B46     55                     push ebp
00463B47     68 523C4600            push Akala.00463C52
00463B4C     64:FF30                push dword ptr fs:[eax]
00463B4F     64:8920                mov dword ptr fs:[eax],esp
00463B52     8D55 9C                lea edx,dword ptr ss:[ebp-64]
00463B55     33C0                   xor eax,eax
00463B57     E8 F8EEF9FF            call Akala.00402A54
00463B5C     8B45 9C                mov eax,dword ptr ss:[ebp-64]
00463B5F     8D55 A0                lea edx,dword ptr ss:[ebp-60]
00463B62     E8 2D4EFAFF            call Akala.00408994
00463B67     8B45 A0                mov eax,dword ptr ss:[ebp-60]
00463B6A     E8 8D09FAFF            call Akala.004044FC
00463B6F     8BF0                   mov esi,eax
00463B71     8D45 B4                lea eax,dword ptr ss:[ebp-4C]
00463B74     33C9                   xor ecx,ecx
00463B76     BA 44000000            mov edx,44
00463B7B     E8 60F1F9FF            call Akala.00402CE0
00463B80     C745 B4 44000000       mov dword ptr ss:[ebp-4C],44
00463B87     C745 E0 01000000       mov dword ptr ss:[ebp-20],1
00463B8E     66:8B45 08             mov ax,word ptr ss:[ebp+8]
00463B92     66:8945 E4             mov word ptr ss:[ebp-1C],ax
00463B96     8D45 A4                lea eax,dword ptr ss:[ebp-5C]
00463B99     50                     push eax
00463B9A     8D45 B4                lea eax,dword ptr ss:[ebp-4C]
00463B9D     50                     push eax
00463B9E     56                     push esi
00463B9F     6A 00                  push 0
00463BA1     6A 30                  push 30
00463BA3     6A FF                  push -1
00463BA5     6A 00                  push 0
00463BA7     6A 00                  push 0
00463BA9     8B45 FC                mov eax,dword ptr ss:[ebp-4]
00463BAC     E8 4B09FAFF            call Akala.004044FC
00463BB1     50                     push eax
00463BB2     6A 00                  push 0
00463BB4     E8 E727FAFF            call Akala.004063A0                 ; jmp to kernel32.CreateProcessA

来到 CreateProcessA Call 时
看下 堆栈
0012FB64   00000000  |ModuleFileName = NULL
0012FB68   00D7BA18  |CommandLine = "C:\Documents and Settings\Window XP\桌面\新建文件夹\Akala.lck"
0012FB6C   00000000  |pProcessSecurity = NULL
0012FB70   00000000  |pThreadSecurity = NULL
0012FB74   FFFFFFFF  |InheritHandles = TRUE
0012FB78   00000030  |CreationFlags = CREATE_NEW_CONSOLE|NORMAL_PRIORITY_CLASS
0012FB7C   00000000  |pEnvironment = NULL
0012FB80   00D78B54  |CurrentDir = "C:\Documents and Settings\Window XP\桌面\新建文件夹"
0012FB84   0012FBBC  |pStartupInfo = 0012FBBC
0012FB88   0012FBAC  \pProcessInfo = 0012FBAC
0012FB8C   0012FC14  指针到下一个 SEH 记录
0012FB90   00463C52  SE 句柄

新建进程的文件地址在
0012FB68   00D7BA18  |CommandLine = "C:\Documents and Settings\Window XP\桌面\新建文件夹\Akala.lck"

复制下。修改后缀即刻~

注意:改文件的属性是隐藏的,所以操作是注意下~

这样就懒得我去 从  XXXX 到 YYYY 的复制罗~
2005-8-17 13:42
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
最初由 cater 发布
注意:改文件的属性是隐藏的,所以操作是注意下~

这样就懒得我去 从  XXXX 到 YYYY 的复制罗~
........

cater好多错别字
2005-8-17 14:08
0
雪    币: 109
活跃值: (543)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
5
最初由 ljy3282393 发布

cater好多错别字


切,不就是打错字阿~

呵呵~

我下次注意好了,现在我开始联系盲打,有时会打错的~

下次注意好了~
2005-8-17 14:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
1、我脱ASPACK壳后再爆破密码壳,输入密码后为什么会出现decrypting(解释明白的意思)?而且生成一个同名的.lck文件,一关闭对话框这文件就消失了,请指教!!!
2、文中说到“把从001937F8处开始的大小为D000的缓冲区数据全部DUMP出来,保存为.exe文件即可。”请问在OD怎样把缓冲区数据DUMP出来呢?多多指教
3、就是说等于把原先的软件运行起来,这不就是文件合并器嘛
这种说法能解释一下吗,谢谢
2005-8-17 17:30
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
7
辛苦了,支持

另类完美脱壳,运行加壳的软件,先用process Explorer工具,关闭*.lck的句柄,然后直接拷贝一个即可,这个就是原文件(当然,前题是知道密码,或调试强行路过密码检测)
2005-8-17 17:56
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
8
最初由 clide2000 发布
辛苦了,支持

另类完美脱壳,运行加壳的软件,先用process Explorer工具,关闭*.lck的句柄,然后直接拷贝一个即可,这个就是原文件(当然,前题是知道密码,或调试强行路过密码检测)


没试过这种方法。

to 自由天空

我用PETOOLS这个工具DUMP的。
2005-8-17 19:20
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
2005-8-18 07:21
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
10
还有更简单的办法就是用十六进制工具从偏移2E800处开始复制D000个字节下来,保存为.exe即可。
2005-8-18 16:15
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
cater脱壳比较厉害
2005-8-18 23:28
0
雪    币: 109
活跃值: (543)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
12
运行~ 没脱壳的程序,修改那个关键  跳

让软件强制运行~

等 记事本程序出来之后,不要关闭他~
只接把 隐藏的那个文件 拷贝一分,修改后缀为 exe ko~
2005-8-19 11:49
0
游客
登录 | 注册 方可回帖
返回
//