• 标 题:JDPE 2.01(铁甲)的脱壳 (4千字)
  • 作 者:67
  • 时 间:2001-6-18 20:55:25
  • 链 接:http://bbs.pediy.com

JDPE  2.01(铁甲)的脱壳

by 6767 [BCG]

工具:SoftIce,IceDump
地址:http://go5.163.com/hmjd/xz/jdpe201.zip    (52K)
简述:pe文件的加壳软件,与Ding Boy的DUPE类似,但水平要差的多。
目标:脱壳
难度:1/5

    先把我遇到的问题写出来:如何写JDPE的脱壳脚本?

    它没有对Import Table加密,不知道有没有反跟踪手段,解压缩比较容易。

    研究脱壳,我们要选用记事本(感谢MICRO$OFT),至少入口点我们知道(RVA):10CC。

    用JDPE对记事本加壳,选项里选择“设注册码”和“到期时间”,随便填入些信息,加壳。用ProcDump的PeEdit功能看一下:Image Base=400000, Image Size=E000

    用Symble Loader 载入,接下来用SI来跟,小心的设断点以跳出循环,过程很容易,这里就不详述了。


* Referenced by a CALL at Address:
|:0040D001                                  <- Entry Point
|
:0040D006 5D                      pop ebp
:0040D007 8BD5                    mov edx, ebp
:0040D009 81EDE21C4000            sub ebp, 00401CE2
:0040D00F 2B9501244000            sub edx, dword ptr [ebp+00402401]
:0040D015 81EA06000000            sub edx, 00000006
:0040D01B 899505244000            mov dword ptr [ebp+00402405], edx
:0040D021 83BD0924400000          cmp dword ptr [ebp+00402409], 00000000
:0040D028 0F8538020000            jne 0040D266
:0040D02E C7850924400001000000    mov dword ptr [ebp+00402409], 00000001
:0040D038 B90C060000              mov ecx, 0000060C
:0040D03D 8DB5341D4000            lea esi, dword ptr [ebp+00401D34]

>>>> 下面这个循环对紧随其后的 40D058 到 40D058+60C 之间的代码解码

    :0040D043 8A8500244000            mov al, byte ptr [ebp+00402400]
    :0040D049 8A1E                    mov bl, byte ptr [esi]
    :0040D04B 32C3                    xor al, bl
    :0040D04D 8806                    mov byte ptr [esi], al
    :0040D04F 889D00244000            mov byte ptr [ebp+00402400], bl
    :0040D055 46                      inc esi
    :0040D056 E2EB                    loop 0040D043


>>>> 下面的原来都是乱码,现在是正常的:

:0040D058 9C                      pushfd
:0040D059 58                      pop eax
:0040D05A F6C401                  test ah, 01
:0040D05D 7406                    je 0040D065
:0040D05F FFA535224000            jmp dword ptr [ebp+00402235]


.....

:0040D30B 8BC8                    mov ecx, eax
:0040D30D 8B8595224000            mov eax, dword ptr [ebp+00402295]
:0040D313 8B9D91224000            mov ebx, dword ptr [ebp+00402291]
:0040D319 8DB5C1224000            lea esi, dword ptr [ebp+004022C1]
:0040D31F FFD1                    call ecx                <- 这里是对运行状态的检查,如:是否过期、注册码是否正确
                                    <- 如果出口 EAX=0 则表示失败
:0040D321 85C0                    test eax, eax                <- 若跟踪到此 EAX=0,则用 r EAX 1命令
:0040D323 0F846AFFFFFF            je 0040D293
:0040D329 EB47                    jmp 0040D372                <- 向下跳是我们所需要的
:0040D32B EB45                    jmp 0040D372

.....

:0040D352 8BC8                    mov ecx, eax
:0040D354 8B8595224000            mov eax, dword ptr [ebp+00402295]
:0040D35A 8B9D99224000            mov ebx, dword ptr [ebp+00402299]
:0040D360 8DB5C1224000            lea esi, dword ptr [ebp+004022C1]
:0040D366 FFD1                    call ecx                <- 同上,也是检查
:0040D368 85C0                    test eax, eax
:0040D36A 0F8423FFFFFF            je 0040D293
:0040D370 EB00                    jmp 0040D372

* Referenced by Jump at Addresses:
|
:0040D372 8B9505244000            mov edx, dword ptr [ebp+00402405]    <- ImageBase
:0040D378 8B8535224000            mov eax, dword ptr [ebp+00402235]    <- OEip
:0040D37E 03C2                    add eax, edx

:0040D380 5D                      pop ebp
:0040D381 FFE0                    jmp eax                <- 跳到OEip去

    我们只要跟踪到0040D381,按一次F10到原程序的入口,就能dump得到脱壳文件:

    /pedump 400000 10cc d:dumped.exe

    运行这个文件,没有任何干扰窗口,成功。

总结:
    与UPX差不多,用Symble Loader载入后,先跟踪到一开始的那个Loop循环结束,然后用Ctrl+PageDown向下翻页,找到后对其偏移址下 G 命令,再是一、二次F10到OEip,下Pedump就可以了。

问题:
    我写了ProcDump的脚本,如下,但不成功:

[JDPE]
L1=LOOK 46,E2
L2=ADD 3
L3=BP
L4=OBJR
L5=LOOK 5D,FF
L6=BP
L7=WALK
L8=WALK
L9=STEP
OPTL1=00000000
OPTL2=01010001
OPTL3=01010001
OPTL4=00020000
OPTL5=00000000

不知道该怎样写,哪位有时间看一下。