首页 > 逆向调试 > 程序入口点修改

程序入口点修改

大概的思路:
OD载入程序A(这个是要伪造入口点特征的程序),另一个OD载入B(这个是要提取入口点特征应用到程序A的)。

然后,在A程序的下面找到一段空白处(字节全为0的地方,要足够容纳新的入口点特征码),然后将程序B入口点(OEP)处的二进制代码复制过来,铁道程序A的空白处。最后的一句代码要跳转到程序A真正的OEP。

保存修改后的A程序,用LordPE等工具将OEP修改为填充B入口点特征码的第一句代码的地址。

这样之后,PEID也许会查出来,这个程序A是用程序B的语言编写的(我试了一下,提示没有找到任何东西,说明PEID对这类修改过的OEP无法处理了,PEID基于一个userdb.txt来识别OEP特征)。

实战:(A—VC.EXE)下面是VC.exe的OEP代码,真是OEP为004016E0。

1
2
3
4
5
6
7
8
9
10
11
12
004016E0 >/$  55            PUSH EBP
004016E1  |.  8BEC          MOV EBP,ESP
004016E3  |.  6A FF         PUSH -1
004016E5  |.  68 F8244000   PUSH 004024F8
004016EA  |.  68 66184000   PUSH <JMP.&MSVCRT._except_handler3>      ;  SE 处理程序安装
004016EF  |.  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
004016F5  |.  50            PUSH EAX
004016F6  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP
004016FD  |.  83EC 68       SUB ESP,68
00401700  |.  53            PUSH EBX
00401701  |.  56            PUSH ESI
00401702  |.  57            PUSH EDI

往下翻找到一段空白代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
00401946      00            DB 00
00401947      00            DB 00
00401948      00            DB 00
00401949      00            DB 00
0040194A      00            DB 00
0040194B      00            DB 00
0040194C      00            DB 00
0040194D      00            DB 00
0040194E      00            DB 00
0040194F      00            DB 00
00401950      00            DB 00
00401951      00            DB 00
00401952      00            DB 00
00401953      00            DB 00
00401954      00            DB 00
00401955      00            DB 00
00401956      00            DB 00
00401957      00            DB 00
00401958      00            DB 00
00401959      00            DB 00
0040195A      00            DB 00
0040195B      00            DB 00
0040195C      00            DB 00
0040195D      00            DB 00
0040195E      00            DB 00

然后把B的入口点代码(UPX加密)填充到上面的空白代码:

01014120 >  60              PUSHAD
01014121    BE 00F00001     MOV ESI,NOTEPAD.0100F000
01014126    8DBE 0020FFFF   LEA EDI,DWORD PTR DS:[ESI+FFFF2000]
0101412C    57              PUSH EDI
0101412D    83CD FF         OR EBP,FFFFFFFF
01014130    EB 10           JMP SHORT NOTEPAD.01014142   ;这里要改为跳转到A的OEP地址

其中把01014130 EB 10 JMP SHORT NOTEPAD.01014142 改为跳转到004016E0(A的真实OEP)。然后保存。

用LordPE修改保存后的文件,将OEP改为00401946。于是程序VC.EXE运行之后,OEP为00401946,然后执行一段花指令之后跳转到真是的OEP。
有人会问,中间的花指令堆栈不用平衡吗?我认为没有必要了。


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> 程序入口点修改
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: 逆向调试 标签: , , ,
  1. 本文目前尚无任何评论.