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

2025-11-29 19:00:58

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

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

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

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

ShellExecuteA  RVA: 0007C380

MessageBoxA  RVA: 0007C4B8

Sleep                 RVA: 0007C260

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

3、在添加一个新区段:

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

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

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

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

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

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

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

7、接下来可以添加代码了,注意 函数的调用约定 , 从右到左依次压栈!明白这一点就可以继续了,

注意这里,要调用 MessageBoxA函数,应该 是 VA=RVA+baseaddress

如: PUSH [0007C4B8+400000]

           

修改后的代码如下:

004C3000    6A 00           push 0x0

004C3002    68 20304C00     push dumped_.004C3020                    ; ASCII "HELLO !"

004C3007    68 30304C00     push dumped_.004C3030                    ; ASCII "THIS IS A MESSAGE!"

004C300C    6A 00           push 0x0

004C300E    FF15 B8C44700   call dword ptr ds:[<&user32.MessageBoxA>>; user32.MessageBoxA

004C3014    EB 37           jmp short dumped_.004C304D

004C3016    0000            add byte ptr ds:[eax],al

004C3018    0000            add byte ptr ds:[eax],al

004C301A    0000            add byte ptr ds:[eax],al

004C301C    0000            add byte ptr ds:[eax],al

004C301E    0000            add byte ptr ds:[eax],al

004C3020    48              dec eax

004C3021    45              inc ebp

004C3022    4c              dec esp

004C3023    4c              dec esp

004C3024    4F              dec edi

004C3025    2021            and byte ptr ds:[ecx],ah

004C3027    0000            add byte ptr ds:[eax],al

004C3029    0000            add byte ptr ds:[eax],al

004C302B    0000            add byte ptr ds:[eax],al

004C302D    0000            add byte ptr ds:[eax],al

004C302F    005448 49       add byte ptr ds:[eax+ecx*2+0x49],dl

004C3033    53              push ebx

004C3034    2049 53         and byte ptr ds:[ecx+0x53],cl

004C3037    2041 20         and byte ptr ds:[ecx+0x20],al

004C303A    4D              dec ebp

004C303B    45              inc ebp

004C303C    53              push ebx

004C303D    53              push ebx

004C303E    41              inc ecx

004C303F    47              inc edi

004C3040    45              inc ebp

004C3041    2100            and dword ptr ds:[eax],eax

004C3043    0000            add byte ptr ds:[eax],al

004C3045    0000            add byte ptr ds:[eax],al

004C3047    0000            add byte ptr ds:[eax],al

004C3049    0000            add byte ptr ds:[eax],al

004C304B    0000            add byte ptr ds:[eax],al

004C304D    68 B80B0000     push 0xBB8                               ; BB8 十进制 3000

004C3052    FF15 60C24700   call dword ptr ds:[<&kernel32.Sleep>]    ; kernel32.Sleep

004C3058    EB 02           jmp short dumped_.004C305C

004C305A    0000            add byte ptr ds:[eax],al

004C305C    6A 01           push 0x1

004C305E    6A 00           push 0x0

004C3060    6A 00           push 0x0

004C3062    68 9A304C00     push dumped_.004C309A                    ; ASCII "http://www.baidu.com"

004C3067    68 BA304C00     push dumped_.004C30BA                    ; ASCII "open"

004C306C    6A 00           push 0x0

004C306E    FF15 80C34700   call dword ptr ds:[<&shell32.ShellExecut>; shell32.ShellExecuteA

004C3074  - E9 9EA1F9FF     jmp dumped_.<ModuleEntryPoint>

004C3079    0000            add byte ptr ds:[eax],al

004C307B    0000            add byte ptr ds:[eax],al

004C307D    0000            add byte ptr ds:[eax],al

004C307F    0000            add byte ptr ds:[eax],al

004C3081    0000            add byte ptr ds:[eax],al

004C3083    0000            add byte ptr ds:[eax],al

004C3085    0000            add byte ptr ds:[eax],al

004C3087    0000            add byte ptr ds:[eax],al

004C3089    0000            add byte ptr ds:[eax],al

004C308B    0000            add byte ptr ds:[eax],al

004C308D    0000            add byte ptr ds:[eax],al

004C308F    0000            add byte ptr ds:[eax],al

004C3091    0000            add byte ptr ds:[eax],al

004C3093    0000            add byte ptr ds:[eax],al

004C3095    0000            add byte ptr ds:[eax],al

004C3097    0000            add byte ptr ds:[eax],al

004C3099    0068 74         add byte ptr ds:[eax+0x74],ch

004C309C    74 70           je short dumped_.004C310E

004C309E    3A2F            cmp ch,byte ptr ds:[edi]

004C30A0    2F              das

004C30A1    77 77           ja short dumped_.004C311A

004C30A3    77 2E           ja short dumped_.004C30D3

004C30A5    6261 69         bound esp,qword ptr ds:[ecx+0x69]

004C30A8    64:75 2e        jne short 004c30d9

004C30AB    636F 6D         arpl word ptr ds:[edi+0x6D],bp

004C30AE    0000            add byte ptr ds:[eax],al

004C30B0    0000            add byte ptr ds:[eax],al

004C30B2    0000            add byte ptr ds:[eax],al

004C30B4    0000            add byte ptr ds:[eax],al

004C30B6    0000            add byte ptr ds:[eax],al

004C30B8    0000            add byte ptr ds:[eax],al

004C30BA    6f              outs dx,dword ptr ds:[esi]

004C30BB    70 65           jo short dumped_.004C3122

004C30BD    6e              outs dx,byte ptr ds:[esi]

004C30BE    0000            add byte ptr ds:[eax],al

004C30C0    0000            add byte ptr ds:[eax],al

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

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

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

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

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

9、这里的C3000也就是 4c3000 – 400000=c3000

或者转换下:

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

10、结果,打开后:

等待3秒:

看!成功了!

如果有兴趣的可以在添加一些代码。。。。。。

当前也要注意在修改时小心小心再小心,不然就搞得程序崩溃了。。。

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

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢