为什么在转换为文本时,可移植可执行文件的hexdump的大部分通常是不可读的,为什么有些可读?

时间:2017-06-13 11:26:16

标签: winapi hexdump portable-executable

我将各种PE放到十六进制编辑器中并搜索字符串(主要是Windows函数),这些字符串可以帮助理解PE执行的操作以及有关它的任何其他详细信息,而无需执行它。

在DOS存根之后,大部分时间都使用真实和恶意可执行文件,hexdump(转换为文本)的较大部分是不可读的,例如:

ime...SearchPathW.a.GetShortPathNameW.û.GetFullPathNameW..c.MoveFileW.M.SetCurrentDirectoryW..ê.GetFileAttributesW....GetLastError....CreateDirectoryW..a.SetFileAttributesW..².Sleep.“.GetTickCount..ð.GetFileSize...GetModuleFileNameW..À.GetCurrentProcess.u.

然后在这样的许多行之间的某处可以看到一系列Windows函数:

<?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>

这个XML部分:

if(($('#' + controlInp).attr("multiple") === "multiple") && !$.isEmptyObject(selectedValues)){
        $('#' + controlInp).change(function(){
            var selectedValues = getSelectedValues(controlInp);
            if(!$.isEmptyObject(selectedValues)){
                $('#' + inp + 'Container').hide();
                $.each(selectedValues, function(i, val){
                    if(($.inArray(val, value) !== -1)){
                        $('#' + inp + 'Container').show();
                    }
                });
            }else{
                $('#' + inp + 'Container').hide();
            }
        });
}

什么决定哪些部分可读,哪些部分不可读?我假设可以提取Windows函数,因为它是与操作系统交互的东西,而不是本地使用的和开发人员创建的东西。

为什么不可读部分难以理解?当我第一次看到它时,我认为它是加密/打包/混淆的。现在我在想,这是开发人员故意做的事情吗?如上所述,我在恶意和真正的PE中看到了相同的模式。

1 个答案:

答案 0 :(得分:2)

可读部分将是字符串,导入的函数名称,文本资源(如XML应用程序清单)等等。但是大多数可执行文件往往是机器代码。这是二进制数据,它不是文本。

这是完全正常的,可以预期。这里没有加密或混淆的证据。

相关问题