读取大多数功能的源代码是没有意义的,
因为原始算法是用C ++编写的,与收到的C代码相差太远了。
br />
即使我尝试通过C编译器编译接收到的C代码-
由于大量语法问题,缺少库等,它也无法运行。 >为简化操作,我现在要执行以下任务:
我只需要直接从dll调用一些必需的函数,
提供我选择的一些参数。
这种方法适用于导出的函数,我从反编译器代码中知道函数的名称
,并且它们的确在dll内有名称。
但是谈到内部(非dll中的函数-
它们在反编译代码中的名称是mo可能与
原始版本有所不同。
或者还有其他聪明的方法可以直接从原始dll直接调用这些函数吗?
如何做到这一点?
#1 楼
首先想到的是以下方法使用您喜欢的调试器/反汇编器定位该函数并记下标识该函数的唯一字节模式(类似于IDA的Flirt签名的排序)
获取DLL的句柄(GetModuleHandleA)
获取图像大小(使用GetModuleInformation从MODULEINFO.SizeOfImage)
搜索您的唯一模式(句柄+ i
将找到的地址分配给函数指针
调用函数
评论
您为什么要使用非导出功能?它们由于某种原因未导出。为什么导出的功能不足以满足您的目的?@peterferrie这是ReverseEngineering.SE,而不是StackOverflow; “如果没有记录就不要这样做”或“因为<编码标准>而不要这样做”或“如果不希望被称为您不应该打电话”之类的东西不在这里,不要你不觉得吗如果我们要遵守规则,我们最好还是说“如果程序已打包,那么您就不应该对它进行反向工程”并拧紧它。
@AcidShout,您从我的要求中推论出太多,得出了完全错误的解释。我并不是说不应该使用它们。我只是问为什么导出的功能不足,因为不打算使用未导出的功能。