欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创][小程序大名堂]--跨进程修改内存

[原创][小程序大名堂]--跨进程修改内存

重要的事情说一遍:

[*]最近在15pb学习,感悟挺多,总结一下....(逃

                              
-------------------
在时间充裕的情况下还是建议尽量用OD去分析   这能在很大程度上提升自己的逆向功力  我自己深有体会   实在是没办法再用IDA  
比如说 “老板叫你在xxxx时间内搞定”  时间紧迫 你为了提升技术 就用OD去逆打死也不用ida 那这也没必要 饭碗要紧。。。
-------------------------------   
此程序是要修更为自己的姓名和年龄。

准备工具:pidiy 、 OD 、 ida 、 vs2012
拖入PEID :

查看区段表 发现很乱  猜测是加壳 而且是自己写的 

查看PE细节 发现tls函数 要警惕 先去复制回调表 :00416004

查看输入表 找到了我们的老朋友“SetUnhandledExceptionFilter”异常函数  :

-------------------------------------------
拖入OD  ctrl+g  -ctrl+v粘贴回调表地址 回车 :

数据窗口 右键-整数-地址 查看TLS回调函数做了些什么(PS: 我分析了 什么也没做 就不进去看了):

我们来整整我们的老朋友的小伙伴“IsDebuggerPresent”(在这里就不做重点讲 已经讲过很多次了 而且有插件)  
ctrl+g  查找函数“IsDebuggerPresent ” 通过栈回溯找到地址“004014AA”  修改并保存文件

我们知道这是一个控制台程序 那么它的输出方式肯定是printf相关!我们就 
ctrl+g  - printf - 回车  栈回溯来到地址“00401372” 

我们分析得到:
从地址“0040c000”处开始拷贝1A(25)个字符[edi]   edi来自edx  edx又为[ebp-32]的地址 即最终通过修改[ebp-32]来加密 [代码红色高亮]

00401372  /$  55            push ebp
00401373  |.  89E5          mov ebp,esp
00401375  |.  57            push edi
00401376  |.  56            push esi
00401377  |.  53            push ebx
00401378  |.  83EC 3C       sub esp,0x3C
0040137B  |.  8D55 CE       lea edx,dword ptr ss:[ebp-0x32]                     ;  将[ebp-32]处地址给edx 即EDX=0029FED6
0040137E  |.  BB 00C04000   mov ebx,task.0040C000
[COLOR="DarkRed"][B]00401383  |.  B8 1A000000   mov eax,0x1A
00401388  |.  89D7          mov edi,edx
0040138A  |.  89DE          mov esi,ebx
0040138C  |.  89C1          mov ecx,eax[/B][/COLOR]
0040138E  |.  F3:A4         rep movs byte ptr es:[edi],byte ptr ds:[esi]        ;  拷贝字符 将[esi]的内容给[edi]
00401390  |.  C74424 08 190>mov dword ptr ss:[esp+0x8],0x19                     ;  [ESP+0X8]=0X19
00401398  |.  C74424 04 D9F>mov dword ptr ss:[esp+0x4],-0x27                    ;  [ESP+0X4]=0XFFFFFFD9
004013A0  |.  8D45 CE       lea eax,dword ptr ss:[ebp-0x32]                     ;  把[esp-32]的地址给 eax EAX=0029FED6
004013A3  |.  890424        mov dword ptr ss:[esp],eax                          ;  [ESP]=0029FED6
004013A6  |.  E8 89FFFFFF   call task.00401334                                  ;  进行加密
004013AB  |.  8D45 CE       lea eax,dword ptr ss:[ebp-0x32]                     ; |
004013AE  |.  890424        mov dword ptr ss:[esp],eax                          ; |
004013B1  |.  E8 FEA70000   call <jmp.&msvcrt.printf>                           ; \printf
004013B6  |.  83C4 3C       add esp,0x3C
004013B9  |.  5B            pop ebx
004013BA  |.  5E            pop esi
004013BB  |.  5F            pop edi
004013BC  |.  5D            pop ebp
004013BD  \.  C3            retn

我们来到加密函数 首先去分析调用了几个参数  选中“004013A6” 回车分析同时在这里下断点
00401334  /$  55            push ebp

得到 ebp+10 即3个参数 按“+”回来:

F9运行  来到加密函数(我一开始是不知道加密的 分析完才知道) 分析之:
00401334  /$  55            push ebp
00401335  |.  89E5          mov ebp,esp
00401337  |.  83EC 14       sub esp,0x14
0040133A  |.  8B45 0C       mov eax,[arg.2]
0040133D  |.  8845 EC       mov byte ptr ss:[ebp-0x14],al
00401340  |.  C745 FC 00000>mov [local.1],0x0
00401347  |.  EB 1A         jmp short task.00401363
00401349  |>  8B55 FC       /mov edx,[local.1]                                  ;  将[ebp-4]的内容给edx
0040134C  |.  8B45 08       |mov eax,[arg.1]                                    ;  将[ebp+8]的内容给eax 即EAX=0029FED6
0040134F  |.  01C2          |add edx,eax                                        ;  EDX=EDX+EAX
00401351  |.  8B4D FC       |mov ecx,[local.1]                                  ;  将[ebp-4]的内容给ecx
00401354  |.  8B45 08       |mov eax,[arg.1]                                    ;  将[ebp+8]的内容给eax 即EAX=0029FED6 不变
00401357  |.  01C8          |add eax,ecx                                        ;  EAX=EAX+ECX 此时 eax=edx  ECX每次加1
00401359  |.  8A00          |mov al,byte ptr ds:[eax]                           ;  将EAX地址中的内容第一个字节(OPcode)给al 得到新的EAX
0040135B >|.  3345 EC       |xor eax,[local.5]                                  ;  eax与[ebp-14](ESP)地址内容异或 即eax第一个字节 与[ESP]内容第一个字节异或   得到 al
0040135E  |.  8802          |mov byte ptr ds:[edx],al                           ;  将AL(即ascii码) 给edx 此时EDX地址处的第一个字节(OPcode)为所得字符
00401360  |.  FF45 FC       |inc [local.1]                                      ;  [EBP-4]指向的内容加1
00401363  |>  8B45 FC        mov eax,[local.1]                                  ;  [EBP-4]指向的内容给EAX
00401366      3B45 10       cmp eax,dword ptr ss:[ebp+0x10]                     ;  与[EBP+10]指向的内容相比较  即与0x19相比
00401369  |.  0F9CC0        |setl al                                            ;  sf不等于of时 al置为1
0040136C  |.  84C0          |test al,al                                         ;  根据结构设置标志位 al不变
0040136E  |.^ 75 D9         \jnz short task.00401349                            ;  等于0 则结束循环
00401370  |.  C9            leave
00401371  \.  C3            retn

显示不友好 添加一张图片

-----
那我们此时得到了每个字符都得与D9进行异或  
我们知道:
A异或B=C
C异或A=B
C异或B=A

这时就很简单了  我们重新f9运行  ctr+g在保存原始数据的 地址“0040c000” 数据窗口跟随

修改“97”(N)为“8A”(S) 试试看 保存重命名为1.exe

成功~!
-----------------------------
我们在用IDA来看看:





--------------------------------------------
知道上面这些 那我们很容易就能修改内存  好 我们写个跨进程修改内存程序
根据“断点异常”原理进行修改 主要代码(其他请下载):
    //修改字符串为:Tennn:Hello Pediy !!!
      BYTE bValue[25] = {0x8D, 0xBC, 0xB7, 0xB7, 0xB7, 0xE3,0xF9,
                0x91, 0xBC, 0xB5, 0xB5, 0xB6, 0xF9,
                0x89, 0xBC, 0xBD, 0xB0, 0xA0, 0xF8,
                0xF8, 0xF8, 0xF8, 0xF9, 0xF9, 0xF9,
      };
    DWORD dwWriteBytes = 0, dwOldProtect ;
    DWORD dwTagAddr=0x0040C000;    //要修改处地址
    // 修改目标地址的保护方式为可读可写
    VirtualProtectEx ( g_hProcess, (LPVOID)dwTagAddr, 25, PAGE_READWRITE, &dwOldProtect ) ; 
    // 修改数据
    WriteProcessMemory ( g_hProcess, (LPVOID)dwTagAddr, &bValue, 25 , &dwWriteBytes ) ;
    // 还原目标地址的保护方式
    VirtualProtectEx ( g_hProcess, (LPVOID)dwTagAddr, 25, dwOldProtect, &dwOldProtect ) ; 


PS: 动态修改也很简单的。。。我写死了。
完。
---------------------------
源码及
task.rar
该值.rar

上传的附件 1.png
2.png
3.png
4.png
5.png
6.png
0.png
7.png
8.png
9.png
10.png
11.png
12.png
13.png
14.png
15.png
16.png
17.png
task.rar
该值.rar
5555.png

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功