代码注入器有一个功能就是,在界面上写汇编代码,然后程序内部转换成二进制机器码,注入到目标进程去执行,经查阅资料了解到,这种的实际上是通过汇编引擎来进行生成的,再次经过查阅资料,找到这么一个开源的汇编引擎(实在是太难找了!!!!),下面介绍一下具体的使用
XEDParse 库简介
XED 是开源的汇编引擎,Github 地址:x64dbg/XEDParse: XEDParse: A MASM-like, single-line plaintext assembler (github.com)
官方介绍:一句话概括就是能通过指令生成机器码
XEDParse is a library to parse MASM-like plaintext instructions to the XED instruction format. The library is meant to have quick access to assembly in certain low-level programs (such as debuggers).
Currently finished:
- Parsing instructions to an internal data structure
- Translate the instruction base to XED2
- Translate registers to XED2
- Encode the translated structure
- Translate values
- Translate memory arguments
该库支持 x86 和 x64,使用方法极其简单,以至于官方连个使用说明都没单独写,就丢了个示例项目
XEDParse 库的使用
可以直接 clone github 的项目自己编译,这里编译总是提示我定位不到符号啥的,不会弄,就走笨办法吧:去 github 下载编译好的 release 压缩包来用
解压后内容如下:
C:.
│ XEDParse.h
│ XEDParsePython.py
│ XEDParse_x64.lib
│ XEDParse_x86.lib
│
├─x32
│ XEDParse.dll
│ XEDParseTest.exe
│
└─x64
XEDParse.dll
XEDParseTest.exe
接下来用 VS 创建项目,这里就是演示个怎么用,就创建控制台项目了
接下来把 dll,lib,h 后缀的文件拿走(x86 项目就拿 x86 的,x64 项目就拿 x64 的),放到项目目录下,把 h 文件添加到项目头文件里:
往头文件里最上面加一行代码,导入库:
// 用哪个调用哪个
//#pragma comment(lib,"XEDParse_x64")
#pragma comment(lib,"XEDParse_x86")
如果想把 x86 和 x64 都放在项目文件里来方便编译的话,可以通过修改 lib 二进制文件给 lib 加载的 dll 改个名字,这样就能同时把 x86 和 x64 的 dll 都放在一起了
调用代码:
构造个结构体,然后调用解析函数就行,如下:
#include <stdio.h>
#include "XEDParse.h"
int main()
{
XEDPARSE parse;
memset(&parse, 0, sizeof(parse));
#ifdef _WIN64
parse.x64 = true;
#else
parse.x64 = false;
#endif
parse.cip = 0;
char instr[256] = "";
//puts("instruction (cip = 0):");
puts("Please Enter Code:");
fgets(instr, 256, stdin); // 获取输入
instr[strlen(instr) - 1] = 0; // 最后一位清零
strcpy(parse.instr, instr); // 输入的str传递给结构体里
XEDParseAssemble(&parse); // 解析
//printf("error:\n%s\n", parse.error); // 打印错误
puts("bytes:");
for (unsigned int i = 0; i < parse.dest_size; i++) // 打印机器码
printf("%.2X ", parse.dest[i]);
puts("");
//system("pause");
return 0;
}
使用示例: