1、先脱壳!这里就不再说明了,网上有多种方法脱壳。脱壳完后就是这样:
2、接着用Stud_PE 来获取一些 导入地址表钱砀渝测(IAT)的信息(RVA)和 添加一个 区段,用来存放我们添加的代码,剧安颌儿如图:ShellExecuteA RVA: 0007C380MessageBoxA RVA: 0007C4B8Sleep RVA: 0007C260
3、在添加一个新区段:
4、用OD加载程序,并记下 开头的地址,一会添加的代码还要跳回到这里继续执行,不然程序会崩溃!!
5、按Alt +M打开内存窗口,找到我们添加的区段的 基地址:为004C3000
6、Ctrl +G 来到新区段:(注意,这里什么都没有,因此我们可以在此添加代码!)
7、接下来可以添加代码了,注意 函数的调用约定 , 从右到左依次压栈!明白这一点就可以继续了,注意这里,要调用 Message蚱澄堆别BoxA函数,应该 是 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_.<ModuleEntryPoint>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秒:看!成功了!如果有兴趣的可以在添加一些代码。。。。。。当前也要注意在修改时小心小心再小心,不然就搞得程序崩溃了。。。