使用IDA调试SO脱壳,环境准备及各步骤原理详解

引言

最近在捣鼓移动端的脱壳,虽然目前这方面的教程有挺多的了,但还是走了很多弯路,现在希望把这些内容记录下来帮助有需要的人

环境准备

手机环境

首先请准备一台手机,这台手机需满足以下三个条件:

——必须是真机

——手机系统版本为安卓4.4及之前的系统

——手机已经root

首先解释为什么要是真机,因为模拟器经常会遇见各种各样的问题(亲测)导致有些步骤进行不下去。

关于第二点,因为目前网上能找到的教程都是几年前的,那个时候的安卓系统仍然是用着dvm虚拟机,加载so文件用到的库是libdvm,而5.0以上的系统已经统一使用ART进行加载了,所以如果你用5.0以上系统照着原来的教程做,就会发现做了一半就跟不下去了。再一个就是移动端的壳发展到现在已经更迭了好几代了,一代比一代难脱,要入门最好还是从第一代开始脱。

至于第三点的话,自然就是因为准备环境时需要往手机根目录下放一些文件,或是安装xposed框架。

程序环境

程序的话,自然是要找一个已经加了壳的应用,且这个应用本身不会太复杂,以防反编译的时候出现一些奇奇怪怪的问题。

关于这点,参考这篇文章:https://www.v2ex.com/t/298813

这个链接里有目前几款主流加壳应用的官网地址,在其官网里一般都会有介绍哪些APP使用了他们家的壳,我在其中找到了计算管家这款看起来就很简单的软件。

接下来就是要找到这款软件几年前的版本,在这里可以用PP助手或是安智市场,这两个应用商店都可以下到历史版本的APP。

在这里我使用了在安智下载的计算管家3.1.1版本的APP

操作步骤

放置IDA的APP调试服务器

找到IDA的根目录,进入dbgsrv的子目录下,可以看见有一个名为android_server的文件,这个就是要使用IDA调试so文件所需要的程序。你想啊,我在电脑上怎么才能调试手机上的程序呢?一个方案当然是我在手机上弄一个调试器,但手机屏幕这么小,根本不方便调试,那么最好就是我在手机上这个调试器只提供调试功能,而把操作界面放到电脑上来,而android_server这个文件就是起到这个作用了。

接下来我们需要把这个文件弄到手机根目录下去。在这里我们可以在手机上下个RE管理器或者ES文件管理器(可能有人会说直接用adb

push,但是有些机子,即使已经root了,也会因为各种各样的权限问题导致传不下去),先把文件通过数据线转到手机内置或外置存储卡上,然后使用上述APP将根目录挂载为可读写,然后将这个文件复制过去。在这里你可以任意更改这个文件的名字,也可以放在任意地方(网上有的说放在/data下,有的放在/data/local/tmp下,其实位置并不是固定的),我为了方便运行这个程序,直接放在了根目录下,改名为as,然后通过adb

shell将这个文件权限改为777。

将ro.debuggable的值改为1

为了使用jdb恢复程序的运行,我们需要:

APK的AndroidManifest.xml中debuggable为true

或是根目录下的 ro.debuggable的值为1,如下图所示:

关于这一步怎么做,参考这篇文章:http://blog.csdn.net/feibabeibei_beibei/article/details/52744231文章中提到了4种方法,其中第二种因为壳没脱下来,没办法回编译,更改不了,第三种太麻烦。就只剩下第一种和第四种。

第一种需要安装第xposed,有的手机可能安装不了这个。

就剩下第4种,这种方法因为某种原因也不能在我手机上正确运行,所幸我找到了mprop这个软件的最新版:https://bbs.pediy.com/thread-215311.htm第4种方法因为是修改内存,所以default.prop中的值仍然是原来的,而且重启后要重新运行一次。

以root权限运行android_server

打开手机的usb调试,连接上数据线,在电脑上的cmd里运行adbshell,有的人可能运行不成功,有可能是因为adb被占用的原因(我曾经因为使用了酷狗,一直被它自己的音乐传输后台程序给占用着),进入到shell后,输入su获取root获取,然后./as运行android_server,这里最好用su切换root权限后再运行,以防出现权限不够的情况。

在这里可以看到它在监听端口23946,等着别人来连接它。

进行端口转发

上一步里android_server在监听端口23946,我们可以用adb

forward tcp:23946 tcp:23946这个命令将pc端的23946端口转到手机端的23946,这样ida附加调试的时的地址就只需要填127.0.0.1,即本机地址了。

实际上这一步并不是必要的,只不过如果省略的话,ida附加时要填上手机的IP,这样会比较麻烦。

以调试模式启动应用

使用AndroidKiller打开APK文件进行反编译,可以看到

文件的包名和入口

在命令行里输入如下命令,以调试模式启动APP:

adb shell am start -D -n longbin.helloworld/longbin.helloworld.SplashActivit

命令最末尾那个就是我们APP对应的包名/入口,其他部分不能修改。

使用IDA附加调试

打开一个空的IDA,选择debugger->attach->Remote

ARMLinux/Android debugger,然后在选择debug options里选择suspen on process entry

point,使其断在程序入口点,这里如果进行了端口转发在hostname里填上127.0.0.1,如果没有,就填上手机的IP地址,点击确定之后找到对应的程序,加载。

打开DDMS

这一步也不是必要的,DDMS原本是ecplipse上的一个插件,如果你用的是android

studio,可以用tools->Android->Android Device

Monitor打开它。可以看见,我们要调试的程序出现在了这里(如果没有是因为ro.debuggable没有设置成功),

待调试的程序前面有一个红色的虫子,条目的最后也多了个/8700,这里就是DDMS帮我们进行了端口转发,如果没有打开DDMS,则要自己进行端口转发

adb forward tcp:8700 jdwp:8606

这条命令即把pc端的8700端口转发到手机端的8606端口上(待调试程序占用的端口号是8606)

使用jdb恢复程序运行

最后在命令行中输入:

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

这一步的作用是使程序恢复运行。注意这时候如果ida里还没有点击运行,程序是不会真的继续运行的,这时候就可以正常地在IDA里下断调试了。

这里我对这个程序脱壳的步骤参考:http://blog.csdn.net/jiangwei0910410003/article/details/51620236

最后的话

感觉android端的下断调试远比pc端要繁琐,坑也比较多,而网上的教程大多是只告诉我们具体的步骤,而不告诉我们为什么需要这个步骤的原因,导致我们跟着做的时候也是懵懵懂懂,因此产生了写这篇文章的动机。

文章的内容都是我参考网上的文章根据自己的理解写出来的,如果有不对的地方,还请大家指出。

本文由看雪论坛 梦野间 原创,转载请注明来自看雪社区

时间: 2024-09-19 08:15:24

使用IDA调试SO脱壳,环境准备及各步骤原理详解的相关文章

windows系统下node.js环境配置与安装教程图文详解(详细版)_win服务器

国内目前关注最高,维护最好的一个关于nodejs的网站应该是http://www.cnodejs.org/ windows系统下简单nodejs环境配置. 第一步:下载安装文件 下载地址:官网https://nodejs.org/en/download/ 这里用的是 第二步:安装nodejs 下载完成之后,双击 node-v6.9.1-x64.msi,开始安装nodejs,默认是安装在C:\Program Files\nodejs下面 第三步:安装相关环境 打开C:\Program Files\

Linux/Unix环境下的Make和Makefile详解_unix linux

Linux/Unix环境下的Make和Makefile详解  无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系.而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说

入门:Windows环境下PHP动态网页配置详解

入门:详解Windows下PHP5+APACHE+MYSQ完整配置 经过一段时间狂热的PHP编程,对WINDOWS平台下PHP的配置可算是深有感触,一开始我用的是一键安装的傻瓜包,但是考虑傻瓜包的安装版本已经落后,在真正手动配置PHP环境时遇到许多问题,在查阅了许多资料和尝试后,终于配置成功.现在,我将我的配置经验和大家分享一下,相信可以解决大家配置PHP环境的迷惑. 首先说一下我用的软件版本. PHP 5.1.6APACHE 2.0.59(注意:APACHE 2.2.X版本以上要增加插件才支持

Apache Spark源码走读(四)Hive on Spark运行环境搭建 &hiveql on spark实现详解

<一>Hive on Spark运行环境搭建 楔子 Hive是基于Hadoop的开源数据仓库工具,提供了类似于SQL的HiveQL语言,使得上层的数据分析人员不用知道太多MapReduce的知识就能对存储于Hdfs中的海量数据进行分析.由于这一特性而收到广泛的欢迎. Hive的整体框架中有一个重要的模块是执行模块,这一部分是用Hadoop中MapReduce计算框架来实现,因而在处理速度上不是非常令人满意.由于Spark出色的处理速度,有人已经成功将HiveQL的执行利用Spark来运行,这就

Unix环境下Oracle数据库完全优化详解

如今的优化己经向优化等待(waits)转型了,实际中性能优化最根本的出现点也都集中在IO,这是影响性能最主要的方面,由系统中的等待去发现Oracle库中的不足.操作系统某些资源利用的不合理是一个比较好的办法,本文测重于Unix环境. 一.通过操作系统的一些工具检查系统的状态,比如CPU.内存.交换.磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲这也可能不是一个正常的状态,因为CPU可能正等待IO的完成.除此之外我们还应观注那些占用系统资源(CPU.内存)的进程. 1

深入解析:一主多备DG环境,failover的实现过程详解

在DG中,switchover和failover是两个重要的概念,也是DG实现的核心.根据不同的DG配置,switchover和failover也是有差异的.当主库被crash之后,如何进行DG foilover的操作? 概述 本文是针对在DG灾备环境进行failover操作以及后续恢复的报告. 验证过程 1.A库异常关闭 A库: SQL>shutdown abort 2.B库进行failover切换为新主库 failover 标准步骤如下: #取消DG应用 ALTER DATABASE REC

LAMP环境(CentOS操作系统)安装步骤教程详解[图]

首先要下载CentOS操作系统的ISO,可以去官方网站下,也可以到附近镜像开源服务器下载.这里以版本5.3为例,下载文件有两种形式,一种是光盘CD版,要六张盘,要下载的文件为CentOS-5.3-i386-bin-1of6.iso.CentOS-5.3-i386-bin-2of6.iso.CentOS-5.3-i386-bin-3of6.iso.CentOS-5.3-i386-bin-4of6.iso.CentOS-5.3-i386-bin-5of6.iso.CentOS-5.3-i386-bi

Linux系统Web服务器环境搭建LNMP一键安装包详解

最新版本:lnmp-2.5 更新时间:20140702 MD5值:D4D52E39066F041569B8EF2DAA033E15 安装说明:请保证服务器能够正常上网.yum命令可以正常使用! 1.wget http://www.osyunwei.com/lnmp/lnmp-2.5.tar.gz #下载,需要先执行yum install wget安装下载工具 2.tar zxvf lnmp-2.5.tar.gz #解压 3.cd lnmp-2.5 #进入安装目录 4.sh CentOS.sh #

IIS环境启用GZip压缩方法图文详解

    IIS启用GZip压缩,是提高网站速度和减轻服务器负载的一个优化手段和方法,经测试,网站启用GZip压缩后,速度快了3倍!而配置起来也相当的简单,因此被广大网站管理员使用.本文将详细介绍如何在IIS启用GZip压缩,同时解决可能遇到的一些问题.       IIS启用GZip压缩的步骤:       1.打开IIS,右键点击"网站",选择"属性"       2.在打开的窗口里,切换到"服务"标签,然后选中"HTTP压缩&quo