平时用到的一些工具类, 这部分内容涉及面比较广, 慢慢补全
未完成, 某些代码需要重新实现, pe部分编译后不够小, 需要改得更简洁
用编译器内部函数代替汇编(比如取fs,为的是64位编译方便),可能某些旧版编译器不支持,而且用的C++14,VC6会编译不过,自己改改吧
里面可能会包含一些无用代码文件(未完成待补足的代码),都已排除出vs项目外,以vs项目包含的文件为主
相关函数接口会慢慢补sal
等完成再把文档全面补充
用法见PeImageTest.cpp
#include <PE\PeDecoder.h>
目前可以解析:
- Dos头
- Nt头
- 节表
- 导入表
- 导出表
- 资源
- 重定位表
- 延迟导入表
缺读取器的结构有:
- Debug
- Exception
- Security
- Architecture
- Tls
- LoadConfig
- BoundImport
- ComDescriptor
pedecoder可以返回结构指针, 缺少读取器是因为不常用, 以后用到再补
之后需要用C++.Net封装迁移到C#
未完成, 先写完解析再写, 如果需要修改,现在可以用decoder返回的地址修改
包含Dll调用等,有些杂,项目名用得不准确,后面会单独分
用法见ProcessLibTest.cpp
#include <Process\LdrDataTable.h>
包含:
1.PEB、TEB结构定义
定义来自reactos源码
2.LdrDataTableEntry读取器
可以使用三种方式遍历LdrDataTable
3.搜索LdrDataTable,取得已经载入的DLL的句柄的函数
#include <Process\Kernel32.h>
#include <Process\NtDll.h>
首次调用时才会载入相关dll和函数,使用搜索Ldr的方式找NtDll,LoadLibrary和GetProcAddress都是用重写的API
预先定义了常用函数的一些仿函数,想到更简单的方法再替换
#include <Process\GetProcAddress.h>
#include <Process\LoadLibrary.h>
#include <Process\OpenProcess.h>
#include <Process\ReadProcessMemory>
#include <Process\SetThreadContext>
#include <Process\VirtualAlloc>
#include <Process\VirtualFree>
#include <Process\VirtualProtect>
#include <Process\VirtualQuery>
#include <Process\WriteProcessMemory>
仅重写常用的几个函数,用的是NtDll(PEB获得)里的函数
GetProcAddress用前面的PE库解析
启动远程线程等函数等写到再添加, 所以这部分待续
#include <Hook\IatHook.h>
#include <Hook\EatHook.h>
不支持64位
#include <Hook\DelayLoadHook.h>
使用vs2015后,相关结构定义的头文件在sdk中改名了,所以用的是新的那一个定义,旧版本编译时可能会找不到相关定义
延迟导入表因为这个原因修改过,没做新的测试
#include <Hook\ApiHook.h>
现在是可用的,需要自己确定备份长度,可能有bug自己测一测
这部分未写完整,需要写一个反汇编引擎实现自动判断修改长度
之前写的引擎因为Intel的CPU文档解析例子跟Opcode表有冲突先暂停等文档修复再处理,已移除出项目,等写好再加回来(可能会久点,大部分忘了,有空再Load那段知识)
UnHook 待续(通常不需要)
临时起意封装的一些WinApi,没什么意义
有 Coroutine\ Fiber\ ThreadPool 等