行业解决方案
查看所有行业解决方案
IDA 用于解决软件行业的关键问题。
发布时间:2026-07-30 09: 48: 00
使用IDA分析SO文件时,全局变量可能只显示成qword_xxx、dword_xxx或没有名称的地址,交叉引用也可能因为符号表被删除、重定位节缺失而无法建立。处理“IDA逆向SO文件时如何恢复全局变量IDA逆向SO文件时重定位信息缺失怎么办”时,需要先确认变量所在段,再结合读写指令、GOT表、调用关系和运行地址恢复类型与引用。
一、IDA逆向SO文件时如何恢复全局变量
SO中的全局变量通常位于.data、.bss、.rodata或GOT相关区域。恢复时应先定位存储位置,再判断数据宽度和用途。
1、从段窗口查找全局数据
①使用IDA打开SO文件,等待自动分析完成。
②点击【视图】→【打开子视图】→【段】,查看.data、.bss、.rodata、.got和.got.plt等区域。
③双击目标段,进入对应地址范围。
④观察其中是否存在指针、整数、字符串地址或连续的数据结构。
⑤将光标放在可疑地址上,按X键查看交叉引用。
⑥进入引用位置,确认代码对该地址执行读取、写入还是取地址操作。
.data通常保存已经初始化的可写数据,.bss通常对应运行时清零的未初始化数据,.rodata主要保存只读常量。GOT中的表项则可能在加载时由动态链接器填写实际地址。
2、根据读写指令恢复变量类型
①进入引用全局地址的函数。
②查看访问该地址的指令宽度。
③读取1字节时,可以先按char或bool检查。
④读取4字节时,可以先按int、unsigned int或浮点数检查。
⑤读取8字节时,需要判断它是long、指针还是64位整数。
⑥返回全局地址,将光标放在变量上,按Y键打开【设置类型】。
⑦输入确认后的类型并重新按F5查看伪代码。
如果同一地址先被取出,再以固定偏移访问,可以将它设置成结构体指针。结构体需要先在【本地类型】中建立,再把全局变量设置为对应类型。
3、恢复变量名称和结构
①查看该变量的全部交叉引用。
②记录写入变量的初始化函数。
③检查读取位置中的条件判断、循环和函数参数。
④根据用途按N键重新命名,例如g_config、g_state或g_context。
⑤连续地址被按照固定间隔访问时,在【本地类型】中建立结构体。
⑥返回变量位置,按Y键应用结构体或结构体指针类型。
命名时应根据实际用途逐步确认,不要看到变量被多处读取就直接判断为全局配置。
二、IDA逆向SO文件时重定位信息缺失怎么办
ELF共享对象通常通过.rel.dyn、.rela.dyn、.rel.plt或.rela.plt保存重定位信息。相关内容被删除后,IDA可能无法自动识别GOT表项、指针和数据交叉引用。
1、确认重定位节是否存在
①打开【段】窗口。
②搜索名称中包含.rel或.rela的段。
③检查是否存在.rel.dyn、.rela.dyn、.rel.plt或.rela.plt。
④打开【导入项】窗口,确认外部符号是否仍能正常显示。
⑤检查.dynsym和.dynstr是否存在。
⑥重定位节和动态符号表均缺失时,记录当前SO可能经过符号裁剪或重新打包。
如果能够找到同版本、同架构且未经裁剪的SO,应优先使用该文件重新建立数据库,再把函数名和变量类型迁移到当前分析文件。
2、手动恢复地址引用
①在反汇编中找到疑似地址常量。
②确认该数值落在SO的代码段或数据段范围内。
③将光标放在地址操作数上,按O键转换为偏移。
④双击转换后的地址,检查能否跳转到目标变量。
⑤在目标地址按X键,确认数据交叉引用已经生成。
⑥目标位置仍显示未定义数据时,按D键创建对应宽度的数据。
将普通数值转换为偏移后,IDA可以据此建立数据引用;操作数没有被识别为偏移时,即使数值指向有效地址,也可能不会生成交叉引用。
3、处理ARM和ARM64的组合地址
①在ARM64代码中查找连续的ADRP和ADD、LDR指令。
②确认这些指令是否共同计算同一个全局地址。
③跟踪最终寄存器指向的数据位置。
④在ARM32代码中检查LDR文字池和GOT基址计算。
⑤确认地址后,将相关操作数转换为偏移。
⑥返回F5伪代码,检查全局变量是否已经替代原来的地址运算。
单独修改某一条指令可能无法恢复完整引用,需要把页面地址、低位偏移和最终内存访问结合起来判断。
三、恢复后如何验证全局变量是否正确
完成变量类型和重定位引用修复后,还要确认静态地址与运行时地址一致,避免把普通常量误认为全局变量。
1、检查静态交叉引用
①在全局变量位置按X键。
②确认引用来源位于有效函数范围内。
③分别检查读取位置和写入位置。
④进入初始化函数,观察变量第一次写入的数值。
⑤进入使用函数,确认变量类型与实际操作一致。
⑥发现引用目标错误时,取消原有偏移后重新转换。
2、结合运行地址验证
①动态附加目标进程。
②在【模块】窗口记录SO运行基址。
③使用“运行基址加变量相对偏移”计算变量实际地址。
④跳转到实际地址,查看内存中的数值。
⑤执行相关功能,观察变量是否按预期变化。
⑥运行结果一致后,再保存变量名称和类型。
总结
处理“IDA逆向SO文件时如何恢复全局变量IDA逆向SO文件时重定位信息缺失怎么办”时,可以先从数据段和GOT区域定位可疑地址,再结合读写宽度、交叉引用和初始化逻辑恢复变量类型。重定位信息缺失时,需要检查动态符号表,手动把地址操作数转换为偏移,并处理ARM架构中的组合地址计算。完成恢复后,还要结合运行基址验证变量的实际数值。希望本文对大家恢复SO全局变量和处理重定位缺失问题有所帮助。
展开阅读全文
︾