一、加固
二、逆向编程
国内最权威的逆向论坛
逆向专家
https://github.com/android-hacker
https://blog.csdn.net/qq_21051503
逆向工具介绍
百度了很多资料,发现集成的逆向工具有很多,如APKKiller、APKIDE等,但是发现不是很好用,兼容性太差,没有一个可以重新编译打包成功的。这些集成的工具,其实就是写了些脚本,复用了一下Google官方的APKTool的一系列工具而已。
[原创]记某app内购破解 – 安卓逆向菜鸟的初体验
https://bbs.pediy.com/thread-226040.htm
Android Killer:是一款可以对APK进行反编译的工具,它能够对反编译后的Smali文件进行修改,并将修改后的文件进行打包https://www.jianshu.com/p/61a93a6c0c1b,虽然它对360脱壳没有啥作用,但是它的Android相关的一些功能还是比较实用的,比如目录浏览等 。
下面我介绍一下用原生的工具如何进行反编译与重新打包的。
一、ApkTool
下载
可以参照这个博客:
https://blog.csdn.net/dreamer2020/article/details/52761606
https://www.jianshu.com/p/47a5511e17bf
但是apktool.bat与apktool.jar我建议去官方下载最新的
首页:https://ibotpeaches.github.io/Apktool/
怎么安装:https://ibotpeaches.github.io/Apktool/install/
文档说的很清楚,其实中国APKtool的博客鼻祖,就是照着这个翻译的。
使用
apktool.bat,注意win10在命令行运行时要加上.\,否则会报错如下:
image.png
其实最后的提示已经告诉我我们答案。
- 反编译
.\apktool.bat d -f E:\ApkNiXiang\MyTool\source\in\cn.wangxiao.zhuntiku_4.0_43.apk -o E:\ApkNiXiang\MyTool\source\out
参数说明:
d:表示执行反编译指令
-f:输出目录存在,也会强制覆盖,不会提示。
E:\ApkNiXiang\MyTool\source\in\cn.wangxiao.zhuntiku_4.0_43.apk:要反编译的APK
-o:指定输出目录
E:\ApkNiXiang\MyTool\source\out:反编译后的文件的输出根目录
- 重新编译打包(回编译)
.\apktool.bat b -o E:\ApkNiXiang\MyTool\source\rebuild E:\ApkNiXiang\MyTool\source\out
参数说明:
d:表示执行编译指令,将反编译后的文件重新打包。
-o:指定输出目录
E:\ApkNiXiang\MyTool\source\rebuild:指定打包后的apk的生成目录
E:\ApkNiXiang\MyTool\source\out:反编译后的文件的输出根目录
执行重新编译打包的过程,不同的APK,不同的开发人员可能会有各种错误导致不成功,建议首先将apktool文件更新到最新,然后再看提示。下面说说我遇到的坑(所有的坑都是以破解“准题库"app为例的)。
坑1: 提示 “error: Resource entry chapter_home_page_gravity already has bag item android:textColor.”
这个错误提示着十分明显了,哪个文件,哪一行,什么问题。我就找到那个文件:
image.png
发现果然属性定义有重复,那么删除一行重新编译。
这种问题,就属于开发人员代码不规范的问题了。
坑2: style继承
image.png
找到问题文件:
image.png
"Base.V7.Theme.AppCompat.Light"继承了“style/Platform.AppCompat.Light”对某个属性重新赋值就会出现这个问题。
我尝试着把 "Base.V7.Theme.AppCompat.Light"的所有重新赋值的item注释掉,发现新的其它的有继承关系的布局又出现问题了,根本改不完,改完了也不知道会有啥问题。
坑3: 真正致命的问题
其实坑1,坑2还只是W级别的警告,真正致命的是下面的错误:
image.png
针对这个问题及坑2的问题,网上找到一个缓兵之计:
https://blog.csdn.net/m0_37750720/article/details/82832915
就是执行反编译(解包)指令的时候,加一个-r参数,这样就不会解资源文件,回编译的时候也就不会出现问题。但是由于没有解资源文件,所以所有的资源文件都是乱码的。
关于乱码的问题其实官方文档早就作了说明https://ibotpeaches.github.io/Apktool/documentation/,apk直接解压出来资源文件就是乱码的(不光光是中文乱码,英文也有乱码。),apktool扮演的就是解码的角色。
坑4: Exception in thread "main" org.jf.util.ExceptionWithContext: Encountered small uint that is out of range at offset 0x38
反编译一款叫做“伊对”的相亲app,然后就会遇到下面问题。
image.png
然后百度了些相关资料 :
https://blog.csdn.net/changcsw/article/details/51581051
将apktool升级到最新的2.14.1,还是报错,换了个提示:
image.png
注意到assets目录下有一个A3AEECD8.dex,应该是这个dex文件格式不对。我把这个文件从apk中移除,然后重新反编译能通过,重新签名后也能安装成功,但是打不开。我想着这个应该是哪家加密工具给加密了,反正不是某数字公司的加固方式。
另外,反编译“全民K歌”也是出现这个错误。
- 签名
参照 https://blog.csdn.net/dreamer2020/article/details/52761606即可签名成功,但是要注意一些问题:
1)win10 keytool 出现乱码问题解决方法
https://blog.csdn.net/dongheli/article/details/84065118
在命令行运行chcp 936 - 运行重新打包的APK
APK可以正常安装,但是会报一个错误:
2019-10-22 14:17:06.203 2684-3389/? W/ziparchive: Unable to open '/data/app/cn.wangxiao.zhuntiku-WoI77OMcp7yg9WMUFO_bEQ==/base.apk': No such file or directory
2019-10-22 14:17:06.203 2684-3389/? E/ResourcesManager: failed to add asset path /data/app/cn.wangxiao.zhuntiku-WoI77OMcp7yg9WMUFO_bEQ==/base.apk
2019-10-22 14:17:06.203 2684-3389/? W/PackageManager: Failure retrieving resources for cn.wangxiao.zhuntiku
2019-10-22 14:17:06.210 19612-19612/? D/AndroidRuntime: Shutting down VM
--------- beginning of crash
2019-10-22 14:17:06.210 19612-19612/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: cn.wangxiao.zhuntiku, PID: 19612
java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/data/cn.wangxiao.zhuntiku/.jiagu/libjiagu.so"
at java.lang.Runtime.load0(Runtime.java:928)
at java.lang.System.load(System.java:1633)
at com.stub.StubApp.attachBaseContext(SourceFile:233)
at android.app.Application.attach(Application.java:231)
at android.app.Instrumentation.newApplication(Instrumentation.java:1125)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1080)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6181)
at android.app.ActivityThread.access$1200(ActivityThread.java:232)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7076)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)
2019-10-22 14:17:06.213 1707-3764/? W/ActivityManager: Force finishing activity cn.wangxiao.zhuntiku/app.wangxiao.cn.page_module.SplashActivity
上面报资源文件的错误,下面报.so的错误(好像是用什么加固工具了)。
我自己写了个apk,然后签名,不用第3方加固工具加固。重复以上步骤。发现可以正常运行,也没有报错。(所以不要一上手就扬言要破译哪个APK,先自己搞个APK试试,毕竟自己有源码,可以对比学习。)
所以,不混淆,不使用加固工具加固的APP没有安全性可言!
-
修改反编译出来的源码
其实这个就是我研究逆向编程的初衷:有一个考试软件,一些课程需要收费,我想着是不是能找到它的漏洞,绕过支付的流程,直接观看它的课程。
那么,常见的修改会有2种情况: - 1)修改资源文件
像前面的使用-r参数才回编译成功,所以想要修改资源文件,必须解决上面所说到的问题。
但是为了演示,自己测试用,用自己的APK,可以先不加-r改改布局然后回编译,看看是否生效。
我尝试着改了一下app_name,但是又出现了坑3的问题,不改就不会出现。各种猜想各种试,最后重启电脑问题才解决,所以缓存绝对是apktool的一个巨坑。
- 2)修改smali文件(也就是java源码)
smali属于Java虚拟机的汇编语言,所以修改此文件有很大的难度。
https://www.jianshu.com/p/47a5511e17bf 这篇博客指出了一种技巧
class文件生成dex文件的步骤(命令行操作):https://blog.csdn.net/qq_33898263/article/details/79127447
apk反编译出dex文件
apktool.bat -s d crackme02.apk
二、Jadx
这个工具主要是用来分析源码
下载
https://www.softpedia.com/get/Programming/Other-Programming-Files/Jadx.shtml
使用教程
https://www.jianshu.com/p/e5b021df2170
三、逆向实践
https://www.jianshu.com/p/683720bdfa58
https://bbs.pediy.com/user-592070.htm (脱壳专家)
网友评论