多语言展示
当前在线:1810今日阅读:27今日分享:41

OD手动修改PE文件入口代码

修改PE文件(增加代码!):主要用到的工具:虚拟机VMware、OD 、Stud_PE、LordPE、ImportREC、PEiD首先用PEiD查看是否加壳
工具/原料

虚拟机VMware、OD 、Stud_PE、LordPE、ImportREC、PEiD

方法/步骤
1

先脱壳!这里就不再说明了,网上有多种方法脱壳。脱壳完后就是这样:

2

接着用Stud_PE 来获取一些 导入地址表(IAT)的信息(RVA)和 添加一个 区段,用来存放我们添加的代码,如图:ShellExecuteA  RVA: 0007C380MessageBoxA  RVA: 0007C4B8Sleep                 RVA: 0007C260

3

在添加一个新区段:

4

用OD加载程序,并记下 开头的地址,一会添加的代码还要跳回到这里继续执行,不然程序会崩溃!!

5

按Alt +M打开内存窗口,找到我们添加的区段的 基地址:为004C3000

6

Ctrl +G 来到新区段:(注意,这里什么都没有,因此我们可以在此添加代码!)

7

接下来可以添加代码了,注意 函数的调用约定 , 从右到左依次压栈!明白这一点就可以继续了,注意这里,要调用 MessageBoxA函数,应该 是 VA=RVA+baseaddress如: PUSH [0007C4B8+400000]           修改后的代码如下:004C3000    6A 00           push 0x0004C3002    68 20304C00     push dumped_.004C3020                    ; ASCII 'HELLO !'004C3007    68 30304C00     push dumped_.004C3030                    ; ASCII 'THIS IS A MESSAGE!'004C300C    6A 00           push 0x0004C300E    FF15 B8C44700   call dword ptr ds:[<&user32.MessageBoxA>>; user32.MessageBoxA004C3014    EB 37           jmp short dumped_.004C304D004C3016    0000            add byte ptr ds:[eax],al004C3018    0000            add byte ptr ds:[eax],al004C301A    0000            add byte ptr ds:[eax],al004C301C    0000            add byte ptr ds:[eax],al004C301E    0000            add byte ptr ds:[eax],al004C3020    48              dec eax004C3021    45              inc ebp004C3022    4c              dec esp004C3023    4c              dec esp004C3024    4F              dec edi004C3025    2021            and byte ptr ds:[ecx],ah004C3027    0000            add byte ptr ds:[eax],al004C3029    0000            add byte ptr ds:[eax],al004C302B    0000            add byte ptr ds:[eax],al004C302D    0000            add byte ptr ds:[eax],al004C302F    005448 49       add byte ptr ds:[eax+ecx*2+0x49],dl004C3033    53              push ebx004C3034    2049 53         and byte ptr ds:[ecx+0x53],cl004C3037    2041 20         and byte ptr ds:[ecx+0x20],al004C303A    4D              dec ebp004C303B    45              inc ebp004C303C    53              push ebx004C303D    53              push ebx004C303E    41              inc ecx004C303F    47              inc edi004C3040    45              inc ebp004C3041    2100            and dword ptr ds:[eax],eax004C3043    0000            add byte ptr ds:[eax],al004C3045    0000            add byte ptr ds:[eax],al004C3047    0000            add byte ptr ds:[eax],al004C3049    0000            add byte ptr ds:[eax],al004C304B    0000            add byte ptr ds:[eax],al004C304D    68 B80B0000     push 0xBB8                               ; BB8 十进制 3000004C3052    FF15 60C24700   call dword ptr ds:[<&kernel32.Sleep>]    ; kernel32.Sleep004C3058    EB 02           jmp short dumped_.004C305C004C305A    0000            add byte ptr ds:[eax],al004C305C    6A 01           push 0x1004C305E    6A 00           push 0x0004C3060    6A 00           push 0x0004C3062    68 9A304C00     push dumped_.004C309A                    ; ASCII 'http://www.baidu.com'004C3067    68 BA304C00     push dumped_.004C30BA                    ; ASCII 'open'004C306C    6A 00           push 0x0004C306E    FF15 80C34700   call dword ptr ds:[<&shell32.ShellExecut>; shell32.ShellExecuteA004C3074  - E9 9EA1F9FF     jmp dumped_.004C3079    0000            add byte ptr ds:[eax],al004C307B    0000            add byte ptr ds:[eax],al004C307D    0000            add byte ptr ds:[eax],al004C307F    0000            add byte ptr ds:[eax],al004C3081    0000            add byte ptr ds:[eax],al004C3083    0000            add byte ptr ds:[eax],al004C3085    0000            add byte ptr ds:[eax],al004C3087    0000            add byte ptr ds:[eax],al004C3089    0000            add byte ptr ds:[eax],al004C308B    0000            add byte ptr ds:[eax],al004C308D    0000            add byte ptr ds:[eax],al004C308F    0000            add byte ptr ds:[eax],al004C3091    0000            add byte ptr ds:[eax],al004C3093    0000            add byte ptr ds:[eax],al004C3095    0000            add byte ptr ds:[eax],al004C3097    0000            add byte ptr ds:[eax],al004C3099    0068 74         add byte ptr ds:[eax+0x74],ch004C309C    74 70           je short dumped_.004C310E004C309E    3A2F            cmp ch,byte ptr ds:[edi]004C30A0    2F              das004C30A1    77 77           ja short dumped_.004C311A004C30A3    77 2E           ja short dumped_.004C30D3004C30A5    6261 69         bound esp,qword ptr ds:[ecx+0x69]004C30A8    64:75 2e        jne short 004c30d9004C30AB    636F 6D         arpl word ptr ds:[edi+0x6D],bp004C30AE    0000            add byte ptr ds:[eax],al004C30B0    0000            add byte ptr ds:[eax],al004C30B2    0000            add byte ptr ds:[eax],al004C30B4    0000            add byte ptr ds:[eax],al004C30B6    0000            add byte ptr ds:[eax],al004C30B8    0000            add byte ptr ds:[eax],al004C30BA    6f              outs dx,dword ptr ds:[esi]004C30BB    70 65           jo short dumped_.004C3122004C30BD    6e              outs dx,byte ptr ds:[esi]004C30BE    0000            add byte ptr ds:[eax],al004C30C0    0000            add byte ptr ds:[eax],al

8

注意,还没有完成!还要用Stud_PE 修改程序的 OEP:

9

这里的C3000也就是 4c3000 – 400000=c3000或者转换下:

10

结果,打开后:等待3秒:看!成功了!如果有兴趣的可以在添加一些代码。。。。。。当前也要注意在修改时小心小心再小心,不然就搞得程序崩溃了。。。

推荐信息