【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 反汇编二进制机器码 | 打印反汇编数据 )

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 反汇编二进制机器码 | 打印反汇编数据 )

文章目录

一、反汇编二进制机器码

二、打印反汇编数据





一、反汇编二进制机器码


在创建 Capstone 实例对象 , 并设置 detail 属性为 True ;


在之前读取了 节区 二进制数据 , 这些数据就是需要反汇编的机器码数据 ;


调用 反汇编解析器 的 disasm 方法 , 向汇编解析器中传入 节区数据 对应的 二进制数据 , 这些二进制数据都是机器码数据 , 即 , 需要反汇编这些二进制数据为 汇编 代码 ;


第一个参数设置二进制数据 ;

第二个参数指的是读取 raw 二进制数据的起始地址 , 一般设置 0 即可 ;

调用 反汇编解析器 的 disasm 方法 , 得到的是反汇编后的汇编代码列表 , 如果反汇编失败 , 此处为空 ;



         

# 读取 节区 二进制数据
            #   这是需要反汇编的机器码数据
            raw = file.read(sh_size)
            # 创建 Capstone 实例对象
            capstone = Cs(CS_ARCH_X86, CS_MODE_32)
            # 此处设置为 true , 表示需要显示细节 , 打开后 , 会标明每条汇编代码中对寄存器的影响
            #   如 : 本条汇编代码中 , 会读写哪些寄存器
            capstone.detail = True
            # 向汇编解析器中传入 节区数据 对应的 二进制数据 , 这些二进制数据都是机器码数据
            #   即 , 需要反汇编这些二进制数据为 汇编 代码
            # 第一个参数设置二进制数据
            # 第二个参数指的是读取 raw 二进制数据的起始地址 , 一般设置 0 即可
            # 得到的是反汇编后的汇编代码列表 , 如果反汇编失败 , 此处为空
            disasm = capstone.disasm(raw, 0)






二、打印反汇编数据


调用 反汇编解析器 的 disasm 方法 , 得到的是反汇编后的汇编代码列表 ;


遍历该汇编代码列表 , 可以得到该行汇编代码对应的 汇编代码 ;


要打印的结果如下 :


00000000: push ebx                                     ; 读寄存器:esp. 写寄存器:esp ; 机器码 :53


在开始位置打印汇编代码地址 , 然后是 汇编指令 , 操作对象 ;


之后将汇编代码 读取的寄存器 , 写出的寄存器 打印出来 ;


最后打印出该行汇编代码对应的机器码 ;



打印汇编代码 :


         

# 遍历反汇编代码列表
            for line in disasm:
                # 打印每行汇编代码的 地址 , 指令 , 操作对象
                text = '%08X: %s %s ' % (line.address, line.mnemonic, line.op_str)
                # 统计汇编代码行的字符串个数 , 保证在第 55 字节处打印寄存器读写信息
                # 00000000: push ebx                                     ; 读寄存器:esp 写寄存器:esp ; 机器码 :53
                length = len(text)
                if length < 55:
                    text += ' ' * (55 - length)
                text += ';'
                # 读取操作影响到的寄存器
                if hasattr(line, 'regs_read') and len(line.regs_read) > 0:
                    text += ' 读寄存器:'
                    for j, r in enumerate(line.regs_read):
                        if j > 0:
                            text += ','
                        text += '%s' % line.reg_name(r)
                # 写出操作影响到的寄存器
                if hasattr(line, 'regs_write') and len(line.regs_write) > 0:
                    text += ' 写寄存器:'
                    for j, r in enumerate(line.regs_write):
                        if j > 0:
                            text += ','
                        text += '%s' % line.reg_name(r)
                text += ' ; 机器码 :'
                # 打印 本条汇编代码对应的 机器码
                for i in range(line.size):
                    text += '%02X ' % line.bytes[i]
                # 打印最终数据
                print(text)


分析 打印结果 :


该操作是 入栈操作 , 肯定会影响到 esp 栈寄存器 ; 该汇编代码对应的机器码是 0x53 ;
00000000: push ebx                                     ; 读寄存器:esp. 写寄存器:esp ; 机器码 :53


下面的汇编代码 , 调用 0xab , 会读取 esp,eip 寄存器 , 写出 esp 寄存器 ;


00000001: call 0xab                                    ; 读寄存器:esp,eip. 写寄存器:esp ; 机器码 :E8 A5 00 00 00  


目录
打赏
0
0
0
0
39
分享
相关文章
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
187 4
JSON数据解析实战:从嵌套结构到结构化表格
Bilibili直播信息流:连接方法与数据解析
本文详细介绍了自行实现B站直播WebSocket连接的完整流程。解析了基于WebSocket的应用层协议结构,涵盖认证包构建、心跳机制维护及数据包解析步骤,为开发者定制直播数据监控提供了完整技术方案。
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
67 4
【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
本文介绍小红书官方API——`smallredbook.item_get_video`的功能与使用方法。该接口可获取笔记视频详情,包括无水印直链、封面图、时长、文本描述、标签及互动数据等,并支持电商场景分析。调用需提供`key`、`secret`和`num_iid`参数,返回字段涵盖视频链接、标题、标签及用户信息等。同时,文章提供了电商实战技巧,如竞品监控与个性化推荐,并列出合规注意事项及替代方案对比。最后解答了常见问题,如笔记ID获取与视频链接时效性等。
深度解析淘宝商品详情API接口:解锁电商数据新维度,驱动业务增长
淘宝商品详情API接口,是淘宝开放平台为第三方开发者提供的一套用于获取淘宝、天猫等电商平台商品详细信息的应用程序接口。该接口涵盖了商品的基本信息(如标题、价格、图片)、属性参数、库存状况、销量评价、物流信息等,是电商企业实现商品管理、市场分析、营销策略制定等功能的得力助手。
如何高效爬取天猫商品数据?官方API与非官方接口全解析
本文介绍两种天猫商品数据爬取方案:官方API和非官方接口。官方API合法合规,适合企业长期使用,需申请企业资质;非官方接口适合快速验证需求,但需应对反爬机制。详细内容涵盖开发步骤、Python实现示例、反爬策略、数据解析与存储、注意事项及扩展应用场景。推荐工具链包括Playwright、aiohttp、lxml等。如需进一步帮助,请联系作者。
淘宝商品评论API接口系列的应用与数据解析
在电商平台中,用户评论是了解商品质量、服务水平和用户满意度的重要数据来源。淘宝作为中国最大的电商平台,提供了商品评论API接口,帮助开发者获取和分析用户评价数据。本文将介绍淘宝商品评论API接口系列的作用、使用方法,并通过示例展示如何调用API并解析返回的JSON数据。
Python爬取某云热歌榜:解析动态加载的歌曲数据
Python爬取某云热歌榜:解析动态加载的歌曲数据

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等