欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]逆向汇编代码重建如何处理原程序加载的dll

[原创]逆向汇编代码重建如何处理原程序加载的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里动态加载一下就可以在汇编里用了 如果大家还有更好的方法 可以一起分享 共同学习

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功