首页 » Android » Android应用的逆向分析案例

Android应用的逆向分析案例

 

一.导读
很多初学者都希望了解和掌握Android应用开发,阅读优秀的源代码是一种有效的提高方式。我们通常会通过类似github来获取优秀的Android源码,但有的时候一些优秀的项目并未开源,这给我们学习带来了一定的阻碍,如何突破这种阻碍,帮助更多的开发者阅读优秀的源码是文本关注的话题。
二.实战演练
(一).如何提取Android中的素材文件?
对于一个初学者来说,在不懂UI设计的前提下,通常情况下是在一些设计网站上下载一些合适的素材文件,如果个人魅力足够好,你可能会求设计的妹纸帮你设计一套皮肤出来。当然作为开发者习惯了自己动手丰衣足食的理念。
1.压缩工具
如果手头没有额外的提取工具,通常利用系统自带的解压缩工具就可以提取。
解压前
Android应用的逆向分析案例1

解压后:
Android应用的逆向分析案例2

经过查找你会发现素材文件静静的躺在res文件夹下
Android应用的逆向分析案例3

Android应用的逆向分析案例4

2.当然,也可以用类似APK Image Extractor软件来快速提取图像文件,这些软件的原理通常也是将应用程序解压并枚举图像文件。
Android应用的逆向分析案例5

(二).如何反编译APK文件?
Android中的破解通常分为静态分析和动态分析,静态分析是指在不运行代码的情况下对程序文件进行反汇编代码,然后通过分析反汇编的代码来寻找程序的突破口,动态分析通常指运行时来分析程序功能的一种技术。对于这两种方式又可以细分为Java层面的(dex文件、smail文件)和native层面的(so文件)。今天主要跟大家分享如何利用现有的分析工具,快速的分析Android应用程序。
1.准备工作
(1).基本知识储备:
无特殊要求
(2).分析工具使用:
Apktool
2.大体思路分析
主程序(apk文件)->反编译工具反编译(各别加壳的程序需要特殊处理)->分析代码找到突破点并修改突破点(这是关键)->重新编译apk文件并签名->安装调试(破解完成)
3. 案例分析
软件名称:XXXX日语学习软件
软件下载量(某手机管家):65万
Android应用的逆向分析案例6

软件功能:是一款不错的日语快速入门学习软件,不过软件用户体验很糟糕,软件每次启动后都会加载广告,而且会常常在后台下载恶意广告和木马程序,非常诚恳的希望软件作者在选择广告商的时候希望能体谅一下用户的感受,另外软件会收集一些免费的视频以VIP的形式来增加额外的收益,虽然没几个钱。当然我对这种做法不做评价,今天主要从技术角度学习下逆向工程。
下图是点击VIP视频时弹出的收费界面:
Android应用的逆向分析案例7

点击【加入会员】按钮弹出的付费界面,红色字体【特别提示】很重要!
Android应用的逆向分析案例8

通过上面的大体思路分析,就是使用apktool工具将程序逆向,然后根据弹出的关键字进行全局搜索,因为关键字在Android开发时,开发者可能将这些字符串硬编码到资源中,也可能引用res\values\strings.xml文件,程序在打包的时候就会将strings.xml文件的字符串加密存储resources.arsc文件中并打到apk文件里,当我们反编译后,这个文件也被反编译回来。所以我们只要利用搜索工具搜索关键字即可。我这里关键字定位”加入会员”。
备注:沿着这个思路往下走的时候,我发现我绕了很多弯路,其实这个软件破解并没想象中的那么复杂,甚至简单到都不用重新编译APK文件,读者在读到后面时候会豁然开朗,我先卖个关子,按套路来。
(1).第一步,反编译apk文件。
工具:apktool
【反编译apk命令】:

apktool d[ecode] [opts] <file.apk> [outputdir]

Eg: apktool d /opt/share/mydhc.apk /opt/output
【编译apk命令】:

apktool b[build] [opts] [<apppath>] [outputdir]

Android应用的逆向分析案例9

反编译后目录:
Android应用的逆向分析案例10

目录结构:
Assets: 该目录用于存放项目相关的资源及配置文件。
Lib: 通常存放第三方库。如.so文件
Res: 通常存放着所有的图片文件以及xml文件等资源文件,跟用eclipse开发Android工程时,项目目录中res下面的资源文件一样。上面提到android素材文件其实也可以用apktool工具提取。程序破解的突破口很多都是根据res目录下的xml文件开始分析的。
Smali: 通常放些Android程序的反编译代码,类似于一种中间代码,虽然并不是源码,但也是基于文本的,我们就是靠分析这些代码来达到破解的。
AndroidManifest.xml文件: Android程序中必须的文件,这个文件可以暴露应用程序注册的权限,各自的实现类以及程序的启动类等。
apktool.yml文件: 该文件放些反编译之后apktool的配置信息,通常反编译完程序在编译回去如果没有此文件会报错。
备注:不同的逆向分析工具分析出来的文件目录可能会稍有差别,不过大同小异,读者根据实际情况进行分析。
(2).第二步,全局搜索关键字“加入会员”。
备注:在Android开发中,String.xml文件的所以字符串资源都会保存在【项目/gen/包名/R.java】中如图1,并且每个字符串都有唯一的int类型索引值name如图2【umeng_common_pause_notification_prefix】,当我们反编译Android项目后,所有的索引值将会保存在String.xml同名目录的public.xml文件中如【res/values/public.xml】,然后在public.xml中找到【umeng_common_pause_notification_prefix】对应的ID值【0x7f0a00e7】如图3,然后再将这个ID值在【.smali】文件中搜索,进而继续分析找出突破口。
Android应用的逆向分析案例11

图1

Android应用的逆向分析案例12

图2

Android应用的逆向分析案例13

图3

但是,你会神器的发现,在这个APP中,按这个套路分析并行不通如图4。导致思路中断,这个时候我们前面介绍的【目录结构】你可能会有所启发,Assets文件夹会存放资源及配置文件。没错!这个APP是混合模式开发的,经过仔细分析目录的资源文件,你会找到程序的突破点,这里直接上结果如图5,下载地址复制到下载软件中即可下载会员版本。
备注:我这里之所以会想到有会员版的下载地址,是因为在付费界面当中有个特别提示,见上面付费界面图。作者的这种实现方式给我们破解带来了福利,省去了不少分析步骤,还有其实这个软件分析到这可以直接用压缩软件解压,然后分析文件内容,不用apktool也可以。
Android应用的逆向分析案例14

图4

Android应用的逆向分析案例15

Android应用的逆向分析案例16

Android应用的逆向分析案例17

图5

最终效果图:
Android应用的逆向分析案例18

Android应用的逆向分析案例19

三.总结
这篇文章其实是我在2016年CSDN博客上有分享过,今天主要是对文章进行一次梳理,我的初衷是要尊重每一位开发者的版权,文章的分享只是给大家提供一个逆向分析思路,其实这条路还很长,还有很多知识需要学习和巩固。这次利用一款APP来简单介绍一下逆向工程,即使不懂破解也可以用逆向思维方式找到程序的突破点达到破解目的,希望能给大家带来乐趣和收获。

原文链接:Android应用的逆向分析案例,转载请注明来源!

0