[原创]逆向汇编代码重建如何处理原程序加载的dll
首先我也是初学者,如果我的方法中出现错误请大家指出,共同提高
进入正题,在逆向中往往需要把某个汇编函数进行代码重建,而如果这个汇编函数中有调用dll库中的函数就要对这个函数进行相应的处理,处理思路主要有2种,第一种是把这个动态库的函数也逆出来写在重建代码中直接调用,这种方式如果在想重建的汇编代码调用dll函数比较少的情况下还比较试用,如果调用了很多dll函数,而且你又没有相关的.h,.lib的情况下要把众多dll函数逆出来工作量挺大的,因此我在这介绍一下我的方法。
思路很简答,利用c,汇编的混合编程,在c代码中loadlibrary getprcaddress,然后把获得的函数地址 保存在全局变量里, 在汇编中直接call这个全局变量 下面是示例代码:
c:
#include "stdio.h"
#include "WINDOWS.H"
extern "c" float asm_main()
typedef float (*MYFUN)(float);
extern "c"
{
MYFUN cbrtf;
float arg;
}
void main()
{
float a=1.11;
float b;
arg=1.11 //传入汇编的参数 也用全局变量来传了 为了方便
HINSTANCE LibHandle;
LibHandle = LoadLibrary("libmmd.dll");
cbrtf=(MYFUN)GetProcAddress(LibHandle,"cbrtf");
b=asm_main()
a=cbrtf(a);
printf("a:%f,b:%f",a,b);
}
asm:头部我就省略了 直接写asm_main
EXTERN cbrtf :PTR DWORD
EXTERN arg:DWORD
asm_main proc
push arg
call dword ptr ds:[cbrtf]
add esp,4
ret
asm_main endp
上面就是这些代码输出a与b的值一样 用这样的形式 不论汇编里有多少你从来没见过的dll函数,只要你有dll文件,只要在c里动态加载一下就可以在汇编里用了 如果大家还有更好的方法 可以一起分享 共同学习
