应用安全 --- IDA Pro脚本 之 批量导出反编译和反汇编

news/2025/9/23 6:50:06/文章来源:https://www.cnblogs.com/GKLBB/p/19106488

应用安全 --- IDA Pro脚本 之 批量导出反编译和反汇编

import idc
import idaapi
import idautils
import os
import redef sanitize_filename(name, max_length=100):"""清理文件名,移除非法字符并限制长度"""# 移除或替换非法字符name = re.sub(r'[<>:"/\\|?*]', '_', name)# 移除多余的下划线name = re.sub(r'_+', '_', name)# 限制长度if len(name) > max_length:name = name[:max_length]# 确保文件名不为空if not name or name.isspace():name = "unknown_function"return name.strip()def export_complete_function_info(output_dir="exported_functions"):"""
    导出所有函数的反汇编和反编译代码(修复文件名问题)"""
    print(f"开始导出函数信息到目录: {output_dir}")# 创建输出目录(确保路径存在)try:if not os.path.exists(output_dir):os.makedirs(output_dir, exist_ok=True)print(f"目录已创建: {os.path.abspath(output_dir)}")except Exception as e:print(f"创建目录失败: {e}")# 使用当前目录作为备选output_dir = "."print(f"使用当前目录: {os.path.abspath(output_dir)}")# 获取函数列表functions = list(idautils.Functions())total_functions = len(functions)print(f"找到 {total_functions} 个函数")exported_count = 0hexrays_available = False# 检查Hex-Rays反编译器是否可用try:import ida_hexrayshexrays_available = Trueprint("Hex-Rays反编译器可用")except:print("Hex-Rays反编译器不可用,仅导出反汇编代码")for i, func_ea in enumerate(functions):func_name = idc.get_func_name(func_ea)# 创建安全的文件名safe_name = sanitize_filename(func_name)filename = f"{safe_name}_{func_ea:08X}.txt"filepath = os.path.join(output_dir, filename)# 进一步确保文件路径不会太长if len(filepath) > 200:# 如果路径太长,使用更短的文件名filename = f"func_{func_ea:08X}.txt"filepath = os.path.join(output_dir, filename)try:# 确保目录存在(再次检查)os.makedirs(os.path.dirname(filepath), exist_ok=True)with open(filepath, 'w', encoding='utf-8', errors='ignore') as f:# 写入函数基本信息f.write(f"函数名称: {func_name}\n")f.write(f"起始地址: 0x{func_ea:08X}\n")# 获取函数对象func = idaapi.get_func(func_ea)if func:f.write(f"结束地址: 0x{func.end_ea:08X}\n")f.write(f"函数大小: {func.end_ea - func.start_ea} 字节\n")f.write("\n" + "="*70 + "\n")f.write("反汇编代码 (包含地址信息):\n")f.write("="*70 + "\n\n")# 导出反汇编代码if func:ea = func.start_eawhile ea < func.end_ea and ea != idc.BADADDR:if idc.is_code(idc.get_full_flags(ea)):# 获取地址和反汇编指令address = f"0x{ea:08X}"disasm = idc.GetDisasm(ea)# 获取注释comment = idc.get_cmt(ea, 0)if comment:f.write(f"{address}: {disasm:<50} // {comment}\n")else:f.write(f"{address}: {disasm}\n")# 移动到下一条指令next_ea = idc.next_head(ea, func.end_ea)if next_ea == idc.BADADDR or next_ea <= ea:breakea = next_ea# 导出反编译代码(如果可用)if hexrays_available:f.write("\n" + "="*70 + "\n")f.write("反编译代码 (Hex-Rays):\n")f.write("="*70 + "\n\n")try:cfunc = ida_hexrays.decompile(func_ea)if cfunc:f.write(str(cfunc))else:f.write("// 反编译失败\n")except Exception as e:f.write(f"// 反编译错误: {str(e)}\n")else:f.write("\n// Hex-Rays反编译器不可用\n")exported_count += 1if i % 100 == 0:  # 每100个函数打印一次进度print(f"进度: {i+1}/{total_functions}")except Exception as e:print(f"导出函数 {func_name} 时出错: {str(e)}")# 尝试使用更简单的文件名try:simple_filename = f"func_{func_ea:08X}.txt"simple_filepath = os.path.join(output_dir, simple_filename)with open(simple_filepath, 'w', encoding='utf-8', errors='ignore') as f:f.write(f"函数名称: {func_name}\n地址: 0x{func_ea:08X}\n")f.write(f"原始文件名过长,使用简化文件名保存\n")print(f"使用简化文件名成功保存: {simple_filename}")exported_count += 1except Exception as e2:print(f"简化文件名也失败: {e2}")print(f"导出完成! 成功导出 {exported_count}/{total_functions} 个函数")print(f"文件保存在: {os.path.abspath(output_dir)}")# 在IDA输出窗口显示完成信息idc.msg(f"\n函数导出完成: {exported_count}/{total_functions} 个函数已导出到 {output_dir}\n")# 简化版本:只使用地址作为文件名
def export_simple_version(output_dir="simple_export"):"""使用简化文件名导出,避免路径过长问题"""print("使用简化版本导出...")if not os.path.exists(output_dir):os.makedirs(output_dir, exist_ok=True)functions = list(idautils.Functions())exported_count = 0for func_ea in functions:func_name = idc.get_func_name(func_ea)filename = f"func_{func_ea:08X}.txt"filepath = os.path.join(output_dir, filename)try:with open(filepath, 'w', encoding='utf-8', errors='ignore') as f:f.write(f"Function: {func_name}\n")f.write(f"Address: 0x{func_ea:08X}\n\n")func = idaapi.get_func(func_ea)if func:f.write("Disassembly:\n")f.write("-" * 50 + "\n")ea = func.start_eawhile ea < func.end_ea:if idc.is_code(idc.get_full_flags(ea)):disasm = idc.GetDisasm(ea)f.write(f"0x{ea:08X}: {disasm}\n")next_ea = idc.next_head(ea, func.end_ea)if next_ea == idc.BADADDR:breakea = next_eaexported_count += 1except Exception as e:print(f"导出失败 {func_name}: {e}")print(f"简化版本导出完成: {exported_count} 个函数")# 立即执行导出(使用修复版本)
if __name__ == "__main__":# 先尝试完整版本try:export_complete_function_info("exported_functions")except Exception as e:print(f"完整版本失败: {e}")print("尝试简化版本...")export_simple_version("simple_export")

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内最大的c2c网站企业网站关键词优化排名应该怎么做

前言 闲来无事在家偶然翻到了之前整理的文档和面试要做到准备路线&#xff0c;虽然内容有点多&#xff0c;但是技多不压身&#xff0c;多多益善 本部分内容是关于Android进阶的一些知识总结&#xff0c;涉及到的知识点比较杂&#xff0c;不过都 是面试中几乎常问的知识点&…

内蒙古网站建设百度怎么优化整站

一、概念 java.util.Properties 继承于Hashtable &#xff0c;来表示一个持久的属性集。它使用键值结构存储数据&#xff0c;每个键及其对应值都是一个字符串。该类也被许多Java类使用&#xff0c;比如获取系统属性时&#xff0c;System.getProperties 方法就是返回一个Proper…

上海网站建设lv cn长兴县城乡建设局网站

给定一个由 0 和 1 组成的矩阵 mat &#xff0c;请输出一个大小相同的矩阵&#xff0c;其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 输入&#xff1a;mat [[0,0,0],[0,1,0],[0,0,0]] 输出&#xff1a;[[0,0,0],[0,1,0],[0,0,0]] 输入…

网站开发需要多少钱推荐网站站内搜索怎么做

简述Python 中的每个值都有一个数据类型。在 Python 编程中&#xff0c;一切&#xff08;万物&#xff09;皆对象&#xff0c;数据类型实际上是类&#xff0c;变量是这些类的实例&#xff08;对象&#xff09;。简述数据类型Number数字String字符串List列表Tuple元组Set集合Dic…

什么样的网站需要数据库河南省和建设厅网站

&#x1f680; Altman确认&#xff1a;神秘Chatbot非GPT-4.5&#xff0c;OpenAI搜索引擎即将上线 摘要&#xff1a;近日&#xff0c;Sam Altman在哈佛大学的演讲中确认&#xff0c;引发广泛猜测的gpt2-chatbot并非OpenAI即将发布的下一代模型GPT-4.5。与此同时&#xff0c;关于…

新安网站建设免费seo推广软件

prettier风格配置 官网&#xff1a;https://prettier.io Eslint&#xff1a;代码纠错&#xff0c;关注于规范 prettier&#xff1a;专注于代码格式化的插件&#xff0c;让代码更加美观 两者各有所长&#xff0c;配合使用优化代码 生效前提&#xff1a; 1&#xff09;禁用…

简约型网站手机外贸网站建设

Ⅰ gets() 函数 gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间 # include <stdio.h> int main(void) {char a[256] {0};gets(a);printf("%s",a);return 0; }Ⅱ getchar() # include <stdio.h> int mai…

做塑胶材料的网站公司辞退员工补偿标准2023

一、 电路设计 本周主要工作是在项目上&#xff0c;抽空做了一个跟本课题相关的电路板&#xff0c;之前用开发板来做测试&#xff0c;MPU6050和QMC5883L都是用杜邦线连接的&#xff0c;导致接线很乱&#xff0c;也不美观&#xff0c;当然也不符合“捷联”的定义。   下面是电…

课程网站建设发展趋势网站制作中文版

题目类型 链表反转 题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点&#xff0c;且必须在不修改节点内部的值的情况下完成本题&#xff0c;即&#xff1a;只能进行节点交换 效果图 题目分析 如果原始顺序是 dummy(虚拟头节点) …

电商网站设计模板dw网站可以随便创建么

CrossOver 24是一款可以让mac用户能够自由运行和游戏windows游戏软件的虚拟机类应用&#xff0c;虽然能够虚拟windows但是却并不是一款虚拟机&#xff0c;也不需要重启系统或者启动虚拟机&#xff0c;类似于一种能够让mac系统直接运行windows软件的插件。它以其出色的跨平台兼容…

做个商城网站多少钱php网站后台教程

目录 一、HttpClient 1. 介绍 2. 入门案例 1 导入依赖(已有) 2 GET方式请求 2 POST方式请求 二、微信小程序开发 1. 介绍 2. 准备工作 1 注册小程序获取AppID 注册小程序 完善小程序信息 2 下载并安装开发者工具 3 设置小程序开发者工具(必做) 3. 入门案例 1 小…

三合一网站管理系统济南网站app开发

1、 答疑:【解析】分布式数据库系统按不同层次提供的分布透明性有:分片透明性;②位置透明性;③局部映像透明性&#xff0c;位置透明性是指数据分片的分配位置对用户是透明的&#xff0c;用户编写程序时只需 要考虑数据分片情况&#xff0c;不需要了解各分片在各个场地的分配情…

网站开发与应用就业方向网站备案是针对空间还是域名

简介&#xff1a; 女娲是飞天分布式系统中提供分布式协同的基础服务&#xff0c;支撑着阿里云的计算、网络、存储等几乎所有云产品。在女娲分布式协同服务中&#xff0c;一致性引擎是核心基础模块&#xff0c;支持了Paxos&#xff0c;Raft&#xff0c;EPaxos等多种一致性协议&a…

做空闲时间的网站dedecms使用教程

目录 一、概述什么是数据标准数据标准的作用什么是数据标准化数据标准的意义业务方面技术方面管理方面 二、数据标准管理的内容数据模型标准基础数据标准主数据和参考数据标准指标数据标准 三、数据标准管理流程数据标准梳理数据标准制定数据标准审查数据标准发布数据标准贯彻 …

读人形机器人20财富再分配

读人形机器人20财富再分配1. 全民基本收入 1.1. 随着机器人和AI系统接管从制造业到服务业的各种任务,许多传统工作面临淘汰 1.2. 机器人驱动型经济的到来带来了前所未有的生产力和效率 1.3. 随着经济向自动化过渡,社…

Java 与人工智能的深度融合:从数据到推理服务

一、引言 人工智能(AI)与机器学习(ML)已经成为推动产业升级与社会变革的重要引擎。虽然 Python 是学术界与研究人员的首选,但在 大规模工程落地、企业级应用、生产环境部署 中,Java 依然扮演着关键角色。凭借其 …

Java 与大数据实时处理:Kafka、Flink 与企业应用

一、引言 在互联网、金融、电商、物联网等行业,实时数据处理 已经成为刚需。用户行为日志、交易流水、传感器数据、监控日志,每一秒都在产生海量信息。如何对这些数据进行 毫秒级采集、分析和决策,直接决定了业务的…

Java 与企业级中间件:消息、缓存与数据库集成

一、引言 企业级应用离不开 中间件。无论是金融、电商、物流,还是政务、医疗系统,都需要通过 消息队列(MQ)实现异步解耦、缓存系统保障高性能、数据库集成支撑核心数据存储。Java 作为企业开发的主力语言,与这些中…

儿童网站模板阿里云 win wordpress 伪静态

接口与实现 接口 为了克服Java单继承的缺点&#xff0c;Java使用了接口&#xff0c;一个类可以实现多个接口。 使用关键字interface来定义一个接口。接口的定义和类的定义很相似&#xff0c;分为接口的声明和接口体。 接口通过使用关键字interface来声明 interface Printab…

青岛做网站皆赴青岛博采网络做效果图展板网站

基于web的花店销售系统的设计与实现(论文13000字)摘要&#xff1a;本系统是一个相对简单的基本应用系统&#xff0c;主要满足传统的花店运营需要&#xff0c;将自己的销售渠道扩展到网上&#xff0c;通过简单的管理&#xff0c;提供给最终消费者产品的展现、购物、订单处理等实…