一、工具下载

可以参照这个博客:
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.bat,注意win10在命令行运行时要加上.\,否则会报错如下:

其实最后的提示已经告诉我我们答案。

1.反编译

     .\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:反编译后的文件的输出根目录

apk反编译出dex文件
apktool.bat -s d crackme02.apk

2.修改反编译出来的源码

其实这个就是我研究逆向编程的初衷:有一个考试软件,一些课程需要收费,我想着是不是能找到它的漏洞,绕过支付的流程,直接观看它的课程。
那么,常见的修改会有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

3.重新编译打包(回编译)

  .\apktool.bat b -o E:\ApkNiXiang\MyTool\source\rebuild\my.apk E:\ApkNiXiang\MyTool\source\out

参数说明
d:表示执行编译指令,将反编译后的文件重新打包。
-o:指定输出目录
E:\ApkNiXiang\MyTool\source\rebuild:指定打包后的apk的生成目录
E:\ApkNiXiang\MyTool\source\out:反编译后的文件的输出根目录
执行重新编译打包的过程,不同的APK,不同的开发人员可能会有各种错误导致不成功,建议首先将apktool文件更新到最新,然后再看提示。

4.签名

参照 https://blog.csdn.net/dreamer2020/article/details/52761606即可签名成功,但是要注意一些问题:
1)win10 keytool 出现乱码问题解决方法
https://blog.csdn.net/dongheli/article/details/84065118
在命令行运行chcp 936

5.运行重新打包的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试试,毕竟自己有源码,可以对比学习。)

三、常见错误总结

apktool.bat d -f [需要反编译的目标apk文件名].apk -o [反编译后需要存放的文件] –only-main-classes

  • brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 134):
    解包时带上-r参数,表示不解码资源文件:
    apktool -r -f d test.apk -o test
    但是这样就无法修改清单文件添加debuggable属性了

解决apktool -r无法修改清单文件添加debuggable属性的方法:先用apktool不加-r反编译,在清单文件添加debuggable属性,然后再打包成apk。接着把这个apk用加-r的方式重新反编译。 (但是与前面矛盾,不加-r,就无法重新打包)

  • android12安装时报错:
    android10可以正常安装,运行。android12不行

    adb: failed to install C:\Users\admin\Downloads\tiktok_dcp.apk: Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]

网上有一种说法要对齐:
https://blog.csdn.net/yedekuqi4712/article/details/134689847

对齐之后生成的apk记得要V2签名
实测可行


0 条评论

发表回复

您的电子邮箱地址不会被公开。