本帖最后由 ttimasdf 于 2017-11-10 17:28 编辑
官方介绍
全球第一个以插件形式提供二次元体验的开放平台!!!
只提供插件不提供内容
内容如有问题与平台无关(请反馈给插件开发者)
200多个插件(漫画、轻小说、动画、资讯、图集、周边)
多国语种的内容
20多种彩蛋(探索的乐趣;)
开放平台(http://sited.noear.org/dev/)
跨平台统一体验(Android、iOS、Win 10、macOS)
简单来讲,是一个可以扩展的本子/漫画获取器。
原文首发于我的博客
下面我们开始,
拖进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.w 和org.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";
打包后app已发布于原创发布区
https://www.52pojie.cn/thread-659876-1-1.html |