首页
社区
课程
招聘
[求助]请问哪位大神知道如何反编译出C++的DLL里面的头文件,以便用于二次开发,或者有什么思路推荐一下
发表于: 2019-5-22 16:00 7460

[求助]请问哪位大神知道如何反编译出C++的DLL里面的头文件,以便用于二次开发,或者有什么思路推荐一下

2019-5-22 16:00
7460
RT
想基于一个软件工具进行二次开发,但是其开放的接口有限。
有没有什么办法把一些没有公开的头文件逆向分析出来,或者有没有什么可替代的其他办法

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 1289
活跃值: (1337)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
方法1:自制头文件,定义出函数原型,动态加载
方法2:用aheadlib之类的工具把所有的函数导出
2019-5-22 20:03
0
雪    币: 29
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
cmputer 方法1:自制头文件,定义出函数原型,动态加载 方法2:用aheadlib之类的工具把所有的函数导出
自制头文件有什么思路和方法没,能否指点一下,是不是需要原模原样地还原出来才行,还是用到多少有多少就可以了
2019-5-23 08:54
0
雪    币: 1289
活跃值: (1337)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
aheadlib你值得拥有   自己手动导入的方法可能不适合你
2019-5-23 10:32
0
雪    币: 29
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
cmputer aheadlib你值得拥有 自己手动导入的方法可能不适合你
多谢指点!
不知道难度怎么样,稳定性如何,抽空试试。
2019-5-23 12:37
0
雪    币: 29
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
aheadlib导出1万多个函数,而且函数名全是类似AheadLib_Noname13304,不知道各位高手有没有小白一点的方法
2019-5-27 08:59
0
雪    币: 29
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
自己顶一下,以下是引用高手的一段分析,虽然看不太懂但感觉说得有理

MistHill 6 2013-7-26 10:47

要成功调用第三方DLL里的导出函数,需要自己构建一个头文件(.h)和一个导入库文件(.lib)。

(A) 头文件
这个貌视没什么捷径,需要自己手工写。
分析dll各导出函数的输入参数和返回数据类型。视dll是由何种编程语言生成的,选择相应的分析工具效果较好,比如Delphi的用IDR。
通常利用IDA+Hex-Rays可生成C源码,再对比反汇编代码进行确认,那些不能确定的最好实际跟一下。
基本上IDA会猜错数据类型,特别是其为结构或类指针时。

(B) 导入库文件
有两个关键问题:导出符号(symbols,包括函数和数据)和调用约定(calling convention)。分两种情况来处理。

(a) 调用程序和dll使用相同的调用约定。
通常是两者都用同一编程语言和缺省调用约定时。
比如调用程序使用"__declspec(dllimport)"原形(prototype)和声明(declaration),dll使用"__declspec(dllexport)时,很简单。
在VC环境下,需要用到DUMPBIN.EXE和LIB.EXE。
写一个命令行批处理脚本,由DLL自动生成.def文件和.lib文件。forgot有个帖子dll2lib,我没法直接用,修改了一下(Dll2Lib.cmd)。.def文件很重要,情况(b)还会用到。
批处理脚本里生成.lib文件是这样的:

    LIB /DEF:DllFile.def /MACHINE:IX86 /NOLOGO



(b) 调用程序和dll使用不同的调用约定。
比如用C来写调用程序,而dll是用Delphi写的,我们知道Windef.h是将PASCAL定义为__stdcall的。直接用(a)的.lib就有问题,首先要解决符号问题,其次压栈参数不能得到清理(stack clean up),调用者必然崩溃。
解决办法说穿了很简单:根据(A)的头文件写一个同名Dummy DLL(DllFile.c)。
其函数声明部分用"__declspec(dllexport) return_type __stdcall funcname(...);"的形式;
为每一个导出函数写一个对应的Dummy Function,这些函数什么都不用做,只要保证传入参数的个数和类型、返回参数类型与.h头文件一致即可。
用以下命令:

    CL /O2 /MD /LD /FeDllFile /FoDllFile DllFile.c /link /DEF:DLLFile.def



即可创建DllFile.dll和DllFile.lib。使用命令之前,请注意备份或重命名你的原dll,如果同名存在会被覆盖!
新生成的Dummy DLL(DllFile.dll)是没用的,删掉。DllFile.lib才是我们需要的,它保证了导出符号和调用约定的正确。这里.def文件保证了.lib文件的ordinal与原dll一致,非常重要。
2019-5-27 09:45
0
雪    币: 29
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
自主顶一下,期待中。。。
2019-6-5 08:50
0
雪    币: 29
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
帖子要死了,再抢救一下
2019-6-12 09:06
0
雪    币: 29
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
挖坟,等高手
2020-1-14 09:36
0
游客
登录 | 注册 方可回帖
返回
//