能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这个是无壳DELPHI的吧
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
拿个程序加个壳,帮你脱,脱文写不来
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个是加壳程序啊!随便拿个程序加壳就可以了啊!
|
能力值:
( LV9,RANK:170 )
|
-
-
5 楼
随便拿个程序加壳试了下, 发现加壳后的程序镜像基址被改了, 原来是400000, 加壳后是 4B0000,
这样的程序是不能直接Dump的, dump下来用imprec可能不支持。
比较完美的方法是, 找到如下语句处:
004B2227 50 PUSH EAX
004B2228 6A 00 PUSH 0
004B222A FF53 53 CALL DWORD PTR DS:[EBX+53] ; VirtualAlloc
004B222D 8945 CC MOV DWORD PTR SS:[EBP-34],EAX
004B2230 837D CC 00 CMP DWORD PTR SS:[EBP-34],0
004B2234 0F84 7E040000 JE Pack_任?004B26B8
004B223A 8B45 CC MOV EAX,DWORD PTR SS:[EBP-34]
004B223D 50 PUSH EAX
004B223E 8B45 D0 MOV EAX,DWORD PTR SS:[EBP-30]
004B2241 50 PUSH EAX
004B2242 FF53 73 CALL DWORD PTR DS:[EBX+73] ; 解压代码
004B2245 8945 D4 MOV DWORD PTR SS:[EBP-2C],EAX ; 此时eax=a2000, 是解压出的长度
004B2248 837D D4 FF CMP DWORD PTR SS:[EBP-2C],-1
004B224C 0F84 66040000 JE Pack_任?004B26B8
004B2252 8B45 CC MOV EAX,DWORD PTR SS:[EBP-34]
004B2255 66:8138 4D5A CMP WORD PTR DS:[EAX],5A4D ; 此时eax=4f0000, 这是解压出的地址,此时用LoadPE部分转存
004B225A 0F85 58040000 JNZ Pack_任?004B26B8
004B2260 8B45 CC MOV EAX,DWORD PTR SS:[EBP-34]
004B2263 8B78 3C MOV EDI,DWORD PTR DS:[EAX+3C]
004B2266 037D CC ADD EDI,DWORD PTR SS:[EBP-34]
004B2269 89BD 78FFFFFF MOV DWORD PTR SS:[EBP-88],EDI
004B226F 8B85 78FFFFFF MOV EAX,DWORD PTR SS:[EBP-88]
004B2275 8138 50450000 CMP DWORD PTR DS:[EAX],4550
004B227B 0F85 37040000 JNZ Pack_任?004B26B8
在004B2255那一行用loadpe部分转存, 注意是“部分转存”, (地址和长度按照前面跟踪出的结果填, 我这里转存地址是4F0000,长度a2000, 不同的程序可能都不一样。) 转存出来的就是原始未加壳的程序, 不需要修复。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
说明:
1.exe---加壳前的文件;
Pack_1.exe---加壳后的文件;
unpack.exe---脱壳后的文件
搜索的二进制(Aplib解压缩算法的代码末尾):
2B 45 0C 5F 5E 5B 8B E5 5D C2 08 00
|
|
|