Hmily 发表于 2008-12-18 12:05

EncryptPE V2.2008.6.18 主程序学习笔记

标 题: 【分享】EncryptPE V2.2008.6.18 主程序学习笔记
作 者: DarkBull
时 间: 2008-12-17,22:33
链 接: http://bbs.pediy.com/showthread.php?t=78889

一、学习目标:EncryptPE V2.2008.6.18 主程序
二、使用工具:OllyDbg v1.10,ImportREC 1.6 Final,LordPE
三、联系作者:DarkBull#126.com
四、具体过程:
1.寻找OEP
    简单的观察了一下,EPE主程序运行时创建了4个进程:
    第一个创建第二个,带参数“-EPEDEBUGFLAG”,调试模式。
    第二个创建第三个,带参数“-EPEDEBUGFLAG”,调试模式。
    第三个创建第四个,无参数,非调试模式。
    第一个进程创建第二个进程后发送选定的消息,然后第一个进程终止。所以程序运行时系统里只能看见三个进程。
    出现主程序的界面后,DUMP第四个进程。通过查找DELPHI的特征码能找到OEP为:004E6830。
    Encryptp.<> $55       PUSH EBP
    004E6831    .8BEC   MOV EBP,ESP
    004E6833    .83C4 F0ADD ESP,-10
    004E6836    .B8 F8654>MOV EAX,Encryptp.004E65F8
    004E683B    .E8 5005F>CALL Encryptp.00406D90
    004E6840    .EB 04    JMP SHORT Encryptp.004E6846
    004E6842       45       DB 45                                 ;CHAR 'E'
    004E6843       50       DB 50                                 ;CHAR 'P'
    004E6844       45       DB 45                                 ;CHAR 'E'
    004E6845       25       DB 25                                 ;CHAR '%'
    004E6846    >E8 9574F>CALL Encryptp.004CDCE0
    004E684B    .E8 40DFF>CALL Encryptp.00404790
    004E6850    .0000   ADD BYTE PTR DS:,AL
    004E6852    .0000   ADD BYTE PTR DS:,AL
    004E6854    .0000   ADD BYTE PTR DS:,AL
    004E6840处的嵌入代码居然没有被替换。
2.修复IAT
    经观察发现IAT处的函数地址被Hook到01130000段里(这个地址是不固定的),大小为10000H个字节。
    01130000   E8 1F550C7>CALL V2200806.711F5524
    01130005   - FF25 0B001>JMP NEAR DWORD PTR DS:
    0113000B   05 0013010>ADD EAX,11300
    01130010   0080 7C1AC>ADD BYTE PTR DS:,AL
    01130016   0058 81    ADD BYTE PTR DS:,BL
    01130019   41         INC ECX
    0113001A   010432   ADD DWORD PTR DS:,EAX
    0113001D   D200       ROL BYTE PTR DS:,CL
    0113001F   011A       ADD DWORD PTR DS:,EBX
    01130021   C9         LEAVE
    01130022   0E         PUSH CS
    01130023   00CF       ADD BH,CL
    01130025   97         XCHG EAX,EDI
    01130026   B1 FF      MOV CL,0FF
    01130028   F1         INT1
    01130029   0000       ADD BYTE PTR DS:,AL
    进入711F5524这个过程,返回时就可以得到函数地址,将它写回IAT即可。IATRVA: 000EC17C IATSize: 00000774。
3.修复Code Replace
    被替换的代码有以下几种形式:
    (1)JMP NEARPROC被替换成JMP EPE1段,JMP NEARPROC。修复方法:进入EPE1段把替换的地址写回原处。
    (2)CALL NEARPROC被替换成CALL EPE1段,JMP NEARPROC。修复方法:进入EPE1段把替换的地址写回原处。
    (3)有很多6、7、10个字节的指令被替换成JMP 01130000段。修复方法:
    跟进JMP,来到以下过程:
    011347FC   E8 87110C7>CALL V2200806.711F5988
    01134801   0052 1F    ADD BYTE PTR DS:,DL
    01134804   40         INC EAX
    01134805   0000       ADD BYTE PTR DS:,AL
    01134807   0000       ADD BYTE PTR DS:,AL
    01134809   006D 72    ADD BYTE PTR SS:,CH
    0113480C   59         POP ECX
    0113480D   005462 D2ADD BYTE PTR DS:,DL
    01134811   0006       ADD BYTE PTR DS:,AL
    01134813   32D2       XOR DL,DL
    01134815   0000       ADD BYTE PTR DS:,AL
    01134817   0018       ADD BYTE PTR DS:,BL
    01134819   B6 4E      MOV DH,4E
    0113481B   0000       ADD BYTE PTR DS:,AL
    0113481D   0000       ADD BYTE PTR DS:,AL
    0113481F   0000       ADD BYTE PTR DS:,AL
    01134821   000432   ADD BYTE PTR DS:,AL
    01134824   D200       ROL BYTE PTR DS:,CL
    01134826   0157 3D    ADD DWORD PTR DS:,EDX
    01134829   18B6 4E00C>SBB BYTE PTR DS:,DH
    0113482F   B1 FF      MOV CL,0FF
    在HEX DUMP里是这样的:
    011347FCE8 87 11 0C 70 00 52 1F 40 00 00 00 00 00 6D 72鑷.p.R@.....mr
    0113480C59 00 54 62 D2 00 06 32 D2 00 00 00 18 B6 4E 00Y.Tb?2?..禢.
    0113481C00 00 00 00 00 00 04 32 D2 00 01 57 3D 18 B6 4E......2?W=禢
    0113482C00 CF 97 B1 FF                                 .蠗?鑂
    注意最后4个数字,0FFB197CF XOR 0FFFFFFFF = 004E6830(OEP)。继续进入,如下代码:
    711F5988   9C         PUSHFD
    711F5989   60         PUSHAD
    711F598A   E8 0500000>CALL V2200806.711F5994
    711F598F   61         POPAD
    711F5990   9D         POPFD
    711F5991   C3         RET
    执行完后,见到HEX DUMP如下:
    011347FCE8 87 11 0C 70 FF 52 1F 40 00 00 00 00 00 6D 72鑷.p

maokecheng 发表于 2008-12-18 12:12

wgz001 发表于 2008-12-18 12:13

努力学习    想办法看懂   :P

鬼手 发表于 2008-12-18 12:14

想学,学不了。天书,看不懂!

zyfljy 发表于 2008-12-18 13:34

厉害 我是看不懂:'(

babaloveyou 发表于 2008-12-18 15:53

这种水平的人 只能表示 膜拜了

estelle 发表于 2008-12-18 16:47

hehe同志们好好学习学习吧

亚尔迪 发表于 2008-12-18 19:28

不错,真的很好的帖子

aiCR 发表于 2008-12-19 16:22

好东西,收下了,谢谢楼主

柯梦南 发表于 2008-12-22 09:55

真有点高深啊,下载试着练习吧
页: [1] 2 3 4 5
查看完整版本: EncryptPE V2.2008.6.18 主程序学习笔记