某相机的使用

〇、基础知识

一、准备工作

查壳和签名验证

软件无壳。
安装原包,正常。
直接签名后安装,发现闪退。
应该是签名验证,使用mt一键hook签名验证

如果没有会员也可以尝试用四哥的kstools(未经测试)
这里提供mt一键hook后被更改的文件,解压后直接复制到apk签名即可过签名验证

hook签名后打开正常。

关键词/布局筛选

查看可能作为判断依据的内容:
吾爱破解 - 涛之雨

上图左:升级到会员的提示
上图右:订阅会员解锁和右下角的会员表示

修改VIP

找到布局

升级到会员为例
如下图左,在ares资源文件搜索关键词
吾爱破解 - 涛之雨
如上图中,在xml中搜索刚复制的ID
有两个结果,点开第一个(根据文件名猜测第一个有可能)

如下图左,定位到ID所在位置,发现该ID在一个绝对布局里,向上找到该布局的ID复制

找关键判断

吾爱破解 - 涛之雨
如上中图,到dex中搜索该ID

此处建议下拉框里选择数字格式,并勾选16进制,可以大大缩短搜索时间

如上右图,只有一个赋值语句,点击下面的那个方法

转java,如下图左,ID对应的布局赋值给了参数Q
吾爱破解 - 涛之雨
如上图中,搜索this.Q参数,在方法H中,且在该行最后有一个【三元运算符】(又称:冒号表达式)
设置了关键布局的显示与否。前面的GoogleSubscriptionUtil.a就是突破口了
如上图右,导航中选择H方法(不清楚请点击【这里】

尝试修改

如下图左上,点击该处,跳转到如下图左下所示的GoogleSubscriptionUtil.a定义处。

吾爱破解 - 涛之雨
如下图左下,转java有两个赋值不知道为啥是键盘状态下标(SubscriptFlag4Keyboard)反正是个bool的布尔值。

我们需要批量替换所有赋值的语句。
把形如

1
put-boolean 寄存器, Lnet/momentcam/aimee/utils/GoogleSubscriptionUtil;->a:Z

的赋值语句前面插入一句赋值寄存器为1,

1
2
3
4
const 寄存器,1
# 理论上应该是const/4 寄存器,0x1
# 为了省事可以如上简写
put-boolean 寄存器, Lnet/momentcam/aimee/utils/GoogleSubscriptionUtil;->a:Z

祭出我们的神器:正则替换(介绍参见【正则表达式】

mt管理器的正则替换基于java,支持$1替换(数字递增)
顺便说一句,SciTE库的 正则替换是使用\1替换(数字递增)

构建匹配的方法,很简单,遇到元字符就加转义,把寄存器的部分用(.*?)替换,待匹配即可

1
put-boolean (.*?), Lnet/momentcam/aimee/utils/GoogleSubscriptionUtil;->a:Z

注:此处的问号是非贪婪匹配。。。不然会匹配尽量长的部分(还好没有匹配换行。。。)

如上图中,匹配到了dex内所有的赋值。

注意勾选 “使用正则表达式”

点击替换,使用表达式

1
const $1,1\nsput-boolean $1, Lnet/momentcam/aimee/utils/GoogleSubscriptionUtil;->a:Z

如上图右,点开dex即可发现所有的赋值都被替换成了需要的形式。

测试效果

吾爱破解 - 涛之雨

如上图左、上图中,VIP的提示和VIP右下角标也不见了。
可是再尝试后发现,如上图左中间HD图片下载不了。

点击HD按钮后,如上图右,需要付费ヽ(#`Д´)ノ

注:如果没有所需的网络环境不会弹出付费窗口,直接显示错误

去内购

确定错误弹窗位置

弹窗的内容是支付失败,到ares中搜索,
如下图左上,有两处。
为了确定哪一处是此处的弹窗,改成不一样的,再次测试。
此处我改的是一个是支付失败1一个是支付失败2至于为什么两个都要改,因为如果两个都改了结果却还是弹出支付失败的话就要考虑是不是服务器验证了。

吾爱破解 - 涛之雨

如上图左下,成功定位到是第一个支付失败,复制其ID
如上图中,dex搜索,发现除去第一个变量,其余有四处调用该弹窗。
如上图右,点开后发现该调用上面没有判断if-xx,说明该方法是判断完失败后才调用的。

分析判断

吾爱破解 - 涛之雨
如上图左,转java,此类里有只有一个成功和一个失败的方法,且用public修饰,
如上图中上,复制该类名,全dex搜索该类名,查看调用
如上图中下,除了该类本身,只有一个类调用。
如上图右,点开转java,找到刚才搜索的类(PayHD
有两个判断,如果SnareaPreterencesManagel.a().a(E(),false)是空,就调用s方法(应该是支付的方法),如果bool值false的话,弹出错误弹窗。
因此直接改其值为1即可。

依次修改

吾爱破解 - 涛之雨

因为四个类的判断不相同,
如上图自上至下,依次去更改对于SnareaPreterencesManagel.a().a(E(),false)返回值的判断
注意的是代码的格式不相同,改的时候也要注意不是都删掉判断

注:笔者更习惯加上#,注释掉,方便二次修改和恢复。
cartoonshare类和randomcartoon类需要特别注意,一个是有两层判断(就是上面的例子),一个是需要改成goto

至此,完成完美破解。

附件

mtHOOK后的文件

mt一键HOOK签名后apk中有改动的文件,解压后直接复制到apk签名即可过签名验证

https://www.lanzous.com/iapdzng
密码:@52pojie.cn

原包

原件的不限速下载链接

原包CX不限速下载

修改后的demo

修改后的demo版本(经过混淆加密,未加固)
因为超过100MB,精简了lib,分成两个apk,如果不知道你该下载哪一个,可以【点这里】查看详细区别和说明,如果不想看,可以直接点第一个armeabi-v7a,如果打不开,则更换第二个

类型 链接 密码
armeabi-v7a https://www.lanzous.com/ialjnra 密码:gqv2ae
arm64-v8 https://www.lanzous.com/ialjmqd 密码:e1ca0
涛之雨 ©2022 |Powered by Hexo