根据特征码搜索基址,VC写的源码
研究了一天,初步写成。测试了几个没发现bug,如果有问题可以跟贴共同讨论
代码如下:
需要引入的头文件:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>union Base
{DWORD address;BYTE data[4];
};/************************************************************************/
/* 函数说明:根据特征码扫描基址
/* 参数一:process 要查找的进程
/* 参数二:markCode 特征码字符串,不能有空格
/* 参数三:特征码离基址的距离,默认距离:1
/* 参数四:findMode 扫描方式,找到特征码后,默认为:1
/* 0:往上找基址(特征码在基址下面)
/* 1:往下找基址(特征码在基址上面)
/* 参数五:offset 保存基址距离进程的偏移,默认为:不保存
/************************************************************************/
DWORD ScanAddress(HANDLE process, char *markCode, DWORD distinct = 1, DWORD findMode = 1, LPDWORD offset = NULL)
{//起始地址const DWORD beginAddr = 0x00400000;//结束地址const DWORD endAddr = 0x7FFFFFFF;//每次读取游戏内存数目的大小const DWORD pageSize = 4096;处理特征码///特征码长度不能为单数if (strlen(markCode) % 2 != 0) return 0;//特征码长度int len = strlen(markCode) / 2;//将特征码转换成byte型BYTE *m_code = new BYTE[len];for (int i = 0; i < len; i++){char c[] = {markCode[i*2], markCode[i*2+1], '\0'};m_code[i] = (BYTE)::strtol(c, NULL, 16);}/查找特征码/BOOL _break = FALSE;//用来保存在第几页中的第几个找到的特征码int curPage = 0;int curIndex = 0;Base base;//每页读取4096个字节BYTE page[pageSize];DWORD tmpAddr = beginAddr;while (tmpAddr <= endAddr - len){::ReadProcessMemory(process, (LPCVOID)tmpAddr, &page, pageSize, 0);//在该页中查找特征码for (int i = 0; i < pageSize; i++){for (int j = 0; j < len; j++){//只要有一个与特征码对应不上则退出循环if (m_code[j] != page[i + j])break;//找到退出所有循环if (j == len - 1){_break = TRUE;if (!findMode){curIndex = i;base.data[0] = page[curIndex-distinct-4];base.data[1] = page[curIndex-distinct-3];base.data[2] = page[curIndex-distinct-2];base.data[3] = page[curIndex-distinct-1];}else{curIndex = i + j;base.data[0] = page[curIndex+distinct+1];base.data[1] = page[curIndex+distinct+2];base.data[2] = page[curIndex+distinct+3];base.data[3] = page[curIndex+distinct+4];}break;}}if (_break) break;}if (_break) break;curPage++;tmpAddr += pageSize;}if(offset != NULL){*offset = curPage * pageSize + curIndex + beginAddr;}return base.address;
}/************************************************************************/
/* 函数说明:根据特征码扫描call地址
/* 参数一:process 要查找的进程
/* 参数二:markCode 特征码字符串,不能有空格
/* 参数三:特征码离基址的距离,默认距离:1
/* 参数四:findMode 扫描方式,找到特征码后,默认为:1
/* 0:往上找基址
/* 1:往下找基址
/************************************************************************/
DWORD ScanCall(HANDLE process, char *markCode, DWORD distinct = 1, DWORD findMode = 1)
{DWORD offset;DWORD call = ScanAddress(process, markCode, distinct, findMode, &offset);call += offset;if(findMode) call = call + 5 + distinct;else call = call - distinct;return call;
}
测试代码如下:
{
//查找游戏窗口
HWND hGame = ::FindWindow("DxFirst", NULL);
if(hGame == NULL) return FALSE;
DWORD processId;
HANDLE process;
::GetWindowThreadProcessId(hGame, &processId);
process = ::OpenProcess(PROCESS_ALL_ACCESS, false, processId);
//83C404C3CCCCA1 1 人物基址往下搜索
//C3CCCCCCCCCCCCCCCCCCCC8B442404A3ECA72001 0 人物基址往上搜索
//5557535152C6400801E8 1 打怪call
//基址在特征码下面
DWORD addr = ScanAddress(process, "83C404C3CCCCA1");
printf("人物基址:%X\n",addr);
//基址在特征码上面
DWORD addr = ScanAddress(process, "C3CCCCCCCCCCCCCCCCCCCC8B442404A3ECA72001", 3, 0);
printf("人物基址:%X\n",addr);
DWORD call = ScanCall(process, "5557535152C6400801E8");
printf("call基址:%X\n",call);
::CloseHandle(process);
return 0;
}
转载于:https://www.cnblogs.com/rogee/archive/2010/10/11/1847953.html
根据特征码搜索基址,VC写的源码相关推荐
- c语言写辅助基址是进程名,本人纯小白问下,知道基址,有辅助源码,怎么更新辅助中的基址...
本帖最后由 ewq3391093 于 2016-8-28 20:27 编辑 首先本人纯小白问下,知道基址,有辅助源码,怎么更新辅助中的基址如题.再附上辅助源码http://pan.baidu.com/ ...
- java 手写签名,signature java html5+ 手写签名 源码 Develop 238万源代码下载- www.pudn.com...
文件名称: signature下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 491 KB 上传时间: 2013-08-03 下载次数: 17 提 供 者: 孙晨 ...
- Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)
一.综述 HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及到HDFS中NameNode.DataNode.DFSClient等众多角色的分工与合作. 首先上一段代码,客户端是如何写文件的: ...
- Django的rest_framework的视图之Mixin类编写视图源码解析...
Django的rest_framework的视图之Mixin类编写视图源码解析 Mixin类编写视图 我们这里用auther表来做演示,先为auther和autherdetail写2个url 1 2 ...
- 【手写 Promise 源码】第八篇 - 完善 Promise 并通过 promise-aplus-tests 测试
一,前言 上一篇,实现 Promise 对返回值 x 各种情况的分析和处理,主要涉及以下几个点: 回顾了相关的 Promise A+ 规范内容: 根据 Promise A+ 规范描述和要求,实现了核心 ...
- 全新音乐搜索器多站合一源码V1.7.7修复版+PHP内核
正文: 全新音乐搜索器多站合一源码V1.7.7修复版+PHP内核,PHP版本要求:5.6 修复咪咕音乐/修复酷我音乐/修复5sing原唱及翻唱/修复qq音乐/修复百度音乐,更新修复各大音乐网站接口数据 ...
- Node进阶——之事无巨细手写Koa源码
作者 rocYoung Koa是一个基于Node.js的Web开发框架,特点是小而精,对比大而全的Express(编者按:此处是相对来说,国内当然是有Egg.js和ThinkJS),两者虽然由同一团队 ...
- Node进阶—事无巨细手写Koa源码
作者 rocYoung Koa是一个基于Node.js的Web开发框架,特点是小而精,对比大而全的Express(编者按:此处是相对来说,国内当然是有Egg.js和ThinkJS),两者虽然由同一团队 ...
- node进阶——之事无巨细手写koa源码(转)
https://juejin.im/post/5ba48fc4e51d450e704277fa koa是一个基于nodejs的web开发框架,特点是小而精,对比大而全的express,两者虽然由同一团 ...
- 【180630】VC++数独游戏源码
VC++数独游戏源码 源码下载地址:点击下载 备用下载地址:点击下载
最新文章
- Android Studio 配置OpenCV4.4.0 不用安装OpenCV Manager (泪崩居然用了礼拜天2天的时间居然还没配置成功,今天又看了下配置成功了)
- o oia ospf 路由优先_OSPF基本配置及OSPF特殊区域配置
- pytorch 区间loss 损失函数
- PAT (Basic Level) 1080 MOOC期终成绩(模拟+stl)
- vlc android 移植版编译
- Java从零开始学十四(包和访问控制)
- 一阶低通滤波器算法实现
- 2000/XP系统蓝屏原因与解决
- 一线互联网公司Java高级面试题总结
- 苹果Mac设备丢失时怎样利用激活锁保护隐私信息?
- 知名的医药管理软件有哪些,说说看
- 女神瓦萨比-小黑中国力鉴淘宝给力明星店
- Python实现云词图效果
- 阿里云 (ECS 部署Javaweb 以及虚拟机操作)
- 刺激战场春节版年兽全网最详细位置,另附刺激战场更新内容
- Antd表单项根据后端返回字段显示错误的校验提示语
- 数据结构和算法学习网站
- 川土微电子 | 如何隔离 RS-485 系统
- 系统移植丨使用傲梅分区助手和EasyBCD迁移系统盘
- 【推荐系统】EMBEDDING 在大厂推荐场景中的工程化实践