|
|
本帖最后由 chenxin 于 2024-8-7 09:02 编辑
【说明】
本贴不仅说明了逆向方法,同时记录了逆向过程,故文字部分较多,想看的需要耐心一点了,也算给大家在破解时提供一些思路。
若不想看过程的话,直接看修改解锁部分的 6、7、10 步即可
【前言】
之前在求助帖看见了有说签名过不了的,于是就用mt的去签试了一下,没有闪退,想着下载下来了于是就打算看看怎么弄掉会员。
本文操作需要的工具和成品我都放在文尾了
【逆向过程】
【阶段1】
1. 在打开这个软件时,看到了设置中的未解锁字样,直接mt搜索 “未解锁”关键词,定位到了SettingsActivity的OnResume()方法。
2. 发现时调用的 m.J方法,于是算法助手一顿拦截修改返回值,直接变成已解锁了。
刚开始以为事情结束了,但当我点击fastBoot功能的时候,还是弹了一个未解锁的框,而且这个框算法助手还定位不到。
【阶段2】
1. 这个时候我就纳闷了,于是又使用开发者助手定位控件id,发现了弹窗调用的方法是c.c.a.z3.h类,然后用算法助手跟踪,发现是在native方法调用的。
2. 一看是native,我直接换方向使用ProxyPin去抓使用订单解锁的响应,不过哪个输入框是根据微信的订单号长度来的,如果长度不符合则不会有任何反应,这也是我尝试了几次才发现的。
3. 造假的订单号后我查看ProxyPin的响应,发现有result_code,我使用请求重写,修改这个值,我改成1是验证失败,这个时候我并没有发现端倪,以为是result_code有其他的值,但是我改成其他的值任何提示都没有,这个时候我觉得这个方法已经不行了。
【阶段三】
1. 既然这种方式不行,那只有看so了,于是我用IDA导入唯一的 "libadbhelper.so",因为上面有一个m.J方法是native方法,所以我就直接先查看的这个函数;然后使用反汇编,发现这里面调用了很多Java中的方法,于是我想查看具体调用的哪些方法,但是它居然对字符串加密了,mt编辑so也不能搜索任何字符值。于是看了看雪的几篇帖子,按着方法操作了但是并没有效果。
2. 看雪无果后,我搜索so解密方法无果,便换一种思路搜Lsposed dump so插件,便找到了FunELF这个插件,这个工具我放在文尾了。这一次,成功地拿到了字符串解密后的so,于是用UN管理器查看,我尝试使用IDA查看,但是还是不能查看解密后的字符串,便直接使用UN管理器了(无会员版)。
3. 解密后,我就查看之前的m.J方法,尝试找到判断是否会员的地方,奈何太菜看不懂汇编啊 ,但发现了有调用getString的地方,那肯定直接猜测是SharedPreferneces本地存储了。
【阶段四】
1. 发现了是SharedPreferences,于是我又把目光聚集到了订单解锁的地方,于是找到了校验订单号的native方法 "c.c.a.i2.run()",我使用UN管理器打开这个函数,直接搜索cmp指令,发现会将result_code 和 1、2比较,2是直接失败的,那么成功校验的就是1了,但是主要的逻辑却看不懂,在翻阅这个函数的汇编代码的时候,解密后的so会显示调用了哪些Java方法,注意到了 "b.s.m.K" 这个方法,这个方法应该是比较两个值,一个是响应中的result中的值,一个是内置的值,可能是算法加密生成的,这个K也是一个native方法,应该是加密验证之类的。
2. 我直接算法助手暴力返回 true,便能成功解锁了。
【修改解锁】
- 经过上面的分析,发现关键的地方是 订单号满足长度->发送请求->验证响应中的result_code->将result值和内置的一个值加密比较->成功后向SharedPreferences中putString两个字符串,一个是sign值、一个是verify_code、一个是payment这个是缓存订单号的。
- 有了这样的流程,便想在app第一次启动的时候,调用SharedPreferences类强行加入sign和verify_code,因为在上面的步骤中我已经解锁成功了,有正确的这样的值
- 发现甲壳虫在启动的时候会弹窗用户协议,那么直接在弹窗这些写逻辑就行了,只会在第一次启动的时候插入SP。
- 根据弹窗定位,找到了这个方法 -》 "b.b.c.i$a.h",那么直接在这里完成就可以了。
- 想使用SP,那么必须获取Context和对应的SP,在上面分析的过程中,发现了工具类 b.s.j的静态方法a,传入Context就可获取
- 要插入的 smali代码 “b.s.j”类
- # 声明Context成员变量
- .field public final context:Landroid/content/Context;
- # 构造器对定义的Conext类型变量赋值 <init>方法中
- iput-object p1, p0, Lb/b/c/i$a;->context:Landroid/content/Context;
- # 在h方法体开始时插入(456行)
- # 注意修改寄存器的数量
- .registers 8
- const-string v1, "sign"
- const-string v2, "verify_code"
- const-string v3, "CNQzr9CPhMwyW9kxfL3N-A"
- const-string v4, "rymrvt"
- iget-object v5, p0, Lb/b/c/i$a;->context:Landroid/content/Context;
- invoke-static {v5}, Lb/s/j;->a(Landroid/content/Context;)Landroid/content/SharedPreferences;
- move-result-object v5
- invoke-interface {v5}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;
- move-result-object v5
- invoke-interface {v5, v1, v3}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
- invoke-interface {v5, v2, v4}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
- const-string v3, "payment"
- const-string v4, "0000000000000000000000000"
- invoke-interface {v5, v3, v4}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
- const-string v3, "server_url"
- const-string v4, "https://124.221.36.17/adbhelper/pro"
- invoke-interface {v5, v3, v4}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
- invoke-interface {v5}, Landroid/content/SharedPreferences$Editor;->apply()V
复制代码
然后修改上面说的校验加密验证的K方法,直接将native方法改为 Java方法,smali修改如下: - # 直接将 b.s.m.J方法替换成如下:
- .method public static K(Ljava/lang/String;Ljava/lang/String;)Z
- .registers 3
- const v0, 0x1
- return v0
- .end method
复制代码
这样Java层的就修改完成了,我以为这样就可以了,但还是不行,怀疑可能是在验证的时候有其他的存储手段做验证,具体就不知道怎么处理了。 上面这种方法显然不行,那就只有第一次进软件的时候进行手动解锁了,这便需要修改so了。 使用UN管理器加载原始的so文件,找到 "Java_c_c_a_r2_run"函数,过滤指令 "#1" ,找到 cmp 那一行 ,点击,将#1改为#2。然后保存编辑,然后替换重新签名即可
【总结】
1. 其实上面的h()方法在修改的时候,我们只需要放入 payment这个key到SharedPreferences就可以了,反正其他的都没啥用,大家可以直接删掉无用的smali代码。
2. 暂时还未找到直接修改解锁版的地方,需要手动解锁,大家若有更好的方法欢迎评论区讨论交流。
3. 需要的工具和最后的修改包我放在后面了
4. 使用成品时需要到解锁页面手动点击解锁即可
【使用的工具】
【成品】
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
-
查看全部评分
总评分:好评 +6
金币 +7
|