专栏名称: 吾爱破解论坛
吾爱破解论坛致力于软件安全与病毒分析的前沿,丰富的技术版块交相辉映,由无数热衷于软件加密解密及反病毒爱好者共同维护,留给世界一抹值得百年回眸的惊艳,沉淀百年来计算机应用之精华与优雅,任岁月流转,低调而奢华的技术交流与探索却
目录
相关文章推荐
macrozheng  ·  超越 Nginx!号称下一代 Web ... ·  2 天前  
PCEC 可持续发展服务  ·  技术贴 | 浅析正压保护等级的划分 ·  2 天前  
东方财富网  ·  逆势狂飙!机器人材料革命来了 ·  4 天前  
东方财富网  ·  逆势狂飙!机器人材料革命来了 ·  4 天前  
质量与认证  ·  新版《检验机构认可规则》发布实施(附全文) ·  5 天前  
质量与认证  ·  新版《检验机构认可规则》发布实施(附全文) ·  5 天前  
狐狸说安全  ·  最吸金的副业方向,绝对少不了这一点! ·  5 天前  
51好读  ›  专栏  ›  吾爱破解论坛

【Android 原创】初探开心消消乐的内购破解

吾爱破解论坛  · 公众号  · 互联网安全  · 2017-05-25 11:40

正文

把问题写到前面吧:
重新登录之后还有的,但是28的只能买4次,第5次就直接提示“本次支付失败”。应该是每日限额。


这句话代码里搜不到,怀疑是在lua脚本内做了控制,lua的解密正在努力,不过还没什么突破,也希望各位大神给点指导

开心消消乐相信很多人都不陌生,网上我只找到1.14版的内购破解,现如今已经升级到1.44了,只好自己动手试着破一下。

其实本来是想修改程序的内部逻辑,实现步数不递减,精力无限啥的,后来发现加密的lua文件真不是好弄的,所以就先从内购破解入手了。


把apk直接丢进Androidkiller反编译没什么问题,然后发现有2个dex文件,仔细看smali文件夹下的源码,发现只是个保护壳,
真正有用的代码都在smali_classes2下,于是果断删掉smail,然后smali_classes2->smail,修改AndroidManifest.xml中的application入口,
这样打包安装之后,可以运行,但是很快就发现签名验证的问题,搜了一下signature发现好多地方啊,偷懒借用
看雪的一篇帖子:http://bbs.pediy.com/showthread.php?t=190876 中提到的用官方包的RSA文件替换的方法绕过验证。

这种方法的好处很明显:简单!
坏处也很明显:不通用,要么给系统打补丁,要么依赖于xposed框架,否则这种篡改RSA之后的apk文件根本没法安装。
然后正式开始内购的破解,这里用的思路是走电信运营商的支付机制,并把所有的支付接口都调用电信,目的是简化破解过程。
搜索电信“46003”,总共6处。


第2,3处是com.baidu.location包下的,看了下都是一堆比较之后返回一个值,那么索性直接返回吧,贴一个修改之后的:

.method public static do(Landroid/content/Context;)I

    .locals 2

    const/4 v0, 3

    return v0

.end method


这2处修改后来觉得可能是不必要,不改也无所谓的。

第1,4处是2个enum类型里的函数,也是一堆判断之后返回一种运行商类型,那么修改成直接返回成电信的:
cn.egame.terminal.sdk.log.at.a(Ljava/lang/String;)修改成


.method public static a(Ljava/lang/String;)Lcn/egame/terminal/sdk/log/at;

    .locals 2

    sget-object v0, Lcn/egame/terminal/sdk/log/at;->a:Lcn/egame/terminal/sdk/log/at;

    return-object v0

.end method


另外一个也类似。

第5,6处都是一个比较,那么把比较后面的if-eqz删掉,让程序流程永远走到电信的通道即可。

到这里已经可以让所有手机走电信通道了,接下来就是让所有支付直接成功。
搜索paysuccess,payfailed发现下面这处比较可疑,
 
尝试把payfailed改成paysuccess却发现
点支付程序直接退出了。
仔细看了下java源码,应该是paysuccess,payfailed和paycancle对应了3个具体处理函数,
既然把payfailed改成paysuccess不行,那么把payfailed内部的处理函数改成和paysuccess内的一样就是了,
修改之后安装运行,果然可以了,可以不弹支付界面直接成功了。

最后有个小插曲,本来昨天破解到上面就完成了,我今天尝试的时候开着飞行模式,居然被提示
“当前正处于飞行模式,无法支付,是否关闭飞行模式?”,晕倒,继续改吧,搜索这句话
 
继续搜索animal_tip_pay_change_airplane_mode,下面这处可疑,
 
看smali代码,函数名isAirPlaneModeOn,
就是它了,直接改成:


.method public isAirPlaneModeOn()Z

    .locals 2

    .line 37

    const/4 v1, 0x0

    return v1

.end method


顺便把isAnySimCardAlready和isSimCardAlready都改了,到这里为止开着飞行模式也可以直接支付成功了。

新人刚开始接触安卓逆向,内容粗浅,高手勿喷

忘了成果图,补上

--官方论坛

www.52pojie.cn

--推荐给朋友

公众微信号:吾爱破解论坛

或搜微信号:pojie_52