00EE16CC   . E9 DFBB0000    JMP BinFile.00EED2B0
00EE16D1   . E9 64AF0000    JMP <JMP.&MSVCP140D.?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@>
00EE16D6   . E9 15DB0000    JMP BinFile.00EEF1F0
00EE16DB   . E9 D0D40000    JMP BinFile.00EEEBB0
00EE16E0   . E9 C9E60000    JMP <JMP.&KERNEL32.IsDebuggerPresent>
00EE16E5   . E9 D6AD0000    JMP BinFile.00EEC4C0
00EE16EA   . E9 C1510000    JMP BinFile.00EE68B0
00EE16EF   . E9 5CE70000    JMP BinFile.00EEFE50
00EE16F4   . E9 C7A50000    JMP BinFile.00EEBCC0
00EE16F9   . E9 A4E60000    JMP <JMP.&ucrtbased._wsplitpath_s>
00EE16FE   . E9 AD950000    JMP BinFile.00EEACB0
00EE1703   . E9 083B0000    JMP BinFile.00EE5210
00EE1708   . E9 BBAE0000    JMP <JMP.&MSVCP140D.?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ>
00EE170D   . E9 7EBA0000    JMP BinFile.00EED190
00EE1712   . E9 B9BA0000    JMP BinFile.00EED1D0
00EE1717   . E9 44870000    JMP BinFile.00EE9E60
00EE171C   . E9 AF5C0000    JMP BinFile.00EE73D0
00EE1721   $ E9 7A430000    JMP BinFile.00EE5AA0
00EE1726   . E9 07E70000    JMP <JMP.&KERNEL32.GetProcAddress>
00EE172B   . E9 E07C0000    JMP BinFile.00EE9410
00EE1730   . E9 6B520000    JMP BinFile.00EE69A0
00EE1735   . E9 EEAE0000    JMP <JMP.&MSVCP140D.?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std>
00EE173A   . E9 EDE60000    JMP <JMP.&KERNEL32.FreeLibrary>
00EE173F   . E9 DCCF0000    JMP BinFile.00EEE720
00EE1744   . E9 FDAE0000    JMP <JMP.&MSVCP140D.?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@>
00EE1749   . E9 42E70000    JMP BinFile.00EEFE90
00EE174E   . E9 41AF0000    JMP <JMP.&MSVCP140D.?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBED>
00EE1753   . E9 28860000    JMP BinFile.00EE9D80
00EE1758   . E9 03C20000    JMP BinFile.00EED960
00EE175D   . E9 FEBF0000    JMP BinFile.00EED760
00EE1762   . E9 29CB0000    JMP BinFile.00EEE290
00EE1767   . E9 C4510000    JMP BinFile.00EE6930


我正在对一个exe进行逆向工程以进行类分配,我想让我的大脑围绕哪种类型的代码会产生这种汇编代码。我已经待了几天。我不是在寻找确切的答案,那将是有帮助的,但更多的是如何解决像这样的反向exe文件。谢谢您的帮助,我们将不胜感激。如果有人想知道我正在使用OllyDB

评论

您还确定这是.text部分,而不是GOT / PLT之类的其他部分吗?

它几乎看起来像一个导入的thunk表,但这将使用间接跳转。

笨拙的桌子听起来不错!我不认为它是.text部分,因为它链接到函数还是我认为这是错误的?这样我就可以查找thunk表,并且应该可以看到一些c ++代码?

您是否尝试过使用调试器来确定跳转到本节的代码?可能有一个明显的模式可以阐明其目的。

我使用ollyDB会浪费时间,我曾经做过任何逆向工程,但我掌握了它的窍门。刚刚发现了一些打印语句,并在其中放置了断点,并逐步完成了程序集。这绝对是导入地址表!

#1 楼

这看起来像增量链接模式下Visual C ++链接器的输出。在此模式下,链接器在代码部分(.text)的开头添加一个带有增量链接thunk(ILT)的部分,每个thunk是函数的相对跳转(E9 xx xx xx xx)。

二进制文件中的所有函数调用都将重定向到相应的ILT,而不是直接指向目标函数。在源代码中进行较小更改的情况下,此方法允许链接程序替换任何已更新的功能,并且仅修补ILT跳转以指向新的功能主体,而不必修补对该功能的所有引用,从而加快了速度。链接过程。

默认情况下,调试版本中的增量链接处于打开状态。

评论


谢谢!绝对是c ++可以帮助您查找和评论您的内容,谢谢!

– GoldenWest
18年11月8日在17:06

#2 楼

如果它们全部是外部目标,则它是动态加载dll时外部函数的存根。

这样,您可以限制在加载新dll时需要更新的页面数量。这使得调用代码相对于调用目标的位置独立。对外部函数的调用将发送到该页面并转发到实际函数。

加载dll(启动时,延迟加载时或显式加载)时,将根据虚拟地址填充页面。调用延迟加载的函数时,它会转发到加载函数,然后再转发到实际函数。

评论


我不知道谢谢你!!生病继续扭转,看看我是否能弄清楚这个exe文件!感谢您的帮助。

– GoldenWest
18年11月8日在17:07

导入重击使用间接跳转(FF 25或FF 15 IIRC),因此不是IMO

–伊戈尔·斯科钦斯基♦
18年11月11日在11:10

我肯定是从导入地址表中打了

– GoldenWest
18-11-24在7:22