《Android软件安全权威指南》原生程序分析 阅读笔记

编程入门 行业动态 更新时间:2024-10-26 09:26:01

《Android软件安全<a href=https://www.elefans.com/category/jswz/34/1769595.html style=权威指南》原生程序分析 阅读笔记"/>

《Android软件安全权威指南》原生程序分析 阅读笔记

工具

NDKToolchain

是一套工具集,比如elf,READELF -l/-S可以查看Program Header Table与Section Header Table。-e参数为查看elf所有的文件头信息。

OBJDUMP -p查看Program Header Table,-x查看所有文件头信息。-d命令用于反汇编ELF并查看汇编代码。-t查看符号表,-r查看重定位。
ida的view->open subview->proximity xxx,可以看到函数大致流程比如:

然后修改文件可以使用给文件打补丁的方式,edit->patch program->assemble,因为IDA pro不支持AArch64架构汇编,要使用插件,Keypatch插件。

编译原生C程序

for循环

通常,for循环语句开始处调整指令的比较条件是for循环的终止条件,跳转指令与跳转地址之间的指令为for循环的循环体。
一种快速分析for循环的方法是查看函数末尾无条件跳转指令,它的跳转目的地址就是for循环的开头。

C++逆向

下面是一段经过f5的代码。

方法指针转换成void*指针,占用字节数与平台相关,ARM中4字节,AArch64为8字节,var_type1与var_type2表示各种类型的字段。
通过C++对象模型代码知道,开头指针是类的方法指针列表。保存雷电虚方法列表,在代码中用vtable表示,下面则是雷电方法与字段。
C++类遵循以下准则。

  • 由new()完成类大小字节的内存空间申请。
  • 执行当前类初始化方法。
  • 如果由父类,则在初始化方法中对基类的vtable与成员变量初始化。
  • 入宫父类包含父类,进一步初始化,知道所有父类被初始化。
  • 初始化当前类的vtable与成员变量。
  • 初始化完成后,访问vtable中指针调用当前类的虚方法。
    所以:



C++的RTTI

RTTI是Run-Time Type Identification,运行时类型信息。提供:
typeid操作符:返回指针和引用所指的实际类型。
dynamic_cast操作符:将基类类型的指针或引用安全地转换为派生类型的引用或者指针。

更多推荐

《Android软件安全权威指南》原生程序分析 阅读笔记

本文发布于:2023-07-01 17:49:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/979047.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:权威   笔记   指南   程序   软件

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!