安卓逆向 某漫画软件去除签名校验+解锁

admin 2024年12月17日11:14:15评论14 views字数 3621阅读12分4秒阅读模式
一、去除签名保护
安卓逆向  某漫画软件去除签名校验+解锁

虽然换了很多名字,但是这个界面一直没变,老司机应该知道这是什么漫画软件。

首先重签名,闪退。发现是so报错,定位到libfcore,用ida打开。还是老生常谈的方案,直接搜索signatures,有几个结果,随便一个都行,点进去。查看伪代码
安卓逆向  某漫画软件去除签名校验+解锁
比较经典的获取签名值。上方有个pthread_create,创建了一个新的动作
sub_2A5B8
,经常搞破解的对这个应该比较熟悉,这个东西经常搞鬼搞怪。跟进sub_2A5B8。
安卓逆向  某漫画软件去除签名校验+解锁

不难发现它其实在获取安装包的安装路径,然后抽取签名值。所以用一键过签会失败,当然魔高一尺道高一丈,还是有强力过签工具可以解决这个问题的。

继续往下看。
安卓逆向  某漫画软件去除签名校验+解锁

这里有一个对比,就非常明显了。s1对比v62,不一样就给你卡死。解决方案也非常简单,给他自己对比自己就行。如下图,MOV X1, X20,改成MOV X1, X0。

安卓逆向  某漫画软件去除签名校验+解锁
安卓逆向  某漫画软件去除签名校验+解锁

二、解锁漫画

随便点开一个漫画,提示要看视频或者推广才给你阅读漫画。入手点就是这个提示框。观察到有“看视频解锁”和“去推广解锁”两个解锁方式,也是随便选一个。在dex中搜索相关字符串,看看有什么发现。
public ContinueReadDialog(Context context, j.a0.c.a<Unit> aVar, l<? superBooleanUnit> lVar) {super(context, _Context.c(AppExt.a()) ? R$style.AppTheme_Dialog_Night : R$style.AppTheme_Dialog);        j.e(context, "context");        j.e(aVar, "cancelListener");        j.e(lVar, "rewardVerify");this.f6388p = aVar;this.f6389q = lVar;        AppConfig r2 = AppConfig.r();        j.d(r2, "AppConfig.getAppConfig()");this.b = r2.p0();        AppConfig r3 = AppConfig.r();        j.d(r3, "AppConfig.getAppConfig()");        boolean o0 = r3.o0();this.c = o0;if (o0 && this.b) {            setContentView(R$layout.dialog_continue_read_with_popularize);        } else {            setContentView(R$layout.dialog_continue_read);        }this.d = (SimpleTextView) findViewById(R$id.tv_look_video);this.e = (SimpleTextView) findViewById(R$id.tv_not);this.f6378f = (SimpleTextView) findViewById(R$id.tv_read_time);this.f6379g = (SimpleTextView) findViewById(R$id.tv_gold);this.f6380h = findViewById(R$id.ll_add_coins);if (this.c) {            AppConfig r4 = AppConfig.r();            j.d(r4, "AppConfig.getAppConfig()");            String valueOf = String.valueOf(r4.F());            SpannableString spannableString = new SpannableString("看视频解锁" + valueOf + "分钟阅读时间");            spannableString.setSpan(new a(context), 5, valueOf.length() + 533);            SimpleTextView simpleTextView = this.f6378f;            j.d(simpleTextView, "mTvReadTime");            simpleTextView.setText(spannableString);            SimpleTextView simpleTextView2 = this.f6378f;            j.d(simpleTextView2, "mTvReadTime");            simpleTextView2.setText("看视频可获得继续阅读资格");if (this.b) {                a(R$id.tv_popularize, this);            }
只有一个结果,点进去。代码片段如上。然后看一下它是怎么跳下来的,根据跳转往上爬,找到根源。
安卓逆向  某漫画软件去除签名校验+解锁
发现它上面有个boolean类型的返回,根据smali代码可知来源于Lcom/junyue/repository/bean/AppConfig;->o0()Z,继续跳转到声明。
安卓逆向  某漫画软件去除签名校验+解锁
发现还有一个跳转。继续进入x0。这里就是对话框的开关。
publicfinalbooleanx0(int i2, j.a0.c.l<AndroidAdConfig, AdInfo> lVar, boolean z, boolean z2, boolean z3) {        AdInfo invoke;booleanz4=false;        z4 = false;        z4 = false;        z4 = false;        z4 = false;        z4 = false;if (z2 && z0()) {returnfalse;        }if (z && i0()) {returnfalse;        }AllAdConfigz5= z();if (z5 != null) {try {            } catch (PackageManager.NameNotFoundException e) {                e.printStackTrace();            }if (!z5.adSwitch) {returnfalse;            }longcurrentTimeMillis= System.currentTimeMillis() - App.r().getPackageManager().getPackageInfo(App.r().getPackageName(), 0).firstInstallTime;if (z3 && z5.installAfterAd != 0) {if (currentTimeMillis < z5.installAfterAdOrigin * 1000 * 60) {returnfalse;                }            }inti3=this.adSwitches.get(i2, -1);if (i3 != -1) {return i3 == 1;            }if (z5.f3829android != null && (invoke = lVar.invoke(z5.f3829android)) != null && ((invoke.csjStatus && !TextUtils.isEmpty(invoke.csjAdvId) && !TextUtils.isEmpty(z5.f3829android.csjAdAppid)) || ((invoke.ylhStatus && !TextUtils.isEmpty(invoke.ylhAdvId) && !TextUtils.isEmpty(z5.f3829android.ylhAdAppid)) || (invoke.ksStatus && !TextUtils.isEmpty(invoke.ksAdvId) && !TextUtils.isEmpty(z5.f3829android.ksAdAppid))))) {                z4 = true;            }if (z4 && sCurrentAdConfig == null) {                sCurrentAdConfig = z5;            }this.adSwitches.put(i2, z4 ? 1 : 0);        }return z4;    }
修改方法也比较简单,代码开头进行了初始化。保留那一行就行了,其余全部删掉。
.method public final x0(ILj/a0/c/l;ZZZ)Z    .registers 11    const/4 v0, 0x0return v0.endmethod

· 今 日 推 荐 ·

安卓逆向  某漫画软件去除签名校验+解锁

本文内容来自网络,如有侵权请联系删除

原文始发于微信公众号(逆向有你):安卓逆向 -- 某漫画软件去除签名校验+解锁

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月17日11:14:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安卓逆向 某漫画软件去除签名校验+解锁https://cn-sec.com/archives/3516468.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息