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
#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
评论
您还确定这是.text部分,而不是GOT / PLT之类的其他部分吗?它几乎看起来像一个导入的thunk表,但这将使用间接跳转。
笨拙的桌子听起来不错!我不认为它是.text部分,因为它链接到函数还是我认为这是错误的?这样我就可以查找thunk表,并且应该可以看到一些c ++代码?
您是否尝试过使用调试器来确定跳转到本节的代码?可能有一个明显的模式可以阐明其目的。
我使用ollyDB会浪费时间,我曾经做过任何逆向工程,但我掌握了它的窍门。刚刚发现了一些打印语句,并在其中放置了断点,并逐步完成了程序集。这绝对是导入地址表!