实验对象:准题库APP。
按照https://github.com/F8LEFT/FUPK3
里的说明

1.搞出壳内真正的dex文件

1.改源码,刷系统。 (只限制Nexus5 hammerhead手机,4.4源码。)
2.编译Fupk3.apk(作者的这个工具有点吊,但是布局功底有点差劲:这个APK的dump时显示的信息如果过长,会显示不清楚,发现作者用的是表格布局。立马给他改成ListView显示)
3.编译FUnpackServer会生成一个jar包,这个包是用来修复dump后的dex文件的。

2.重新打包apk

参照https://www.52pojie.cn/thread-632562-1-1.html这个,重新打包apk。
- 快速找到原应用真正的application类
先不要修正application的name,让它报错,日志里就能分析出来。
或者搜索关键字
```.super Landroid/support/multidex/MultiDexApplication```或者```.super Landroid/app/Application```

  • 去除某数字的东西
    1.清单文件里
    2.一般SplashActivity会有个mark()方法,注释掉。

3.运行重新打包签名后apk

除了https://www.52pojie.cn/thread-632562-1-1.html文章里提到的几处要修改的某数字的东西外,可能不同的应用还得有地方要修改,视情况而定。比如我的BaseApplication.smali:

 #.line 37
    #invoke-virtual {p0}, Lapp/wangxiao/cn/base/BaseApplication;->getApplicationContext()Landroid/content/Context;

    #move-result-object v0

    #invoke-static/range {v0 .. v0}, Lcom/stub/StubApp;->getOrigApplicationContext(Landroid/content/Context;)Landroid/content/Context;

    #move-result-object v0

    #sput-object v0, Lapp/wangxiao/cn/base/BaseApplication;->c:Landroid/content/Context;

这几行的意思是把com.stub.StubApp的application存到一个变量,但是现在这个类我肯定要让它消失,但是这个变量还是要赋值,后面会用到。于是我改成:

    sput-object p0, Lapp/wangxiao/cn/base/BaseApplication;->c:Landroid/content/Context;

直接把this赋值给这个变量。
运行时,报各种错误, 不同手机环境报错还不一样 。
- 4.4 nexus手机

```java.lang.RuntimeException: Unable to instantiate application cn.wangxiao.application.SysApplication: java.lang.ClassNotFoundException: Didn't find class "cn.wangxiao.application.SysApplication" on path: DexPathList[[zip file "/data/app/cn.wangxiao.zhuntiku-1.apk"],nativeLibraryDirectories=[/data/app-lib/cn.wangxiao.zhuntiku-1, /vendor/lib, /system/lib]]```
因为我这个项目有Tinker,为了排除它的影响,自己搞个简单的app,也是报最先加载的类找不到。
- 9.0 vivo iqoo手机
```java.lang.VerifyError: Verifier rejected class com.scwang.smartrefresh.layout.SmartRefreshLayout: void com.scwang.smartrefresh.layout.SmartRefreshLayout.(android.content.Context, android.util.AttributeSet, int, int) failed to verify: void com.scwang.smartrefresh.layout.SmartRefreshLayout.(android.content.Context, android.util.AttributeSet, int, int): [0x6E] 'this' arg must be initialized (declaration of 'com.scwang.smartrefresh.layout.SmartRefreshLayout' appears in base.apk)```
网上找到一些办法,但是都没有解决问题:
1.首先启动的类没有放到主dex
[https://blog.csdn.net/daitu_liang/article/details/72987378](https://blog.csdn.net/daitu_liang/article/details/72987378)
我尝试将application相关的类挪到smali文件夹下,没有解决问题。
2.反编译和逆向出现:java.lang.VerifyError(新问题样本)
[https://blog.csdn.net/u011728480/article/details/78874137](https://blog.csdn.net/u011728480/article/details/78874137)
我发现我的BaseApplication.smali确实确实.locals可声明了一个,明明最大是v2,.locals却是4,
若改成3的话,9.0手机又会出现别的问题。
3.multidex论
[https://blog.csdn.net/heqiangflytosky/article/details/50974317](https://blog.csdn.net/heqiangflytosky/article/details/50974317)

求路过的大佬,可以指点一下如何解决上面的问题呢?(如何将脱壳的后的dex重打包,能正常运行?

后来听行业人士说,dalvik下根本无法破解vmp保护的apk。我之前出于懒惰,都是基于4.4的dalvik源码。准备用art源码搞搞看。


如有疑惑或者好的建议,或者想纠正作者的博文,请联系如下
公众号:微信公众号搜索“修符道人”或者扫描下方二维码
qrcode_for_gh_97ef1213cc5b_258.jpg

微信号:XinYi1349308479
QQ邮箱:1349308479@qq.com


0 条评论

发表回复

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