首页
社区
课程
招聘
[原创] IDA 调试 Android so 时在 init、initarray 处下断插件
发表于: 2017-12-10 21:13 3844

[原创] IDA 调试 Android so 时在 init、initarray 处下断插件

2017-12-10 21:13
3844

前言

github地址:960K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6D9K9U0V1@1x3o6V1K6i4K6u0r3d9f1c8m8b7h3&6V1M7X3!0A6k6p5u0J5k6h3q4C8M7r3!0A6L8Y4b7`.
代码部分参考 freakish 大神的IDA脚本:https://bbs.pediy.com/thread-222998.htm
和 freakish 大神脚本的区别:

  1. freakish 的脚本是在 .rodata section 寻找字符串,找交叉引用,这种方式在 section 表被抹掉的时候就无效了。因此,插件的下断方式通过读取 so 文件头找到 init 函数位置。
  2. 插件下断方式分静态分析的时候和静态分析的时候,静态时通过读 so 文件头进行下断,动态的方式和 freakish 的脚本一样,这种方式有可能根据Android 版本的不同而不同,有可能需要改寻找 bytecode 的特征码。

安装

首先确保安装有 IDAPython
把 AndroidBreakpoint.py 复制到 IDA 安装目录下的 plugin 目录下

用法

在打开 so 文件的前提下,直接在 Edit->AndroidBreakpoint 点击对应的函数进行下断
图片描述


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 7156
活跃值: (9984)
能力值: ( LV17,RANK:797 )
在线值:
发帖
回帖
粉丝
2
感动,有脚本了~
2017-12-11 01:53
0
雪    币: 15947
活跃值: (7193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
别人是在libart.so或 linker 中查找特征码,而  libart.so及 linker 是安卓系统文件一般是不可能抹掉  section  表的。
2017-12-11 08:23
0
雪    币: 4576
活跃值: (2211)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
支持 
2017-12-11 08:52
0
雪    币: 3757
活跃值: (1757)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
5
tDasm 别人是在libart.so或 linker 中查找特征码,而  libart.so及 linker 是安卓系统文件一般是不可能抹掉  sec ...
如果处在调试模式下,IDA  只会反编译程序运行处的汇编代码,自然也不会有交叉引用,所以调试模式下在  .rodata  里找交叉引用是不行的

调试模式下的代码我和他是基本一样的,只不过我的基于  dalvik  虚拟机,他基于  art

2017-12-11 10:17
0
雪    币: 15947
活跃值: (7193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
梦野间 如果处在调试模式下,IDA 只会反编译程序运行处的汇编代码,自然也不会有交叉引用,所以调试模式下在 .rodata 里找交叉引用是不行的 调试模式下的代码我和他是基本一样的,只不过我的基于 da ...
仔细看了原文,发现的确是你说的搜索反汇编指令的特征字符串,那就不科学了。应该采用搜索内存特征码(不依赖反汇编)方式。
2017-12-11 10:42
0
游客
登录 | 注册 方可回帖
返回