病毒写法,资源的释放.
时间:2022-06-21
本文章向大家介绍病毒写法,资源的释放.,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
病毒写法,资源的释放.
一丶简介
1.资源简介
为什么说是病毒写法资源释放.其实技术是把双刃剑.可以做好事也可以做坏事.我们知道.程序的本质就是二进制.所以在VS中我们可以添加二进制数据并且释放出来.释放的资源可以是你自定义的.也可以是已有的资源. 那么资源如何加载以及释放
以VS2013为例.新建一个控制台程序 (win32项目也可以.MFC也可以.跟项目无关) 然后打开资源视图
视图 -> 其它窗口 -> 资源视图 或者快捷键Ctrl + shift + E
我们可以添加一个自定义资源.只需要在资源视图上右键 -> 添加资源->导入->在资源类型哪里随便写就可以了.我是已经添加过了.正常没有添加过是空的.他会自动给你创建一个资源类型.
2.释放资源.
释放资源总共四步,很简单都是API函数.但是注意有坑.
查找资源
HRSRC FindResourceA(
HMODULE hModule, //你要获取的资源模块,如果是当前程序可以填写NULL.如果你要获取某个DLL的.需要填写GetModule(xx.DLL);
LPCSTR lpName, //资源的ID.比如我的就是 IDR_TEST1, 注意使用MAKEINTRESOURCE进行解析
LPCSTR lpType //资源的类型.这个是你自定义的资源类型
);
获取资源大小
DWORD WINAPI SizeofResource(
_In_opt_ HMODULE hModule, //模块名
_In_ HRSRC hResInfo //FindResource返回的句柄
);
加载资源,寻找到资源就要加载资源.
HGLOBAL
WINAPI
LoadResource(
_In_opt_ HMODULE hModule,
_In_ HRSRC hResInfo //FindResource返回的句柄
);
锁定资源,加载后的资源会进行坐定.并且返回这个资源的首地址.
WINBASEAPI
LPVOID
WINAPI
LockResource(
_In_ HGLOBAL hResData
);
通过上面几个API我们就可以查找资源,获取资源大小.写文件即可.
比如如果你的资源是一个PE文件(恶意EXE) 那么你可以释放出来.并且调用 CreateProcess进行调用.执行你的恶意代码. 也可以做好事.不如图片资源释放出来可以供程序使用.
唯一缺点就是文件变大.其实资源就是放到PE当中.然后你如果会解析资源表.你也可以找一下.
3.完整代码
BOOL ReleaseResource(DWORD ResourceID,const TCHAR *ResultType) //释放资源.
{
HRSRC hr = ::FindResource(NULL, MAKEINTRESOURCE(ResourceID), ResultType);
if (NULL == hr)
{
int ierr = GetLastError();
return FALSE;
}
ULONG nResSize = ::SizeofResource(NULL, hr); // Data size/length
HGLOBAL hG = ::LoadResource(NULL, hr);
if (NULL == hG || nResSize <= 0)
{
//fail
}
LPBYTE pData = (LPBYTE)LockResource(hG); // Data Ptr
// ID方式
//写入到文件
FILE *pFile = NULL;
fopen_s(&pFile, "x64Test111.dll","wb+");
//写入到文件
if (NULL == pFile)
{
MyOutputDebugStrig(TEXT("释放资源打开文件失败"));
return FALSE;
}
fwrite(pData, sizeof(char), nResSize, pFile);//写入到文件
fclose(pFile);
}
- 如何证明Application Domain的隔离性
- Enterprise Library深入解析与灵活应用(8):WCF与Exception Handling AppBlock集成[下]
- 我所理解的Remoting(1):Marshaling & Activation[上篇]
- oracle 12c 常见报告获取-AWR
- 人人公司收购美国卡车社区 Trucker Path,未来或探索无人驾驶
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[下篇]
- 《WCF的绑定模型》博文系列汇总[共6篇]
- 快来看看难民营里的高科技超市
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[中篇]
- 如何通过自定义MessageFilter的方式利用按键方式操作控件滚动条[附源代码]
- WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇)
- 《WCF技术剖析》博文系列汇总[持续更新中]
- 关于服务器的运行寿命 你应该知道这些事
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 《Algorithms Unlocked》读书笔记3——计数排序
- vue-element-admin
- 二叉树的递归算法
- mongoDB基本操作
- 一个 Vue + Node + MongoDB 博客系统
- promise 和 async 的用法
- 解决 iPhone 微信 H5 无法自动播放音乐问题
- Sequelize 基本操作
- Java面试高频问题汇总 线程池专题
- Node.js 使用 RSA 做加密
- 面试官:说说Ribbon是如何实现负载均衡的?
- 用node.js写一个jenkins发版脚本
- Java面试高频面试题汇总 锁专题
- Java面试高频面试题汇总 I/O专题
- 如何处理dubbo反序列化失败之后留下的坑,点开看看