调用可执行文件的功能代码

时间:2010-10-14 14:34:48

标签: c++ function reverse-engineering call

我有可执行文件中存在的特定函数的位置/偏移量。是否可以调用这样的函数(同时抑制CRT执行可执行文件的入口点)?

3 个答案:

答案 0 :(得分:4)

实际上,您可以模拟Windows加载程序,假设您在Windows下运行,但基本应该在任何平台上都相同。参见例如http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

  1. 将文件加载到内存中,
  2. 将加载的可执行文件调用的函数的所有相对地址替换为实际的函数地址。
  3. 将内存页面更改为“可执行文件”(这是困难且与平台相关的部分)
  4. 初始化CRT以便例如初始化静态变量。
  5. 呼叫。
  6. 然而,正如评论者指出的那样,这可能仅仅是一种使用非常简单的功能的练习。如果您无法模拟完整的OS加载程序,可能会出现许多错误。

    PS:您也可以向Google询问:http://www.cultdeadcow.com/tools/pewrap.html

    PPS:您还可以在“安全”社区中找到有用的建议:https://www.blackhat.com/presentations/bh-usa-07/Harbour/Whitepaper/bh-usa-07-harbour-WP.pdf

答案 1 :(得分:0)

是的,如果要初始化此函数使用的所有全局变量,则可以调用它。可能包括CRT全局变量。作为替代方法,您可以挂钩并替换被调用者使用的所有CRT函数。请参阅反汇编该函数以获得正确的解决方案。

答案 2 :(得分:0)

1)查看LoadLibraryEx() API。它有一些标志可以完成塞巴斯蒂安所描述的所有肮脏的工作。

2)编辑可执行文件。几个修改的字节将完成这项工作。以下是有关文件格式的一些文档:http://docsrv.sco.com:507/en/topics/COFF.html