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 努力学习 想办法看懂 :P 想学,学不了。天书,看不懂! 厉害 我是看不懂:'( 这种水平的人 只能表示 膜拜了 hehe同志们好好学习学习吧 不错,真的很好的帖子 好东西,收下了,谢谢楼主 真有点高深啊,下载试着练习吧