Ida双开定位android so文件
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双开的意义所在:静态帮助动态定位函数地址,动态帮助静态获取运行时信息。
Ida双开定位android so文件的更多相关文章
- IDA调试android so文件.init_array和JNI_OnLoad
我们知道so文件在被加载的时候会首先执行.init_array中的函数,然后再执行JNI_OnLoad()函数.JNI_Onload()函数因为有符号表所以非常容易找到,但是.init_array里的 ...
- IDA动态调试Android的DEX文件
Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试 ...
- Android so文件进阶 <一>
0x00 前言 最近一段时间在弄android方面的东西,今天有人发了张截图,问:在要dump多大的内存? 一时之间我竟然想不起来ELF文件的哪个字段表示的是文件大小,虽然最后给出了解决方法,I ...
- 在Android so文件的.init、.init_array上和JNI_OnLoad处下断点
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/54233552 移动端Android安全的发展,催生了各种Android加固的诞生, ...
- Android.mk文件语法规范 原文
序言:------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件.为了明白下面的内容,你必须已经阅读 ...
- Android NDK开发之Android.mk文件
Android NDK开发指南---Android.mk文件 博客分类: Android NDK开发指南 Android.mk文件语法详述 介绍: ------------ 这篇文档是用来描述你的 ...
- 【Android】日常开发android.jar文件中十五个重要的包概述
简述Android项目中android.jar文件里包含较为重要的15个系统编译后的class文件 android.app:提供高层的程序模型,提供基本的运行环境android.content:包含各 ...
- Android 虚拟机Dalvik、Android各种java包功能、Android相关文件类型、应用程序结构分析、ADB
Android虚拟机Dalvik Dalvik冲击 随着Google 的AndroidSDK 的发布,关于它的API 以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举.不过,其中的一个话题在J ...
- Android.mk文件语法规范及使用模板
Android.mk文件语法详述 介绍:------------这篇文档是用来描述你的C或C++源文件中Android.mk编译文件的语法的,为了理解她们我们需要您先看完docs/OVERVIEW.h ...
随机推荐
- Azure ARM (3) ARM支持的服务类型
<Windows Azure Platform 系列文章目录> 我们在使用ARM创建资源的时候,首先要确认哪些Azure服务,支持ARM模式. 具体内容,我们可以参考连接:https:// ...
- 使用MVVM-Sidekick开发Universal App(二)
上一篇文章已经建立了基本的实体类,并且搞定了多语言的问题,以后在app里用字符串的时候就可以从资源文件中取了.现在继续进行. 一.添加一个页面 CurrencyExchanger首页是一个货币兑换的列 ...
- 利用chrome调试JavaScript代码
看见网上很多人问怎么用chrome调试JavaScript代码,我也对这个问题抱着疑问,但是没有找到一篇能用的中文文章(可能我的google有问题),也不知道怎么点出一篇E文的,感觉作者写得不错,所以 ...
- MVC之前的那点事儿系列
MVC之前的那点事儿系列,是笔者在2012年初阅读MVC3源码的时候整理的,主要讲述的是从HTTP请求道进入MVCHandler之前的内容,包括了原创,翻译,转载,整理等各类型文章,当然也参考了博客园 ...
- Net重温之路一
简述: 最简单的 Hello World 准备: 工具:VS2013 + SqlServer 2008 R2 我们将以.NET Framework 4.5 为基准 开始: 一:新建解决方案 > ...
- jquery更改加载图片大小
<script type="text/javascript"> $("img").css("width","80%&q ...
- Service随系统启动运行
Android系统启动时,会发出android.intent.action.BOOT_COMPLETED广播,定义一个类继承自BroadcastReceiver,监听该广播,并在收到该广播时启动Ser ...
- [javaSE] 反射-方法的反射
1.如何获取某个方法 方法的名称和方法的参数列表才能唯一决定一个方法 2.方法反射的操作 method.invoke(); package com.tsh.reflect; import java.l ...
- 【thinkphp5】【THINKCMG】标签部分开发(一)
最近打算开一个自己的CMS后台轮子,框架选择了thinkphp 5 (别问我为什么选择这个框架)然后想边开发边记录一下,方便自己方便他人 进入正题 1.数据库设计 一共三张表 post文章表这个就不贴 ...
- Discuz网站建站运营必备插件
Discuz界面功能完善,对开发者友好,拥有丰富的插件资源,能够高度定制属于自己风格的论坛服务.但是在拥有近四千个插件的Discuz应用中心,小白站长该如何挑选合适的插件来优化自己的网站呢? 楼主 ...