| 前段时间,老板让我开发一个TV的安全类的APP,本人比较懒,如果全部手敲一个APP太费劲,周期时间又长,正好最近在学习关于逆向方面的知识,正好拿来练练手!
好了那么现在开始我们的快速开发之旅!
首先,准备工具:1.Androidkiller
2.jadx0.6.1
按照需求找类似的APP,用AndroidKiller查壳工具看下APP有没有加壳,如果有壳可以使用脱壳神器drizzleDumper工具,这个工具是开源的,大家想看源码可以去下载:https://github.com/DrizzleRisk/drizzleDumper;当然这个工具网上有人已经分析了原理,这里就大致在说一下,他的原理就是一点:root设备之后,通过ptrace附加需要脱壳的apk进程,然后在脱壳的apk进程的内存中进行dex文件的特征搜索,当搜索到dex文件时,进行dex文件的内存dump。
其实这个思路和之前介绍的ZjDroid,DexExtractor等工具原理还不太一样,之前的脱壳工具都是基于hook拦截系统的加载dex函数进行dump出dex的。但是这个工具是基于附加目标程序,寻找内存段具备dex文件头部信息进行dump的操作。这个思路也是非常好的。我们也知道dex的长度是保存在头部信息中的,所以只要在内存段中找到dex的头部信息,然后解析长度,有了起始地址和长度,那么就可以获取内存中的完整dex文件了。(对脱壳是否成功,这个估计有一定的概率性)
drizzleDumper工具使用:(以com.qihoo.freewifi为例)
在cmd控制台的条件下,执行cd命令进入到存放drizzleDumper的文件夹,然后将drizzleDumper文件推送到android手机的/data/local/tmp文件夹下并赋予可执行权限,然后根据每种android加固的特点,选择需要脱壳的apk和drizzleDumper运行的先后顺序,调整能够脱壳成功的过程。这里使用的com.qihoo.freewifi为例,先运行com.qihoo.freewifi程序,然后adb shell条件下su提权,****执行drizzleDumper的脱壳操作,等待2秒。
cd xxxxx/drizzleDumper
adb push drizzleDumper /data/local/tmp
adb shell chmod 0777 /data/local/tmp/drizzleDumper
adb shell #进入androd系统的shell
su #获取root权限
-
./data/local/tmp/drizzleDumper com.qihoo.freewifi 2 #执行脱壳操作
最好不要找经过混淆的APP,这样增大阅读代码难度!一般 Apk 在发布出去之前,都是会被混淆的,这基本上国内 App 的标配。这样一个类,最终会被混淆成 a.b.c ,方法也会变成 a.b.c.a() ,这样其实非常不利于我们阅读。我们很难看到一个 a.java 的文件,就确定它是哪一个,还需要根据包名来区分。
而 deobfusation 功能,可以为它们其一个特殊的名字,这样它在这个项目中,名字就唯一了,方便我们识别和搜索。
这个功能可以在 Tools -> deobfusation 中激活。接下来来看看它的效果。deo-beforedeo-before开启 deobfusation 之后的效果如下:deo-afterdeo-after可以看到,a 变成了 p003a。
按照步骤一步步来,要有耐心,不要一心急把整个都COPY到时候一大片爆红,瞬间就没了心情!
1.先新建一个项目.
2.用AndroidKiller编译找到的APP,找到res资源文件,在Window Explorer外找到文件,整个COPY.
3.在工程信息里面找到程序路口,copy下名字.
4.用jadx打开APP,Ctrl+N快速搜索找到程序入口!
5.将整个类copy到自己的项目,记得在AndroidMainFest.xml注册!这是会有一大片红,不要急,耐心!跟着我一步步来!
6.首先看看第一个BaseActivity,这个很明显是缺少父类class,来到jadx ,Ctrl+N搜索baseActivity,找到该类整个copy,好了问题解决!,按照类似的方法,哪里错误点那里,!大部分原因是因为缺少类或则包没有导入.一天时间整个框架就搭好了,差不多一周时间就把整个项目完整的COPY出来了.然后就可以坐在那里抖腿看看论坛啥的!
AS里有些比较实用的快捷键Alt+j批量修改,ctrl+f查找,F2找到错误的信息,shift+shift全局搜索!
7.copy也是有技巧的,按步骤来,首先先把布局主界面做出来,先不要实现逻辑,做出一个大概的框架,然后具体功能一个模块一个模块去实现,千万不要急,要不然很容易出错!把自己搞得晕头转向,还有一些找不到类的情况,一般是用了第三方的框架,去官网上下框架就好了!
因为项目已经做好,有些问题一是半会想不出来,自己也懒得截图,所以写的有乱,打字好累,本人比较懒!后期有时间我会慢慢修改!
|
<ignore_js_op style="word-wrap: break-word;"><dl class="tattl attm" style="word-wrap: break-word; margin: 0px; padding: 10px 10px 10px 0px; float: none; overflow: visible; width: 1191px; height: auto;">
<dd style="word-wrap: break-word; margin: 0px; padding: 0px; color: rgb(153, 153, 153);">
3.png (76.7 KB, 下载次数: 0)
</dd>
</dl></ignore_js_op> <ignore_js_op style="word-wrap: break-word;"><dl class="tattl attm" style="word-wrap: break-word; margin: 0px; padding: 10px 10px 10px 0px; float: none; overflow: visible; width: 1191px; height: auto;">
<dd style="word-wrap: break-word; margin: 0px; padding: 0px; color: rgb(153, 153, 153);">
2.png (21.99 KB, 下载次数: 0)
</dd>
</dl></ignore_js_op> <ignore_js_op style="word-wrap: break-word;"><dl class="tattl attm" style="word-wrap: break-word; margin: 0px; padding: 10px 10px 10px 0px; float: none; overflow: visible; width: 1191px; height: auto;">
<dd style="word-wrap: break-word; margin: 0px; padding: 0px; color: rgb(153, 153, 153);">
1.png (116.63 KB, 下载次数: 0)
</dd>
</dl></ignore_js_op>