破解某XX全能王的本地功能
本帖最后由 风绕柳絮轻敲雪 于 2019-12-9 12:14 编辑1.直接签名安装,出现了如图所示的盗版提示
2.尝试在字符串中搜索该盗版提示,找到一个,复制其ID
3.DEX++编辑器里搜索该ID,找到其引用的地方,有两处(第三个在R类中,自动排除
4.分别点进去,都是调用了j这个方法来判断,为true也就是1就执行盗版提示
public static void a(@NonNull Context context) {
if (g.j()) {
Toast.makeText(context, context.getResources().getString(R.string.a_msg_pirate_app_prompt), 1).show();
}
}
5.跳转到j这个方法,修改如下,全都返回为零就行了,当然如果你有闲心你也可以关注一下b这个变量,它的值最终来源于scannercs这个so文件里的initEngine,进去看了一哈,原来是签名验证在so上,不过这里貌似不影响使用,就不用关注它了
public static boolean j() {
return (b == 0 || b == -3) ? false : true;
}
修改如下
sget v0, Lcom/intsig/camscanner/b/g;->b:I
if-eqz v0, :cond_b
sget v0, Lcom/intsig/camscanner/b/g;->b:I
const/4 v1, -0x3
if-eq v0, v1, :cond_b
const/4 v0, 0x0
return v0
:cond_b
const/4 v0, 0x0
return v0
6.点击升级按钮,它会跳转到升级到高级账户这个页面,我们依旧搜这个字符串
7.重复步骤二步骤三,找到几处引用的地方,主要看最后一处,看一下代码,最终是返回一个字符串对象
private static String a(Context context) {
if (!u.d()) {
return context.getResources().getString(R.string.a_label_upgrade_to_premium);
}
if (u.f()) {
return context.getResources().getString(R.string.a_super_vip_desc);
}
return context.getResources().getString(R.string.a_label_premium_description);
}
8.看一下f方法的代码,其实修改这个条件就够了,因为他要满足第一个
f方法
public static boolean f() {
if (!d()) {
return false;
}
Object obj = 1 == w.g() ? 1 : null;
long h = w.h();
Calendar instance = Calendar.getInstance();
instance.set(2100, 1, 1);
long timeInMillis = instance.getTimeInMillis() / 1000;
if (obj == null || h <= timeInMillis) { // w.g()为1或者h大于4102416000就为true
return false;
}
return true;
}
9.跳转到d看看,出现了两种状况,去e看看,emmm,继续跳到f看看,f这代码有点熟悉,继续跳到b看看,再看看h方法
d方法
public static boolean d() {
if (e() || 1 == w.g()) {
return true;
}
return false;
}
g方法
public static long g() {
return y.a().b("qp3sdjd79xhdas02sd", 2);
}
e方法
public static boolean e() {
return 0 == w.f();
}
f方法
public static long f() {
return y.a().b("tafdseddfeasfeafaewf", -1);
}
h方法
public static long h() {
return y.a().b("tkreds3sdvv22ccsx3xd3", 0);
}
b方法
public final long b(String str, long j) {
e();
return this.b.getLong(str, j);
}
10.这里区别开来和不区别开来也行,这样改满足了两个条件了,改的时候其实满足一个就行了,最后一个超级会员满不满足都行了,反正就是图个好看
public final long b(String str, long j) {
if(str.equals("afdseddfeasfeafaewf"){
return 0;
}
if(str.equals("qp3sdjd79xhdas02sd"){
return 1;
}
else{
e();
return this.b.getLong(str, j);
}
}
修改如下
invoke-direct {p0}, Lcom/intsig/utils/y;->e()V
.line 166
iget-object v0, p0, Lcom/intsig/utils/y;->b:Landroid/content/SharedPreferences;
invoke-interface {v0, p1, p2, p3}, Landroid/content/SharedPreferences;->getLong(Ljava/lang/String;J)J
move-result-wide p1
const-wide/16 p1, 0x1//这里改为0或1都行,0就是高级会员,1就是超级会员
return-wide p1
11.打包安装完事,当然某些联网功能是无效的,所以说是本地破解,仅限娱乐,没测试破解功能,自己动手自己去测试吧
由于论坛规定,所以不提供成品....... 风绕柳絮轻敲雪 发表于 2019-12-7 15:48
没试过 应该不能
扫出的照片弄到相册就可以分享了,不出QQ还是要绕步吧。 夜郎国 发表于 2019-12-11 15:25
要是能分享到成品就好了
哈哈,如果放出成品,就失去了技术探索的过程呀。 嗯,下载看看 请问扫描的照片用微信分享可以吗?有试过吗 xuanqi521 发表于 2019-12-7 15:45
请问扫描的照片用微信分享可以吗?有试过吗
没试过 应该不能 很好,赞一个 则么没有下载链接? 这个破解在线的功能有点不现实了,想用得爽估计还是得买 链接呢 大大 之前用的全能王水印是真的不舒服 楼主给个成品链接试试