首页
社区
课程
招聘
[原创]使用IDA调试SO脱壳,环境准备及各步骤原理详解
发表于: 2017-10-21 10:58 14754

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

2017-10-21 10:58
14754

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

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

首先解释为什么要是真机,因为模拟器经常会遇见各种各样的问题(亲测)导致有些步骤进行不下去。
关于第二点,因为目前网上能找到的教程都是几年前的,那个时候的安卓系统仍然是用着dvm虚拟机,加载so文件用到的库是libdvm,而5.0以上的系统已经统一使用ART进行加载了,所以如果你用5.0以上系统照着原来的教程做,就会发现做了一半就跟不下去了。再一个就是移动端的壳发展到现在已经更迭了好几代了,一代比一代难脱,要入门最好还是从第一代开始脱。
至于第三点的话,自然就是因为准备环境时需要往手机根目录下放一些文件,或是安装xposed框架。

程序的话,自然是要找一个已经加了壳的应用,且这个应用本身不会太复杂,以防反编译的时候出现一些奇奇怪怪的问题。
关于这点,参考这篇文章:
https://www.v2ex.com/t/298813
这个链接里有目前几款主流加壳应用的官网地址,在其官网里一般都会有介绍哪些APP使用了他们家的壳,我在其中找到了计算管家这款看起来就很简单的软件。
接下来就是要找到这款软件几年前的版本,在这里可以用PP助手或是安智市场,这两个应用商店都可以下到历史版本的APP。
在这里我使用了在安智下载的计算管家3.1.1版本的APP

找到IDA的根目录,进入dbgsrv的子目录下,可以看见有一个名为android_server的文件,这个就是要使用IDA调试so文件所需要的程序。你想啊,我在电脑上怎么才能调试手机上的程序呢?一个方案当然是我在手机上弄一个调试器,但手机屏幕这么小,根本不方便调试,那么最好就是我在手机上这个调试器只提供调试功能,而把操作界面放到电脑上来,而android_server这个文件就是起到这个作用了。
接下来我们需要把这个文件弄到手机根目录下去。在这里我们可以在手机上下个RE管理器或者ES文件管理器(可能有人会说直接用adb push,但是有些机子,即使已经root了,也会因为各种各样的权限问题导致传不下去),先把文件通过数据线转到手机内置或外置存储卡上,然后使用上述APP将根目录挂载为可读写,然后将这个文件复制过去。在这里你可以任意更改这个文件的名字,也可以放在任意地方(网上有的说放在/data下,有的放在/data/local/tmp下,其实位置并不是固定的),我为了方便运行这个程序,直接放在了根目录下,改名为as,然后通过adb shell将这个文件权限改为777。

为了使用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中的值仍然是原来的,而且重启后要重新运行一次。

打开手机的usb调试,连接上数据线,在电脑上的cmd里运行adb shell,有的人可能运行不成功,有可能是因为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:

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

打开一个空的IDA,选择debugger->attach->Remote ARMLinux/Android debugger,然后在选择debug options里选择suspen on process entry point,使其断在程序入口点,这里如果进行了端口转发在hostname里填上127.0.0.1,如果没有,就填上手机的IP地址,点击确定之后找到对应的程序,加载。

这一步也不是必要的,DDMS原本是ecplipse上的一个插件,如果你用的是android studio,可以用tools->Android->Android Device Monitor打开它。可以看见,我们要调试的程序出现在了这里(如果没有是因为ro.debuggable没有设置成功),

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-1-11 19:38 被kanxue编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (21)
雪    币: 197
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2017-10-21 22:48
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错!
2017-10-22 21:25
0
雪    币: 7012
活跃值: (4222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2017-10-23 09:39
0
雪    币: 34
活跃值: (864)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
5
赞一个
2017-10-23 17:35
0
雪    币: 249
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
m
2017-10-24 18:54
0
雪    币: 222
活跃值: (219)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
赞一个
2017-10-25 07:53
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
就想问下还有木有后续的文章    讲的很详细哎,比较适合新手看,    其他人的文章大多数都是针对基本熟悉ida的人做的,
2017-10-26 17:01
0
雪    币: 41
活跃值: (823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
赞一个!
2017-10-30 08:49
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
修改ro.debuggable=1  使用各种方式都不成功,请问mprop工具是4.4以下的系统都可以成功吗
2017-10-30 17:35
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
kxbaibai 修改ro.debuggable=1 使用各种方式都不成功,请问mprop工具是4.4以下的系统都可以成功吗
换个手机试试
2017-11-1 09:11
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
2017-11-3 09:41
0
雪    币: 3757
活跃值: (1757)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
13
chenyuanyuan 就想问下还有木有后续的文章 讲的很详细哎,比较适合新手看, 其他人的文章大多数都是针对基本熟悉ida的人做的,
因为我也是萌新,很多东西都不会,所以要等后续可能要很久了
而且我只是感觉这方面的教程比较少,才写了这篇文章,别人写过的东西我就不打算再写了
2017-11-7 11:25
0
雪    币: 3757
活跃值: (1757)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
14
kxbaibai 修改ro.debuggable=1 使用各种方式都不成功,请问mprop工具是4.4以下的系统都可以成功吗
这个和系统版本好像没什么关系
mprop有最新版的,你试过了吗
2017-11-7 11:27
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
没有试过,mprop最新版你能发我一份吗
2017-11-7 16:29
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
谢谢分享,正在到处找脱壳的教程呢
2017-11-7 20:29
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
适合我等入门新人学习
2017-11-10 09:43
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
适合我等入门新人学习
2017-11-10 09:44
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
适合我等入门者学习
2017-11-10 09:44
0
雪    币: 3757
活跃值: (1757)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
20
kxbaibai 没有试过,mprop最新版你能发我一份吗
抱歉这么久才回,最近事多,没怎么上看雪
mprop最新版的链接,我在文章里给了的:
https://bbs.pediy.com/thread-215311.htm
2017-11-18 14:18
0
雪    币: 3
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
楼主我按你的步骤到最后一步IDA运行是弹出dex找不到会是什么原因造成的,我到提示目录下看是有的。跳过后还会提示找不到其他一些so文件

2018-3-24 13:21
0
雪    币: 198
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
mark
2019-3-5 20:16
0
游客
登录 | 注册 方可回帖
返回
//