功能代码:

int get_PE_feature_rof(string path_r,int codeArr[],int codeCtrl[],int len){// 打开文件ifstream in = ifstream(path_r, ios::binary);if (!in.is_open()){cout << "文件打开失败:" << GetLastError() << endl;in.close();return 0;}// 获取文件大小、文件名long long Beg = in.tellg();in.seekg(0, ios::end);long long End = in.tellg();long long fileSize = End - Beg;in.seekg(0, ios::beg);// 读文件(每次循环读取 1 字节)int byteBeenRead = 0;               // 已经读取的字节数unsigned char temp;                  // 存放读取内容的缓冲区               int rof_feature = 0;               // 特征 ROFint codeArrSub = 0;                   // 要对比的 codeArr[] 下标BOOL isFound = FALSE;              // 是否找到特征int cmpAllReady = 0;              // 已经对比特征的次数while (in.read((char*)&temp, 1)/* && isFound == FALSE*/){byteBeenRead++;// 读 1 字节int hex = (unsigned)temp;// 控制码为0 则比较下一个if(codeCtrl[codeArrSub] == 0){codeArrSub++;// 是否比较完毕if(codeArrSub == len){cout << "find rof" << endl;rof_feature = byteBeenRead - len;isFound = TRUE;break;}continue;}// 匹配到一个特征if(hex == codeArr[codeArrSub]){codeArrSub++;// 是否比较完毕if(codeArrSub == len){cout << "find rof" << endl;rof_feature = byteBeenRead - len;isFound = TRUE;break;}continue;}// 匹配失败else{codeArrSub=0;continue;}}//cout << "rof_feature = " << hex << rof_feature << endl;in.close();return rof_feature;
}

调用例子:

int codeArr_lea_win7[] = {0x48,0x8d,0x0d,0x37,0x41,0xdc,0xff,0x45,0x33,0xc0,0x48,0x8b,0xd7,0x48,0x8d,0x0c,0xd9,0xe8,0x98,0x54,0xf7,0xff,0x84,0xc0,0x75,0x11,0xff,0xc3,0x83,0xfb,0x40,0x72,0xdf,0x48,0x8b,0xcf,0xe8,0x65,0xd8,0xf7,0xff,0xeb,0xcc
};
int codeCtrl_lea_win7[] = {1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1
};int rof_lea =  get_PE_feature_rof("C:\\Windows\\SysNative\\ntoskrnl.exe",codeArr_lea_win7,codeCtrl_lea_win7,43);

延申,根据 rof 计算 vaof

假设我们已经拿到了 ROF = 0x3d3f60 观察区段表:
因为 0x3d3f60,大于 0x235000 小于 0x46ec00 所以处于 PAGE 区段
根据公式 vaof = 我们的rof - 所属区段rof + 所属区段va
在这里也就是:

vaof = 0x3d3f60 - 0x235000 + 0x2be000;

拿到 vaof 后,再加上驱动基地址就能得到对应未公开 API 再内核中的内存地址。

C++ 计算文件指定位置 rof,再计算 vaof相关推荐

  1. php 文件指定位置添加内容,C++_VC++在TXT文件指定位置追加内容的方法,本文实例讲述了VC++操作文本文 - phpStudy...

    VC++在TXT文件指定位置追加内容的方法 本文实例讲述了VC++操作文本文件的方法,实现在txt文件指定位置插入内容.对于VC++爱好者有一定的学习参考价值. 主要功能代码如下: void CGoT ...

  2. 计算Dataframe指定位置上的分位数:df.quantile()

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] 计算Dataframe指定位置上的分位数 df.quantile() 选择题 关于以下代码说 ...

  3. FME写入Excel数据时写到模板文件指定位置

    在写入Excel数据时写到模板文件指定位置 介绍 本示例对 Excel 写模块参数概述一文进行了扩展.在该示例中,您学习了如何更新模板文件指定的单元格. 使用 FME,您可以重写 RawData 工作 ...

  4. python把光标定义到指定的位置并删除之前的字符_python 批量修改预定字符串并将修改后的字符串插入文件指定位置...

    下面的例子是在文件的指定位置增加指定字符串的例子 修改配置文件: def add_str(pre_str): lines =[] flag= Truef= open("z.txt" ...

  5. python怎么读文件里的指定几行-Python从文件中读取指定的行以及在文件指定位置写入...

    Python从文件中读取指定的行 如果想根据给出的行号, 从文本文件中读取一行数据, Python标准库linecache模块非常适合这个任务: 测试文件内容 :This is line 1. Thi ...

  6. python awk 读文件_测试python awk sed 读取文件指定位置时的性能

    #!/bin/env python #coding:utf8 ''' awk 打印指定行数 sed 打印指定行数 python 打印指定位置,某长度字符串 awk 耗时最长,很长 sed awk 时间 ...

  7. python 文件指定位置写入-Python从文件中读取指定的行以及在文件指定位置写入...

    Python从文件中读取指定的行 如果想根据给出的行号, 从文本文件中读取一行数据, Python标准库linecache模块非常适合这个任务: 测试文件内容 :This is line 1. Thi ...

  8. python指定位置写入文件_Python从文件中读取指定的行以及在文件指定位置写入

    Python从文件中读取指定的行 如果想根据给出的行号, 从文本文件中读取一行数据, Python标准库linecache模块非常适合这个任务: 测试文件内容 : This is line 1. Th ...

  9. C#中计算流指定位置和长度的MD5值

    在Microsoft .NET Framework 2.0中,计算MD5值可以用到System.Security.Cryptography.MD5CryptoServiceProvider类,其计算M ...

最新文章

  1. java jdk下载过慢 解决方案
  2. mysql connector bin_mysql-connector-java-xxx-bin.jar包的使用
  3. 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )
  4. windows下挂载ext4_WSL2 支持挂载物理磁盘,Windows 可直接访问 ext4
  5. jsonobject修改key的值_修改JSONArray里所有key的值
  6. 使用jenkins进行项目的自动构建部署
  7. 【教程】E103-W10无线串口服务器TCP协议与PC连接收发数据详解!
  8. VS2010 快捷键 (空格显示 绿点, Tab 显示箭头)
  9. gan 总结 数据增强_吴恩达Deeplearning.ai国庆上新:GAN专项课程
  10. 中国计量大学研究生复试c语言_中国计量大学2020考研招调剂生,25个专业
  11. hdu 5402 Travelling Salesman Problem (技巧,未写完)
  12. python游戏源代码下载_python小游戏源代码_python游戏项目
  13. VMware虚拟机无法识别U盘解决方案
  14. 外部表不是预期的格式-excel
  15. C++中的typeid关键字
  16. Android中获取GPS搜索到的卫星颗数、并获取每颗卫星的信噪比
  17. linux系统时间显示错误的是,教你解决linux操作系统时间错误
  18. C语言指针中P、*P、P、**P的区别
  19. 数据仓库维度建模——事实表设计
  20. 逃离迷宫 c++ bfs(中南大学考研机试题

热门文章

  1. 基于java贫困学生信息跟踪管理系统
  2. [易飞]供应商料件特殊检验方式优先级大于检验方式
  3. 多级放大电路耦合方式的优缺点
  4. 2021年优秀信创解决方案名单公布,艺赛旗成功入选
  5. 直升机总体优化设计优秀论文集
  6. python中ch是什么_Python中的函数
  7. 头文件的内容以及如何引用头文件
  8. 计算机科学与技术专业职业规划范文,计算机科学与技术专业职业生涯规划书范文...
  9. 如何查看google浏览器的信息
  10. 论文阅读 | BMBC:Bilateral Motion Estimation with Bilateral Cost Volume for Video Interpolation