这些 Windows 可执行元数据特征是否意味着我认为它们的作用?

如何解决这些 Windows 可执行元数据特征是否意味着我认为它们的作用?

我正在学习汇编作为恶意软件分析项目的一部分,并尝试使用一些 Node.js 库从 GitHub 抓取可执行文件并反汇编它们。

特别是我专注于 x86-64 PE。

但是反汇编程序(例如 the one I chose)不一定要找到特定可执行格式(例如 PE)中的指令。

除了首先需要知道我的指令应该从哪里开始,当我开始使用反汇编程序时,我意识到我还需要为程序设置一个特定的 RIP 值来启动。我不完全理解为什么有些程序以不同的内存偏移量开始,但据说这是为了允许其他协作进程将内存放在同一块中。或者类似的东西。

所以我的目标是知道:

  • RIP 的正确起始值
  • 用于查找首条指令的正确字节,超出标头。

所以我使用 a library 来查找元数据,如下所示:

let metaData = await executableMetadata.getMetadataObjectFromExecutableFilePath_Async(execPath);

当传递一个带有这样标题的 exe 时:

0:      4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00
16:     b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
32:     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
48:     00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00
64:     0e 1f ba 0e 00 b4 09 cd 21 b8 01 4c cd 21 54 68
80:     69 73 20 70 72 6f 67 72 61 6d 20 63 61 6e 6e 6f
96:     74 20 62 65 20 72 75 6e 20 69 6e 20 44 4f 53 20
112:    6d 6f 64 65 2e 0d 0d 0a 24 00 00 00 00 00 00 00
128:    50 45 00 00 4c 01 03 00 91 3f 9a ef 00 00 00 00
144:    00 00 00 00 e0 00 22 00 0b 01 30 00 00 12 00 00

告诉我们:

{
  format: 'PE',pe_header_offset_16le: 128,machine_type: 332,machine_type_object: {
    constant: 'IMAGE_FILE_MACHINE_I386',description: 'Intel 386 or later processors and compatible processors'
  },number_of_sections: 3,timestamp: -275103855,coff_symbol_table_offset: 0,coff_number_of_symbol_table_entries: 0,size_of_optional_header: 224,characteristics_bitflag: 34,characteristics_bitflags: [
    {
      constant: 'IMAGE_FILE_EXECUTABLE_IMAGE',description: 'Image only. This indicates that the image file is valid and can be run. If this flag is not set,it indicates a linker error.',flag_code: 2
    },{
      constant: 'IMAGE_FILE_LARGE_ADDRESS_AWARE',description: 'Application can handle > 2-GB addresses.',flag_code: 32
    }
  ],object_type_code: 267,object_type: 'PE32',linker: { major_version: 48,minor_version: 0 },size_of_code: 4608,size_of_initialized_data: 2048,size_of_uninitialized_data: 0,address_of_entry_point: 12586,base_of_code: 8192,windows_specific: {
    image_base: 4194304,section_alignment: 8192,file_alignment: 512,major_os_version: 4,minor_os_version: 0,major_image_version: 0,minor_image_version: 0,major_subsystem_version: 6,minor_subsystem_version: 0,win32_version: 0,size_of_image: 32768,size_of_headers: 512,checksum: 0,subsystem: {
      constant: 'IMAGE_SUBSYSTEM_WINDOWS_CUI',description: 'The Windows character subsystem',subsystem_code: 3
    },dll_characteristics: 34144,dll_characteristic_flags: [ [Object],[Object],[Object] ]
  },base_of_data: 16384
}

由此,我想也许我找到了我需要的两条信息:

  • 第一个指令字节:windows_specific.size_of_headers (512)
  • RIP 起始值:address_of_entry_point (12586)

但我基本上是猜测。任何更熟悉此元数据的人都可以解释要查看的正确属性以获取我需要的信息吗?

解决方法

Windows 可执行文件以 16 位 DOS 存根开始。文件偏移量 60 处的双字包含 DWORD PE 签名的偏移量,在您的示例中它是 60: 80 00 00 00,即十进制的 128。 PE 签名后紧跟 COFF 文件头(文件偏移 132)。 你可能想用汇编语言的头结构来处理你的十六进制转储。 COFF_FILE_HEADER.Machine132: 4C 01,即 0x14C 表示 32 位可执行文件。在 64 位可执行文件中,它将是 0x8664

文件头后跟COFF 部分头。您对那些在 COFF_SECTION_HEADER.Characteristics 中设置了位 SCN_MEM_EXECUTE=0x2000_0000 的部分感兴趣。

COFF_SECTION_HEADER.PointerToRawData 指定代码开头的文件偏移量。 剖析出从该文件偏移量开始的 .SizeOfRawData 字节,并将该部分代码提交给您的反汇编程序。 请注意,在运行时,代码实际上会映射到 .VirtualAddress,与 .PointerToRawData 不同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res