Contents

多多猫app破解思路

Contents

准备在吾爱上卖艺求荣,在这里为逆向思路做个简单整理。

拖进JADX,直接搜索字符串 VIP 定位到 org.noear.ddcat.controller.a.aq

    public void onStart() {
        // ...
        String replace = z.b(R.string.format_live_days).replace("{num}", cc.i);
        if (cc.e > 0) {
            CharSequence charSequence = cc.e > 1 ? "SVIP" : "VIP";
            this.d.setText(charSequence + " LV" + cc.f + "  " + replace);
        // ...
        } else {
            this.d.setText("LV" + cc.f + "  " + replace);
            this.c.setTextColor(cd.b().b);
        }

可以看出这里在对主页上VIP等级显示的字符串做处理。这个cc.e一定是VIP等级。而这个cc.e在哪里呢?从import语句中可以找到cc是导入了org.noear.ddcat.dao.cc类。

public final class cc {
    public static long a = e.a.getLong("userID", 0);
    // ...
    public static int e = e.a("isVip");
    public static int f = e.a("level");
    // ...
    static String m;

    public static void a() {

这里的字符串特征也很明显啦,e是VIP等级,f是用户等级。我们继续搜索cc.e在何处被赋值。搜索赋值语句这里有两种方法。最简单的当然是在反编译代码里搜索 cc.e = 。但是这样的话类内赋值或者反编译失败的方法会检索不到。所以我这里选择搜索smali。使用以下正则语句搜索apktool解包开的目录:

sput v[0-9]+, Lorg/noear/ddcat/dao/cc;->e:I

定位到三个类,org.noear.ddcat.dao.a.u org.noear.ddcat.dao.a.worg.noear.ddcat.dao.a.x。将搜索到的语句连同上下文(主要是调用函数获取VIP等级的部分)替换如下,这样VIP等级与用户等级永远为3。

    const/4 v1, 0x3

    sput v1, Lorg/noear/ddcat/dao/cc;->f:I

    const/4 v1, 0x3

    sput v1, Lorg/noear/ddcat/dao/cc;->e:I

然后apktool打包签名即可。

彩蛋:VIP等级与名称[斜眼]

case 1: return "VIP";
case 2: return "SVIP";
case 3: return "SSVIP";
case 201: return "MVP";
case 300: return "SMVP";
case 301: return "DMVP";
case 302: return "SMVP";
case 306: return "TMVP";
case 310: return "master";
case 311: return "developer";
case 312: return "spreader";
case 313: return "supporter";
case 314: return "container";
case 315: return "servicer";
case 316: return "translator";
case 321: return "女神";
case 322: return "可愛";
case 323: return "女仆";
case 331: return "男神";
case 332: return "强壮";
case 333: return "男仆";
default: return "VIP";