因一纸设计稿,我把竞品APP扒得裤衩不剩(中)

严正声明

  • 1、相关破解技术仅限于技术研究使用,不得用于非法目的,否则后果自负。
  • 2、笔者仅出于对技术的好奇,无恶意破坏APP,尊重原开发者的劳动成果,未用于商业用途。

0x1、无形之刃,最为致命 => 碎碎念

上一篇文章《因一纸设计稿,我把竞品APP扒得裤衩不剩(上)》是一篇比较简单的:

  • jsw => 技师文,呸,
  • jsw => 记述文,呸呸,
  • jsw => 技术文,呸呸呸,这什么垃圾输入法!

技术文,但是这评论区的风气,貌似有点不对/p>

顺带恭喜下:FPX 3-0 G2喜提S9总冠军FPX牛逼!!!破音!!!

  • 发现 => 很多童鞋对APP逆向很感兴趣;
  • 但是 => 上关于APP逆向文章的比较零散;
  • 不知 => 如何入手,毕竟逆向的水可深了;
  • 笔者 => 也只是个小白玩家,兴趣使然玩玩而已;
  • 分享 => 目前会的一些「Android APP基础逆向姿势」;
  • 还望 => 各位真丶逆向大佬轻喷;
  • 如有 => 有更好的工具或者方法安利,欢迎评论区指出,谢谢~

顺带分享几个笔者常逛的逆向论坛

  • 看雪论坛:https://bbs.pediy.com/
  • 吾爱破解:https://www.52pojie.cn/
  • 蚁安 :https://bbs.mayidui.net/
  • 逆向大佬姜维:http://www.520monkey.com/

贴心提醒

此文内容较多,可能会有些枯燥,建议先点赞收藏,茶余饭后再慢慢品尝~


0x2、提莫队长,正在待命 => 硬件准备


在开始折腾Android APP逆向前,你需要:


① APK文件里都有什么/h3>

获取APK的渠道:酷安应用宝豌豆荚等应用市场下载,有些还提供「应用历史版本」下载。
APK本质上是一个「压缩包」,把「.apk后缀」改为「.zip后缀后解压,可以看到如下目录结构 (可能还有其他文件):


② 编译APK和反编译APK

所谓的「编译」,就是把「源码、资源文件等」按照一定的「规则」打包成APK,官 提供了详细的编译构建过程图

  • 男子上进,努力工作,妹子贤惠,料理家务;
  • 妹子每天做好饭菜,等男子回来,一起吃饭,满怀憧憬,畅谈以后的二人世界;
  • 酒饱饭后,温饱思XX,不可描述一番,却被「居心叵测」的邻居给盯上了;
  • 和往常一样,男子出门上班,妹子在家做家务,晾衣服;
  • 邻居 上线,用「谎言」诱骗妹子开门,接而挤门而入;
  • 用「暴力和胁迫」,无视妹子的やめて和反抗,违背个人意愿;
  • 粗暴地把衣服一件件褪去,仅剩下那「万恶的马赛克」;
  • 守护着最后的一处「绝对领域」;
  • 在几番不可描述后,把妹子占为己有,然后像玩物般戏耍。

看着妹子「因情绪过激而身体抽搐」,哭得「梨花带雨」,不禁让人「心生怜惜」,像我这种感性的蓝孩子:

除了「同情女主」和「斥责坏人」外,应该如何避免这种事情的发生呢/p>

  • 1、花点钱,请个「保镖」看门,坏人想进来要先过保镖这一关;
  • 2、给妹子「加个锁」,让坏人无法不可描述,只能望而兴叹。

可以把例子中的「妹子」看做是我们编写的「APK」,而「请保镖」和「加锁的操作」则可以看做是「APK加固」,另外加固又称「加壳」,壳的定义:

一段专门负责「保护软件不被非法修改或反编译的程序」,一般先于程序运行,拿到控制权,然后完成它们保护软件的任务。

有「加壳」,自然也有「脱壳」,即去掉这层壳,拿到源码,也称为「砸壳」。

关于加固技术的发展,看雪上有篇:《一张表格看懂:市面上最为常见的 Android 安装包(APK)五代加固技术发展历程及优缺点比较》,不过图不怎么清晰,笔者重新排版了一下,有兴趣的读者可以看看:

加固虽然能在一定程度上「防止反编译和二次打包」,但加固后的APP可能会带来一些问题:

体积增大,启动速度变慢,兼容问题等

上「免费加固」方案有很多,脱壳教程也是烂大街,而且有些恶心的第三方加固还会给你加点料(360加固锁屏广告),而使用「企业级的加固」,则需要支付不菲的费用,所以很多APP直接选择了「裸奔」。先来讲解一下未加固的怎么获取源码吧~


① 未加固(笔者使用的工具:apktool + jadx)

  • 使用apktool:获取「素材资源,AndroidManifest.xml以及smail代码
  • 使用jadx:把「classes.dex」转换为「.java」代码

使用Jadx的注意事项:

使用jadx-gui可直接打开apk查看源码,但如果APK比较大(classes.dex有好几个),会直接卡死(比如微信),笔者的做法是命令行一个个dex文件去反编译,最后再把反编译的文件夹整合到同一个目录下。

这样的操作繁琐且重复,最适合批处理了,遂写了个反编译的批处理脚本(取需):

执行前,你需要把apktool相关的东西,丢到jadx/build/jadx/bin目录下,如图所示:

静待片刻后:

按照自己的需要用Android Studio打开其中一个就好了:

  • apktool目录:apktool反编译后的内容,主要用于smail动态调试
  • jadx目录:反编译成Java的内容。

② 反混淆(simplefy、Deguard)


代码是拿到了,但是打开代码,「一堆的abcd」,跟到眼花,可以试下「反混淆」,方案有两类,一种是通过「代码逆推」出名字,另一种是通过「统计逆推」出名字。

第一种方案的工具有很多(Jeb2simplify等),前者付费需破解,Java版本有限制,Mac配置有点麻烦,故笔者用的是后者:「Simplefy」,Github仓库:https://github.com/CalebFenton/simplify,使用方法也很简单:

打开终端依次键入:

编译后完,执行下述指令即可反混淆APK:

静待反混淆完毕,接着反编译批处理脚本走一波,打开MapFragment比对下:

选择需要反混淆的APK后,Upload上传,接着等待处理完成,!!!别关页面!!!

大同小异,另外,反混淆并不能100%还原,而且还可能有些小错误,比如下面的代码:

虽说反编译后的可读性有所提高,但建议还是搭配着混淆的源码看。


③ 脱壳(FDex2,反射助手,dumpDex)


终于来到很多同学期待的脱壳环节,先说明下,笔者只是「工具党」水平,不会Native层的,so文件调试!如果本节的工具,你脱不出来,或者脱出来有问题,笔者也是爱莫能助。看雪有很多帮人脱壳的大佬,可以在上面发个帖子求助下~

只有这么一丢丢点东西,把「待脱壳应用」安装到手机上,接着用FDex2来脱壳
已Root玩家XposedInstall启用FDex2插件重启后,按如下步骤脱:

  • Step 1:FDex2选中待脱壳应用:

  • Step 3:把整个目录拉到电脑上,这里直接用adb命令拉取:

  • Step 5:使用jadx命令反编译dex,顺带改名,命名规则:按照文件大小降序,示例如下:
  • Step 6:删掉没脱壳前反编译项目里的classes,把这几个复制到其中:

如果炮制,只是dex的路径有些不一样。

Step 2:点击中间的六芒星,弹出如下对话框,长按写出DEX

Step 4:pull到电脑上用jadx-gui打开看看:


4、dumpDex脱壳Github:https://github.com/WrBug/dumpDex/releases)

官方仓库的README.md中有一句:

用jadx-gui打开这的dex,一堆这样的错误:

方法指令都被nop(零)替换了,工具党到这里就可以放弃了,要调试so文件。


Tips:本节用到的东西,都有给出比较官方的下载链接!!!你也可以到公
抠腚男孩」输入000,回复对应序 下载,谢谢~


参考文献

  • Android打包流程

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年11月16日
下一篇 2019年11月16日

相关推荐