Ida双开定位的意思是先用ida静态分析so文件,然后再开一个ida动态调试so文件。因为在动态调试中ida并不会对整个动态加载的so文件进行详细的分析,所以很多函数并无法识别出来。比如静态分析中有很多的sub_XXXX函数:

但动态调试中的ida是没有这些信息的。

所以我们需要双开ida,然后通过ida静态分析的内容来定位ida动态调试的函数。当然很多时候我们也需要动态调试的信息来帮助理解静态分析的函数。

在上一节中,我们提到.init.array中有个sub_2378(),但当ida动态加载so后我们并无法在module中找到这个函数。那该咋办呢?这时候我们就要通过静态分析的地址和so文件在内存中的基址来定位目标函数。首先我们看到sub_2378()这个函数在静态分析中的地址为.text:00002378。而在动态加载中这个so在内存中的基址为:4004F000。

因此sub_2378()这个函数在内存中真正的地址应该为4004F000 + 00002378 =40051378。下面我们在动态调试窗口输入”g”,跳转到40051378这个地址。然后发现全是乱码的节奏:

不要担心,这是因为ida认为这里是数据段。这时候我们只要按”P”或者选中部分数据按”c”,ida就会把这段数据当成汇编代码进行分析了:

我们随后还可以按”F5”,将汇编代码反编译为c语言。

是不是和静态分析中的sub_2378()长的差不多?

我们随后可以在这个位置加入断点,再结合上一节提到的调试技巧就可以对init.array中的函数进行动态调试了。

我们接下来继续分析自毁程序这道题,当我们在对init.array和JNI_OnLoad()进行调试的时候,发现程序在执行完dowrd_400552B4()后就挂掉了。

于是我们在这里按”F7”进入函数看一下:

原来是libc.so的phread_create()函数,估计是app本身开了一个新的线程进行反调试检测了。

有意思的是在静态分析中我们并不清楚dword_62B4这个函数是做什么的,因为这个函数的地址在.bss段还没有被初始化:

但是当我们动态调试的时候,这个地址的值已经修改为了phread_create()这个函数的地址了。:

所以说自毁程序密码这个app会用pthread_create()开一个新的线程对app进行反调试检测。线程会运行sub_16A4()这个函数。于是我们对这个函数进行分析,发现里面的内容有大量的混淆,看起来十分吃力。这里我介绍个小trick:常见的反调试方法都会用fopen打开一些文件来检测自己的进程是否被attach,比如说status这个文件中的tracerpid的值是否为0,如果为0说明没有别的进程在调试这个进程,如果不为0说明有程序在调试。所以我们可以守株待兔,在libc.so中的fopen()处下一个断点,然后我们在hex view窗口中设置数据与R0的值同步:

这样的话,当函数在fopen处停住的时候我们就能看到程序打开了哪些文件。果不其然,程序打开了/proc/[pid]/status这个文件。我们”F8”继续执行fopen函数,看看返回后的地址在哪。然后发现我们程序卡在了某个函数中间,PC上面都是数据,PC下面才是汇编。这该咋办呢?

解决办法还是ida双开,我们知道现在PC的地址为40050420,libcrackme.so文件的基址为4004F000。因此这段代码在so中的位置应该是:40050420 - 4004F000 = 1420。因此我们回到ida静态分析界面,就可以定位到我们其实是在sub_130C()这个函数中。于是我们猜测这个函数就是用来做反调试检测的。

因此我们可以通过基址来定位sub_130C()这个函数在内存中的地址:40050420 + 130C = 4005030C。然后我们在4005030C这个地址处按”P”, ida就可以正确的识别整个函数了。

所以说动态调试的时候可以帮我们了解到很多静态分析很难获取到的信息。这也就是ida双开的意义所在:静态帮助动态定位函数地址,动态帮助静态获取运行时信息。

转载于:https://www.cnblogs.com/joey-hua/p/4702824.html

Ida双开定位android so文件相关推荐

  1. 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )

    文章目录 一.使用 IDA 打开 arm 动态库文件 二.切换 IDA 中汇编代码显示样式 一.使用 IDA 打开 arm 动态库文件 分析 Android SDK 中的 arm 架构的动态库 , 动 ...

  2. 未root手机 ida动态调试安卓so文件—— 学习实践 《教我兄弟学Android逆向09 IDA动态破解登陆验证》

    参考: https://www.52pojie.cn/thread-742686-1-1.html https://www.pianshen.com/article/6759779793 本文基本为h ...

  3. Android studio文件定位

    我们在开发Android studio APP的时候,随着项目的越来越大,文件越来越多,而且Android studio RES文件管理最大的缺陷就是文件不能按照自己的风格分类,只能按安卓自带的风格分 ...

  4. [免费专栏] Android安全之Android so文件分析「详细版」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  5. Android.mk文件语法规范

    序言: ------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件. 为了明白下面的内容,你必须已经 ...

  6. android 从文件制定位置读取数据

    今天,简单讲讲android 如何从制定的位置读取文件. 之前,我写了使用FileInputStream使用read(byte[] b)读取文件的博客,每次调用read()时,FileInputStr ...

  7. android ndk 文件管理,Android NDK开发指南(二)Android.mk文件

    http://www.cnblogs.com/yaozhongxiao/archive/2012/03/06/2382225.html 1.  概述 Android.mk文件是用来描述build sy ...

  8. android百度地图定位自定义图标,百度地图SDK集成及根据坐标实现定位(android studio开发)...

    百度地图SDK集成及根据坐标实现定位(android studio开发) 百度地图SDK集成及根据坐标实现定位(android studio开发) 1.下载百度地图SDK 链接:http://lbsy ...

  9. IDA远程调试Android

    IDA远程调试Android ADB 连接安卓设备.(不会ADB参考:http://www.cnblogs.com/ONDragon/p/6841787.html) 把IDA文件夹中dbgsrv目录下 ...

最新文章

  1. 天猫国际618一骑绝尘,占中国跨境进口电商总订单超七成
  2. Cortex-M3基本知识点(手册)
  3. vue --- configureWebpack模拟后台数据
  4. ASP.NET 3.5核心编程学习笔记(55):自定义扩展程序控件的创建
  5. Handler实现数据模板
  6. LeetCode之无重复字符的最长子串
  7. 不会玩游戏的程序员不是好作家,《深入理解Java虚拟机》周志明来了!
  8. 用户空间与内核空间数据交换的方式(1)------debugfs
  9. Java日志框架之JUL(java util logging)详解
  10. 【路径规划】基于matlab自动化拣货最优路径【含Matlab源码 1713期】
  11. 详解Unity中的射线与射线检测
  12. 格拉布斯离群值检验——理论与 Python 实现
  13. 计算机二级没有学院盖章,二级学院盖章.DOC
  14. java应聘面试自我介绍范文
  15. python0不能做除数报错_浅谈pandas dataframe对除数是零的处理
  16. C语言输出一个19行实心菱形,C语言打印菱形
  17. 【机器学习】【Apriori算法-1】Apriori算法原理详解 + 示例展示数学求解过程
  18. 黑暗城堡(最短路径树)
  19. 多态和特殊类 -->特殊类
  20. Qt无边框窗体实现方案

热门文章

  1. mongodb 输出数组字段_JMeter之Groovy对MongoDB操作
  2. 初学者linux和ubuntu,linux初学者也必须知道的几个ubuntu最基础命令
  3. oracle notes,Oracle Notes
  4. 每天一道LeetCode-----数组序列,每个元素的值表示最多可以向后跳多远,计算最少跳多少次可以到达末尾
  5. softmax简单模型处理Mnist分类问题
  6. 8086汇编常用代码总结(个人向),包含换行函数(过程),执行输出,结束程序
  7. DOS系统功能调用表(INT 21H)
  8. C++文件打开模式详解
  9. c语言 指针 数组还能这么用 ?
  10. 防火墙软件测试工资,防火墙的性能测试