为什么可移植可执行文件的 hexdump 的大部分在转换为文本时通常不可读,而其中一些是可读的?
Why is the greater part of a portable executable's hexdump usually unreadable when converted to text and why some of it is readable?
我将各种 PE 放入十六进制编辑器并搜索字符串(主要是 Windows 函数),这些字符串可能有助于了解 PE 的作用以及有关它的任何其他细节,而无需执行它。
在 DOS 存根之后,大多数时候,无论是真正的还是恶意的可执行文件,hexdump 的大部分(转换为文本)都是不可读的,例如:
L.µ¸°5Sÿ|.iÞôS..\C>Ó\—©>Ó.Òg.¼·+ß»–å~.2W·ÿ¸¨x:_/..²Üo(è.XX<.¯”ˆNYîk•…ùJ¹¬£oXR¾ëè.,X°`Á‚...,X(O.㣿¨P.ñ~p{澯ª°y”…Š}6…쥒{jæiö³ëêÃaûþ*ýþž.š¼AÇG(’ÅNÔ™¾=...øí>üÒGÂ.sŽÃyÈ9.ï×Ç.QgÄ™€·Sâð.Þ¾…=}.¾TQO:à}úÂ.L7.˜Sp>.(.Ó.d¥ñ—ñyøÜ¡;í¦ðìÐ9Dç.:‡é.¡s%.«è</Åï.O¯H.ÀÛìç ´$”yÊ©ƒ9§QøCü.<I8.N.ð².¨8.$àù8ü!æ°³Îy.(J8õtÞ.ï§Æ‰÷!.£ÛPN7ð󸱜z86á.²p¬‡4k!Õ&J±.RD!M.èMЬÝzâ.ÓÄ)M.§Âo.$ –.¸:㣤.î%5m@ï8]#5qM-ÅȤ™Ï‚—b¤...¿5.…._ÁÂùŠ»xßçvÚá™-—æ.ŠM<gS.ã.íGZÏ.:WÓ¹†Î.鼈Î7Ñy1.—Ðùf¾Æœ
然后在像这样的许多行之间的某处可以看到 Windows 函数块:
ime...SearchPathW.a.GetShortPathNameW.û.GetFullPathNameW..c.MoveFileW.M.SetCurrentDirectoryW..ê.GetFileAttributesW....GetLastError....CreateDirectoryW..a.SetFileAttributesW..².Sleep.“.GetTickCount..ð.GetFileSize...GetModuleFileNameW..À.GetCurrentProcess.u.
这 XML 部分:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="Nullsoft.NSIS.exehead" type="win32"/><description>Nullsoft Install System v2.46.5-Unicode</description><trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevel level="requireAdministrator" uiAccess="false"/></requestedPrivileges></security></trustInfo><compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"><application><supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/></application></compatibility></assembly>
是什么决定了哪些部分可读,哪些部分不可读?我假设可以提取 windows 函数,因为它是与 OS 交互的东西,而不是在本地使用和由开发人员创建的东西。
为什么不可读部分不可读?当我第一次看到它时,我以为它是 encrypted/packed/obfuscated。现在我在想,这是否是开发者有意为之?如前所述,我在恶意和真正的 PE 中看到了相同的模式。
可读部分将是字符串、导入的函数名称、文本资源(如 XML 应用程序清单)等。但大部分可执行文件往往是机器代码。这是二进制数据,不是文本。
这是完全正常的,也是意料之中的。这里没有加密或混淆的证据。
我将各种 PE 放入十六进制编辑器并搜索字符串(主要是 Windows 函数),这些字符串可能有助于了解 PE 的作用以及有关它的任何其他细节,而无需执行它。
在 DOS 存根之后,大多数时候,无论是真正的还是恶意的可执行文件,hexdump 的大部分(转换为文本)都是不可读的,例如:
L.µ¸°5Sÿ|.iÞôS..\C>Ó\—©>Ó.Òg.¼·+ß»–å~.2W·ÿ¸¨x:_/..²Üo(è.XX<.¯”ˆNYîk•…ùJ¹¬£oXR¾ëè.,X°`Á‚...,X(O.㣿¨P.ñ~p{澯ª°y”…Š}6…쥒{jæiö³ëêÃaûþ*ýþž.š¼AÇG(’ÅNÔ™¾=...øí>üÒGÂ.sŽÃyÈ9.ï×Ç.QgÄ™€·Sâð.Þ¾…=}.¾TQO:à}úÂ.L7.˜Sp>.(.Ó.d¥ñ—ñyøÜ¡;í¦ðìÐ9Dç.:‡é.¡s%.«è</Åï.O¯H.ÀÛìç ´$”yÊ©ƒ9§QøCü.<I8.N.ð².¨8.$àù8ü!æ°³Îy.(J8õtÞ.ï§Æ‰÷!.£ÛPN7ð󸱜z86á.²p¬‡4k!Õ&J±.RD!M.èMЬÝzâ.ÓÄ)M.§Âo.$ –.¸:㣤.î%5m@ï8]#5qM-ÅȤ™Ï‚—b¤...¿5.…._ÁÂùŠ»xßçvÚá™-—æ.ŠM<gS.ã.íGZÏ.:WÓ¹†Î.鼈Î7Ñy1.—Ðùf¾Æœ
然后在像这样的许多行之间的某处可以看到 Windows 函数块:
ime...SearchPathW.a.GetShortPathNameW.û.GetFullPathNameW..c.MoveFileW.M.SetCurrentDirectoryW..ê.GetFileAttributesW....GetLastError....CreateDirectoryW..a.SetFileAttributesW..².Sleep.“.GetTickCount..ð.GetFileSize...GetModuleFileNameW..À.GetCurrentProcess.u.
这 XML 部分:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="Nullsoft.NSIS.exehead" type="win32"/><description>Nullsoft Install System v2.46.5-Unicode</description><trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevel level="requireAdministrator" uiAccess="false"/></requestedPrivileges></security></trustInfo><compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"><application><supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/></application></compatibility></assembly>
是什么决定了哪些部分可读,哪些部分不可读?我假设可以提取 windows 函数,因为它是与 OS 交互的东西,而不是在本地使用和由开发人员创建的东西。
为什么不可读部分不可读?当我第一次看到它时,我以为它是 encrypted/packed/obfuscated。现在我在想,这是否是开发者有意为之?如前所述,我在恶意和真正的 PE 中看到了相同的模式。
可读部分将是字符串、导入的函数名称、文本资源(如 XML 应用程序清单)等。但大部分可执行文件往往是机器代码。这是二进制数据,不是文本。
这是完全正常的,也是意料之中的。这里没有加密或混淆的证据。