赞!VC++编程创建远程线程式调用CALL_VirtualAllocEx_WriteProcessMemory_CreateRemoteThread_WaitForSingleObject
16赞!VC++编程创建远程线程式调用CALL。
借箭源码:14.解密!远程CALL调用代码实现原理。
VirtualAllocEx 在指定进程里申请一块内存
LPVOID WINAPI VirtualAllocEx(
__in HANDLE hProcess, //进程句柄
__in_opt LPVOID lpAddress, //指定分配的内存地址 NULL 自动
__in SIZE_T dwSize, //分配内存大小
__in DWORD flAllocationType, //MEM_COMMIT |MEM_RESERVE
__in DWORD flProtect //PAGE_EXECUTE_READWRITE 可读可写权限
);
MEM_COMMIT:为特定的页面区域分配内存中或磁盘的页面文件中的物理存储。
MEM_RESERVE:保留进程的虚拟地址空间,而不分配任何物理存储。
返回的是 一块申请到的内存地址
WriteProcessMemory 向内存写入数据
BOOL WINAPI WriteProcessMemory(
__in HANDLE hProcess, //进程句柄
__in LPVOID lpBaseAddress,//要写入数据的内存地址
__in LPCVOID lpBuffer,//要写入的数据
__in SIZE_T nSize, //要写入的大小
__out SIZE_T *lpNumberOfBytesWritten //实际写入大小。NULL
);
写入成功返回 TRUE
CreateRemoteThread 创建远程线程
HANDLE WINAPI CreateRemoteThread(
__in HANDLE hProcess, //进程句柄
__in LPSECURITY_ATTRIBUTES lpThreadAttributes,//安全结构指针 NULL
__in SIZE_T dwStackSize, //无参数的CALL 填写0
__in LPTHREAD_START_ROUTINE lpStartAddress, //调用的CALL
__in LPVOID lpParameter, //传递参数的指针 NULL stdcall
__in DWORD dwCreationFlags, //0 线程创建后立即执行
__out LPDWORD lpThreadId //输出一个 线程ID。&lpTId
);
返回值为null 创建进程失败
//VC以裸函数的形式内联汇编
__declspec(naked) void Fun()
{
__asm
{
....//汇编代码
}
}
在函数名前声明__declspec(naked),表示以裸函数的形式内联汇编,裸函数是指编译器生成汇编代码时不添加任何额外的指令,对于一般的函数调用,编译器都会自动生成函数初始化代码,如压入和弹出
ebp指针,分配和清理局部变量等。
WaitForSingleObject 等待线程结束
DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle, //线程句柄
__in DWORD dwMilliseconds //INFINITE 无限或-1
);
// #define INFINITE 0xFFFFFFFF // Infinite timeout 无限超时
VirtualFreeEx 释放内存
BOOL WINAPI VirtualFreeEx(
__in HANDLE hProcess, //进程句柄
__in LPVOID lpAddress, //要释放的内存地址
__in SIZE_T dwSize, //释放内存大小
__in DWORD dwFreeType // MEM_RELEASE 释放指定页。这里填写这值,那么dwSize必须为0,否则函数会调用失败。
);
CloseHandle 关闭句柄
BOOL WINAPI CloseHandle(
__in HANDLE hObject //要关闭的句柄,进程句柄 or线程句柄等
);
mfc------------------------------------------------------------------
__declspec(naked) void beibaoyongwupincall()
{__asm{push ebxpush 4push 1push 0mov eax, 0x007C00B0call eaxpop ebxret}
}
void chuangjianyuanchengxiancheng()//创建远程线程
{SIZE_T xierudaxiao = 0;LPVOID calldizhi1 = ::VirtualAllocEx(jinchengjubing, NULL, 0x40900, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);if (calldizhi1 == NULL){AfxMessageBox(L"内存申请失败");}BOOL a = WriteProcessMemory(jinchengjubing, calldizhi1, beibaoyongwupincall, 0x40900, &xierudaxiao);if (a == 0){AfxMessageBox(L"数据写入失败");}DWORD id_xiancheng = 0;HANDLE xianchengjubing = ::CreateRemoteThread(jinchengjubing, NULL, 0, (LPTHREAD_START_ROUTINE)calldizhi1, NULL, 0, &id_xiancheng);//创建远程线程if (xianchengjubing==0){AfxMessageBox(_T("创建远程线程失败"));}WaitForSingleObject(xianchengjubing, INFINITE);VirtualFreeEx(jinchengjubing, calldizhi1, 0, MEM_RELEASE);
}
赞!VC++编程创建远程线程式调用CALL_VirtualAllocEx_WriteProcessMemory_CreateRemoteThread_WaitForSingleObject相关推荐
- 使用SharePoint Server 2007搜索对象模型编程创建搜索查询
MOSS Visual How To 使用SharePoint Server 2007搜索对象模型编程创建搜索查询 摘要:学习如何使用Microsoft Office SharePoint Serve ...
- VC编程实现IE风格的界面
使用过IE浏览器的朋友都知道IE界面上的扁平工具条.地址栏,扁平工具栏上的按钮正常状态下为扁平态,按钮上的图像为灰色,当鼠标放在按钮上时,按钮突 起(这种状态称为手柄),并且其上的图像变得鲜艳醒目,一 ...
- 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件
转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...
- VC++编程中的文件操作API和CFile类
VC++编程中的文件操作API和CFile类 在VC编程中,操作文件的方法主要有两种:利用API函数和MFC的CFile类.微软在其中封装了文件的一般操作,下面我就介绍一下如何利用这两种方法实现文件操 ...
- vc++ 编程 经典电子书
完整版目录都在这里了:http://www.cctry.com/forum-46-1.html C.C++ 语言: 一个月挑战C++ http://www.cctry.com/thread-778-1 ...
- 《实用VC编程之玩转控件》第1课:Windows编程简介
本文转载自: VC驿站 https://www.cctry.com/thread-297374-1-1.html 0.开发环境: 操作系统:Microsoft Windows 7 Ultimate S ...
- VC/MFC动态画线(橡皮线),画圆,画椭圆,画矩形
2012年12月7日 22:42:14 今天我在csdn网站上通过学习别人的博客学习到了动态画矩形,画线的方法,这使得我对Windows的消息循环机制有了更深刻的理解.首先来总结一下我今天的收获,呵呵 ...
- 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试
from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解 ...
- 腾讯位置服务:有何优势?如何使用平台创建应用和服务调用的 Key?
文章目录 前言 一.腾讯位置服务的优势 1.1.提供丰富的地图产品 1.2.提供行业解决方案 1.3.提供其他生态维度的支持 1.4.海量的数据基础 1.5.丰富的开发文档 二.初识腾讯位置服务 2. ...
最新文章
- 让VBCommenter支持自定义用户名
- iOS宏定义的使用与规范
- python整除表达 mod_[零基础学python]啰嗦的除法
- springer journal recommendation tool
- mysql 数据趋势,2019年8月全球数据库流行度排行--oracle、mysql增长趋势明显
- python利用有道词典翻译_使用Python从有道词典网页获取单词翻译
- Unity3D核心类型一览
- 我知道有中年危机,但没想到这么不堪
- 为什么有些工厂,3000块一个月不包吃住还能招到工人?
- JAVA实现的支付宝扫描二维码支付
- git推送项目到码云(gitee)
- 【数据结构和算法笔记】二叉树的概念和性质
- 右键新建文件夹_教你修改Windows万年不变的黄色文件夹,让文件也不枯燥
- C++11常用新特性
- python小明爬楼梯_Python3爬楼梯算法示例
- 如何编写干净的Java代码
- Bluetooth 蓝牙介绍(五):低功耗蓝牙BLE Security
- 别让自大成为职场绊脚石
- 第2次作业:微信案例分析
- html访问手机文件系统,eMMC真能优化成UFS?谈谈手机闪存的文件系统
热门文章
- 将Google Talk嵌入到网页中
- Pinnacle Studio Ultimate v25.0.1.211 品尼高视频剪辑软件中文版
- Ubuntu18.04 取消开机密码 实现自动登录
- 数据结构之冒泡排序(Java)
- SSM(Mybatis + Spring + Spring MVC)框架整合详细步骤(附jar包和项目下载,免费的)
- outlook过滤发件人_将联系人添加到Outlook 2007中的安全发件人
- 漏洞扫描工具Nessus的安装和使用
- 人工神经网络技术及应用,人工神经网络应用场景
- 快来看,我让chatGPT帮我写代码了!!!
- 安卓游戏红利开发更多属于巨头