共计 3513 个字符,预计需要花费 9 分钟才能阅读完成。
前言
想要成为一名优良的 Android 开发,你须要一份齐备的 常识体系,在这里,让咱们一起成长为本人所想的那样~。
不记得是哪一天,忽忽悠悠地就进入了某猫社区(你懂的),从此,每天早上一瓶养分快线。庆幸的是,该社区为了盈利,开启了 VIP 通道和播放次数限度,不然能够间接喝蛋白质了。不过正值青春、精力旺盛的咱们,怎么能让理智管制欲望?那就成为高大上的会员,开启 VIP 减速通道,有限观看!充钱?充钱是不可能充钱的,这辈子都不可能充钱。作为 Android 开发者,应该用非凡的伎俩来搞定非凡的事件,带着咱们指标,那就来一次 Android 的逆向之旅吧!
公布此文的目标,除了分享整个破解过程外,还心愿能够帮忙你关上 Android 逆向的大门,体验不一样的 Android 世界。
此文章仅供技术交换
此文章仅供技术交换
此文章仅供技术交换
…没工夫解释了,连忙上车吧…
筹备工作
玩逆向的根本工具,这里须要筹备 Android 逆向三件套 apktool、dex2jar、jd-gui
apktool:反编译 apk、从新打包新 apk。你能够失去 smali、res、AndroidManifest.xml 等文件;
dex2jar:把 Android 执行的 dex 文件转成 jar 文件;
jd-gui:一款能够不便浏览 jar 文件的代码工具。
他们之间的关系,能够参考下图:
工具我曾经传到 GitHub,但不保障当前是最新版本
下载好下面三个工具,就能够开启你的逆向之旅了!
逆向开始
提到逆向,可能很多敌人会想到 Xposed,用 Xposed 去 Hook 参数,绕过 if 判断。没错,用 Xposed 的确很容易就能达到目标,然而它的限度比拟大,手机须要 root,并且装置 Xposed 模块,或者须要跑在 VirtualXposed 虚拟环境下,减少了使用者的上手老本。
咱们这里的破解形式,会间接输入一个破解版 Apk,使用者不须要进行任何多余的操作,装置即可应用。
第一步:将原利用 apk 后缀改成 zip,解压出 classes.dex 文件
其实这一步是最难的,逆向最难的在于脱壳,脱壳分两种,手动脱壳 (手脱) 和机器脱壳(机脱)。什么是脱壳呢?就是很多 App 在公布到利用市场之前,会进行加固,即加壳,它会把真正的 dex 文件给 ” 藏 ” 起来,咱们就须要通过脱壳的形式去找到利用里真正的 dex,能力拿到外面的源码。只有拿到源码并读懂源码(混同后连蒙带猜),能力找到爆破点,能力批改代码从新编译。
咱们这里破解的某猫 App,因为它的非凡性质,它上不了市场,也没有加固,最可气的是,它竟然不混同,这让咱们破解的难度直线降落。
第二步:应用 dex2jar 将 classes.dex 转成 jar 文件
cmd 到 dex2jar 文件夹目录,执行
d2j-dex2jar D://xxx/xxx/classes.dex
- 1
失去 jar 文件
动态剖析
拿到源码后,首先咱们须要找到利用的限度点,绕过 App 外面的判断。
而后剖析源码,该从哪里开始动手呢?
咱们都晓得,一个残缺 Android 利用,可能会存在各种第三方,各种依赖库,这些依赖都会被编译到 dex 外面,所以这个 Jar 包外面会存在很多不同包名的类文件,为了不便找到破解利用的包名,咱们能够借助 adb 打印栈顶 activity 的类全门路:
adb shell dumpsys activity | findstr "mFocusedActivity"
- 1
activity 的包门路曾经打印进去了,接下来在 jar 文件外面找到 PlayLineActivity.java 的相干代码。
依据页面 Toast 提醒,很轻松就能定位到爆破点。
UserUtils.getUserInfo().getIs_vip().equals("1")
- 1
能够看出,当会员字段为 1 时,阐明是会员用户,就会切换至线路 2。
Hawk.put("line", "2");
- 1
那接下来只须要批改用户实体类 UserModel 的 getIs_vip() 办法,让它永远返回 1 就行了。
破解
dex2jar、jd-gui 都只是剖析工具,上面才是真正破解的开始。
Smali 简介
Dalvik 虚拟机和 Jvm 一样,也有本人的一套指令集,相似汇编语言,然而比汇编简略许多。咱们编写的 Java 类,最初都会通过虚拟机转化成 Android 零碎能够解读的 smali 指令,生成后缀为 .smali 的文件,与 Java 文件一一对应(也可能会比 Java 文件多,典型的比方实现某个接口的匿名外部类),这些 smali 文件就是 Dalvik 的寄存器语言。只有你会 java,理解 android 的相干常识,就能轻松的浏览它,
所以,咱们真正须要批改的货色,是 java 代码对应的 smali 指令。
反编译
咱们利用 apktool 工具,来提取 apk 外面的 smali 文件。
cmd 到 apktool 文件夹上面,执行(你也能够配置环境变量,这样会不便一些)
apktool.bat d -f [apk 输出门路] [文件夹输入门路]
- 1
反编译胜利后,关上 smali 文件夹,找到 UserModel.java 对应包名下的 UserModel.smali 文件。
爆破
找到了爆破文件,找到了爆破点,接下来就能够对 UserModel.smali 文件进行爆破了(为什么叫爆破,我也不晓得,行内都是这样叫的,感觉高大上,其实就是批改文件)。
用编辑器关上 UserModel.smali,找到 getIs_vip 办法
能够看到,它返回了成员变量 is_vip 的值,咱们只须要把它的返回值批改成 1 就行了。
如果对 smali 指令不相熟,你能够花 10 分钟去理解一下 smali 的根本语法。
定义一个 string 类型的常量 v1,赋值为 1,并将它返回进来。
动静调试
破解的这个如同太简略了,都省掉了调试步骤,那就间接
保留,搞定!
回编
接下来把反编译生产的文件夹又从新回编成 apk。
从新打包
cmd 到 apktool 文件夹上面,执行
apktool b [文件夹输出门路] -o [apk 输入门路]
- 1
如果批改 smali 文件没有问题的话,就能够失常生成一个新的 apk 文件。
这时候间接将从新打包的 apk 文件拿去装置是不行的,因为之前 zip 解压的目录中,META-INF 文件夹就是寄存签名信息,为了避免歹意串改。
所以咱们须要对从新打包的 apk 从新签名。
从新签名
首先筹备一个 .jks 的签名文件,这个开发 android 的同学应该很相熟了。
配置了 JDK 环境变量,间接执行:
jarsigner -verbose -keystore [签名文件门路] -storepass [签名文件明码] -signedjar [新 apk 输入门路] -digestalg SHA1 -sigalg MD5withRSA [旧 apk 输出门路] [签名文件别名]
- 1
最初在你的文件夹上面,就能够看到一个 某猫 VIP 破解版.apk。
装置并验证性能
总结
最初来梳理一下破解流程:
1、将原利用 apk 后缀改成 zip,解压出 classes.dex 文件
2、应用 dex2jar 将 classes.dex 转成 jar 文件
3、将 jar 文件用 jd-gui 关上,查看源代码
4、adb 定位到类名包门路,找到相干代码
5、apktool 反编译 apk,找到 smali 对应的爆破点
6、批改 smali 文件,调试程序
7、从新打包,从新签名
以上是我对这次破解流程的一个总结,如果有不对或者脱漏的中央,还请各位大佬斧正。
最近有点感冒,干咳一个多月了还不好起来,想到小菊花妈妈课堂那句话:孩子咳嗽老不好,多半是废了。我也就放弃医治,待在空荡的房间,干着喜爱干的事_。我也是刚接触 Android 逆向没多久,一开始认为很简单,很麻烦,过后只是抱着无聊想试试的心态,反正都放弃医治了,没想到只花了一个多小时,居然就胜利了,并没有设想中的那么难。
如果你对逆向也感兴趣的话,并且和我一样是初学者,我感觉这个实战过程非常适合你。一是能让你感触到破解的整个过程;二是难度不大,不会打击到你的趣味,同时还能失去肯定的成就感。
原文地址:github.com/goldze/Anti…
文章写到这里就完结了,如果你感觉文章写得不错就给个赞呗?你的反对是我最大的能源!
最初,相熟的浏览分享环节
- 阿里腾讯 Android 开发十年,到中年危机就只剩下这套挪动架构体系了!
- “我在阿里做了 5 年招聘,给求职者 10 条倡议”
本文在开源我的项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,外面蕴含不同方向的自学编程路线、面试题汇合 / 面经、及系列技术文章等,资源继续更新中…
【Android 逆向】小白也能学会的一个小时破解某猫社区 VIP 会员