使用C/C++语言,结合内联汇编,可以方便的提取可执行代码。下面一个例子,掌握了这种方法,很容易举一反三。
例程:
先用内联汇编设计出一个显示对话框的函数MsgBox,然后通过C/C++指针把这个函数的物理地址代码取出并打印。
程序使用了2个函数,MsgBox()用于显示对话框和提取对话框的机器代码、PrintMsgboxCode()打印MsgBox()函数中内联汇编的机器代码。
//下面编程实现
#include <windows.h>
#include <iostream>
using namespace std;
#include<stdio.h>
#define PROC_BEGIN _asm _emit 0x90 _asm _emit 0x90/
_asm _emit 0x90 _asm _emit 0x90/
_asm _emit 0x90 _asm _emit 0x90/
_asm _emit 0x90 _asm _emit 0x90
#define PROC_END PROC_BEGIN
#define BEGIN_STRLEN 0x08
#define END_STRLEN 0x08
#define MAX_Sc_Len 0x400
//信息显示对话框函数
void MsgBox(){
//获取MessageBoxA在内存中的地址
HINSTANCE hLibMsg=LoadLibrary("user32.dll");