C/C++ 动态与静态内存补丁
现动态内存补丁(读取): 这种补丁是把程序加载到内存中以后对其进行修改,常用于加壳程序的破解.
#include <stdio.h>
#include <Windows.h>
BYTE * ReadMemory(char * FileName,DWORD dwVAddress, int Size)
{
BYTE bCode = 0;
BYTE *buffer = new BYTE[Size];
STARTUPINFO si = { 0 };
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_SHOW;
si.dwFlags = STARTF_USESHOWWINDOW;
PROCESS_INFORMATION pi = { 0 };
BOOL bRet = CreateProcess(FileName, 0, 0, 0, 0, CREATE_SUSPENDED, 0, 0, &si, &pi);
if (bRet == FALSE)
exit(0);
for (int x = 0; x < 10; x++)
{
ReadProcessMemory(pi.hProcess, (LPVOID)dwVAddress, (LPVOID)&bCode, sizeof(BYTE), 0);
buffer[x] = bCode;
dwVAddress++;
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return buffer;
}
动态写入内存补丁:
#include <stdio.h>
#include <Windows.h>
BOOL WriteMemory(char * FileName, DWORD dwVAddress, unsigned char *ShellCode, int Size)
{
BYTE *Buff = new BYTE[Size];
STARTUPINFO si = { 0 };
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_SHOW;
si.dwFlags = STARTF_USESHOWWINDOW;
PROCESS_INFORMATION pi = { 0 };
memset(Buff, *ShellCode, Size);
// 创建子线程并默认暂停
BOOL bRet = CreateProcess(FileName, 0, 0, 0, 0, CREATE_SUSPENDED, 0, 0, &si, &pi);
if (bRet == FALSE)
exit(0);
BOOL Ret = WriteProcessMemory(pi.hProcess, (LPVOID)dwVAddress, Buff, Size, 0);
ResumeThread(pi.hThread);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return TRUE;
}
多次对内存进行修正 可以在上面代码基础上进行改进,这里我就不发出来了。
int main(int argc, char * argv[])
{
PROCESS_INFORMATION pi = OpenExeFile("c://main.exe");
BYTE *recv_buffer = ReadMemory(pi, 0x401000, 10);
for (int x = 0; x < 10; x++)
printf("%x ", recv_buffer[x]);
printf("\n");
BYTE cmp_code[] = { 0x33,0xc0,0xc2,0x90,0xc3 };
int ret = CheckMemory(pi, 0x401000, cmp_code, 5);
printf("返回值: %d \n", ret);
unsigned char set_buffer[] = { 0x90, 0x90, 0x90 };
WriteMemory(pi, 0x401000, set_buffer, 3);
unsigned char set_buffer1[] = { 0x90, 0x90, 0x90 };
WriteMemory(pi, 0x402000, set_buffer1, 3);
system("pause");
return 0;
}
C/C++ 动态与静态内存补丁的更多相关文章
- Java静态内存与动态内存分配的解析
1. 静态内存 静态内存是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源. 程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用 ...
- SDUT OJ 字典树 AND 静态内存与动态内存
字典树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 遇到单词不认识怎么办? 查字典 ...
- Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...
- C之静态内存和动态内存
静态内存: * 自动申请,自动释放* 大小固定,内存空间连续* 从栈上分配的内存叫静态内存 动态内存: * 程序员自己申请 * new/malloc* 大小取决于虚拟内存的大小,内存空间不连续* ja ...
- 大一C语言学习笔记(8)---指针篇--动态内存是什么?与静态内存有什么区别?怎么使用动态内存,有什么需要注意的地方?
静态内存指的是在编译时系统自动给其分配的内存,运行结束后会自动释放:静态内存是在栈中分配的: 动态内存是我们程序员手动分配的内存,正常情况下,程序运行结束后,也不会自动释放,所以为了避免发生未知的错误 ...
- C++基础知识之动态库静态库
一. 静态库与动态库 库(library),一般是一种可执行的二进制格式,被操作系统载入内存执行. 我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库 静态库和动态库区别: ...
- Spark 静态内存管理
作者编辑:杜晓蝶,王玮,任泽 Spark 静态内存管理详解 一. 内容简介 spark从1.6开始引入了动态内存管理模式,即执行内存和存储内存之间可以互相抢占.spark提供两种内存分配模式,即:静态 ...
- 【转】c语言动态与静态分配
https://blog.csdn.net/qq_43519310/article/details/85274836 https://blog.csdn.net/qq_38906523/article ...
- 动态代理+静态代理+cglib代理 详解
代理定义:代理(Proxy):是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 动态代理+静态 ...
- Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化
模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...
随机推荐
- BAPI_PO_CHANGE 采购订单修改服务
修改服务页签里面的价格和数量,达到修改净价和条件里面金额的目的 数据可以通过采购订单查询ESLH和ESLL表获取 "------------------------------------- ...
- C#9.0:Init
背景 在以前的C#版本里面,如果需要定义一个不可修改的的类型的做法一般是:声明为readonly,并设置为只包含get访问器,不包含set访问器.如下: 1 public class PersonIn ...
- Educational Codeforces Round 92 (Rated for Div. 2) A~C
原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 最近写学习了一下网络爬虫,但昨天晚上的CF让人感觉实力明显退步,又滚回来刷题了QAQ... 比赛 ...
- VScode快捷键和设置
https://blog.csdn.net/qq_35206261/article/details/85207428
- Spring boot 运行服务jar外配置配置文件方式总结
本文为博主原创,转载请注明出处: 由于需要在本地编译打包,在服务器上验证某些功能,需要频繁修改配置,本地打包时,会将配置文件也打包的jar 包内部,这种方式下,若修改配置则需要本地修改重新上传服务器一 ...
- 分享一个在线二维码生成器(基于qrcode.js开发)
一种二维码扫描与生成的工具, 它可生成个性化二维码, 支持文本.网址.图片.短信.电话等格式及主题,提供融合码功能 演示地址 https://qrcode.gitapp.cn 关键代码 var qrc ...
- MCU芯片架构设计
目录 1.应用场景 主要是I2C\UART\SPI协议 2.Cortex-M3 MCU成本与工艺选型 按照晶圆进行收费,28nm,12寸晶圆,400万美金 晶圆是圆形的,die是方形的,会存在浪费 p ...
- steam无法登陆/更新客户端
1.问题 最近CS2更新,正准备尝试游玩一下,发现提示要使用最新版本客户端,在检查steam客户端更新时,却发现检查更新失败,无法更新,有可能是丢失了某些文件导致的. (之前有过一次重新安装的经历,但 ...
- 【SHELL】[ ]、[[ ]]条件判断结构
输入参数包含 'arg-m' 时,会输出 Hit Arg-M 和 Hit Arg-N [[ ${EXEC_PARAMS[@]} =~ 'arg-m' ]] && echo " ...
- [转帖]nginx反向代理时保持长连接
https://www.cnblogs.com/liufarui/p/11075630.html ·[场景描述] HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上 ...