吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 74759|回复: 76
收起左侧

[Android 原创] Android逆向之旅——GG大玩家应用破解实战分析

  [复制链接]
fxb960704 发表于 2017-12-4 08:58
1.前言
    相信提起手游辅助界一免ROOT辅助神器——GG大玩家大家都不陌生,在本人印象中他应该是业界第一个推出沙盒机制修改游戏的应用。他提供诸多游戏专用MOD辅助模块,运行时动态注入,实现无ROOT情况下HOOK游戏进程,达到破解效果(本人有一款同样原理的辅助软件——破解沙盒,基于VA二次开发的)。我们今天的主角也是他,我们发现他的所有MOD的使用都是要消耗积分的,而积分需要充值购买,另外有VIP机制,VIP免积分但一年需要120元。这肯定让广大游戏爱好者又爱又恨。同时对于我们这些逆向爱好者,简直是一种折磨。在本文发布前市面上是有GG大玩家某些模块的免积分版的,但只能需要哪一个替换哪一个,根本不能满足需求。同时CRACKer都是追求完美破解的,不能停步于此。扯了这么多本文正式开始,本文将会带着大家完全利用手机端完成GG大玩家离线VIP版的修改!
2.工具
MT管理器
免ROOT抓包

3.MOD破解初探
在正式开始VIP版制作前,本着授人以渔的至高理念,先带领大家完成市面已有的GG大玩家MOD模块破解。我们先来到GG的内部存储路径(/data/data/com.iplay.assistant/),一阵扫荡之后我们发现”/files/localsandboxgame/localgame”文件存放着重要信息,我们这里找个了在线json格式化工具来更清楚的观察。



不过多的介绍其他无用键值信息,我们看到红圈标注的便是当前游戏MOD存放位置,那么废话不多说,直接找到他,因为没有后缀名我们不能直观的判断他的格式,使用HEX编辑器打开看看。



我们一眼便可以看出它是ZIP压缩文件,那么APK安装包其实也是ZIP格式的,直接用MT管理器以“APK查看”



因此MOD其实就是APK文件,毫无疑问直接打开classes.dex





结构非常简单,而且没有加固保护,也没有混淆,那么看到trial试用这个扎眼的包,直接去看看,因为类实在少的可怜,所以不需要什么技巧,一个个看呗。





如此直白,修改不掉都对不起九年义务教育,直接让该方法始终返回真即可,smali代码如下:const/4 v0 1return v0大功告成,这就是直接破解MOD的思路,但破解完毫无成就感,那么多MOD我就算搞个批处理工具最终也只能单个替换,简直是鸡肋。

4.离线VIP版初探
说完上面鸡肋的破解方式,我们有了个大胆的想法,能不能直接破解GG大玩家本体,实现无限积分或者VIP的功能呢?但我的心里同时也没底,因为如果MOD与GG大玩家验证分离,MOD单独完成会员信息验证,我们破解GG大玩家是南辕北辙的。但即便如此,不去尝试肯定是失败,不如试一试。
我们考虑到gg那个小悬浮窗,包括界面上提示的信息,而我们在MOD中是找不到的,因此断定悬浮窗的界面肯定GG大玩家中。首先GG大玩家也没有加固保护,我们尝试搜索关键字,但无论是dex文件还是arsc资源文件都找不到。当然不排除在so文件或者加密存储在dex文件中再或者是layout和图片资源中,毕竟是手机端破解,我们暂时不考虑加密存储和so这些因素,尝试在资源目录assets中寻找,果不其然里面有个plugin-center.apk文件。成功锁定目标后,那些关键字符串我们也陆续找到了。同样是没有任何保护(真的不得不说GG大玩家开发者心真大呀,天天搞别人就不想想会不会有人搞他),这也是值得我们窃喜的地方。


在不登录的情况点击红色位置会提示“需要登陆”,搜索字符串常量定位到以下一个结果





看一下关键的smali代码





首先发现这个Toast是在一个switch分支中的,之后是获取PluginEntry类的usrProfile字段,如果为空将会弹出提示。我们同时注意看到第84行会调用OnPluginUIShow方法,推测这个就是显示MOD界面的方法。综上所述,将第一个if跳转改为goto语句才有机会加载MOD view。果然,修改这里之后我们成功的在没有登录的情况下显示了MOD界面。



同时如图也遇到了新的问题,我们的金币不够该怎么办,看到有关键提示“试玩机会已用完”,回到dex中搜索字符串常量,搜索到唯一一个方法。



找到关键的smali代码如下



发现一个关键的字符串信息“尊敬的vip用户,您可以免费解锁此功能”,并且上图的第一行smali代码就是取PluginEntry类的freePermission字段来判断是否为vip。那么修改思路主要有两个,一是简单粗暴直接修改本句smali下的if语句,二是来到PluginEntry中为freePermission属性重新初始化为真,在本例中两者都可以,但在更大型的app中推荐第二种,因为检测vip权限的地方不唯一的话要修改N条跳转。修改完效果如下:



是不是已经成功了呢?兴致勃勃的点了一下解锁。。。。。。然后,



果然开发者还不至于这么low,肯定在完成这些敏感操作时还会有验证,那么继续搜索字符串吧,结果我们搜遍了整个GG大玩家也没有找到。不仅心里咯噔一下,莫不是在MOD中检测的,这就日了狗,刚刚的工作岂不是白做了,赶紧去MOD的路径下搜索一番,也没有!瞬间心里爽多了——有戏。那么这个弹窗哪冒出来的呢?


5.联网自校验
带着上面的疑问我们下载了手机抓包软件——Packet Capture,这是一款利用安卓自身VPNService框架来实现在无ROOT环境下捕捉封包的软件,要注意的是当你想抓取https协议时需要安装软件里面提供的证书,但本例子中不需要。抓包截图如下



只展示一下请求头,请求体中包括我的设备信息,插件信息什么的就不截了




这是服务器响应信息,其中Unicode编码的字符串“\u767b\u5f55\u65e0\u6548”转为中文就是“登录无效”,而code键对应的值“10003”便是提示的错误码。现在一切都很清晰了,服务器的校验,我们可以搜索请求的uri  “/api/v1/commodity/free_get”来定位校验方法。找到如下两个类



竟然有两个,那么是两种不同的检测方法还是这两个类存在某种合作关系呢?首先尝试查看z类的关键方法






如上图是z类中关键smali代码,原来是他调用了aj类,那么两个类的关系就很明确了,aj类可能是为了完成各种网络请求而封装的,这样我们只需考虑z类就好了。不过问题又来了,z类的这个方法也没有处理服务器响应的结果呀,不能再这里修改逻辑怎么办?这就需要我们找到调用z类的地方了。那么我们在手机上如何查找交叉引用信息呢?这就需要smali语法作为我们的坚实后盾了。
方法的表示形式:  
Lpackage/name/ObjectName;->methodName(III)Z         
Lpackage/name/ObjectName  表示类名         
methodName   表示方法名         
III   表示参数(这里表示为3个整型参数)说明:方法的参数是一个接一个的,中间没有隔开
我们尝试构造一下这z类的o方法的smali形式(在此不需要考虑调用时的invoke-XXX指令)
Lcom/gameassist/plugin/z;->o(Ljava/lang/String;)Ljava/lang/String;
直接点击MT管理器中的”搜索代码”功能,成功定位了调用z类o方法的方法。



学过安卓开发的都知道,如图中的doInBackground属于安卓异步加载任务AsyncTask中用于处理耗时操作的方法,不出所料这个方法里面还是没有什么逻辑(只是单纯的调用,不附图了)。而当后台操作结束时,onPostExecute(Result result)方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。因为我们打开同类下的onPostExecute方法寻找逻辑。



如上图就是解析服务器返回的json文本,而当code键的值为-1时就会执行成功逻辑,否则跳转到label_171弹出错误提示,修改很简单,删掉if跳转即可。
6. 总结
至此离线VIPGG大玩家完成,不需要登录就可以有VIP身份免积分享用任意MOD
最后也是对GG大玩家的保护机制深表遗憾,谨以“常在河边走哪有不湿鞋”送给其开发者团队!


郑重声明:本文仅供学习交流,如果有人利用本文知识和技术进行非法操作以此牟利,后果由操作者本人承担,与本文作者无任何关系!BinCrack原创文章!转载请注明!



免费评分

参与人数 21威望 +3 吾爱币 +33 热心值 +21 收起 理由
风华正茂丶 + 1 + 1 老哥现在正需要破解版,可以破解一个吗?
zzzlucas + 1 + 1 谢谢@Thanks!
客色青青 + 1 + 1 植物大战僵尸2中文版期待有离线功能!!!
By锺意 + 1 + 1 用心讨论,共获提升!已学习!
stars-one + 1 + 1 我很赞同!
杨纹昊 + 1 + 1 强无敌,最后一句太霸气了!
星空下的泪雨 + 1 + 1 我很赞同!
yzy大好人· + 1 + 1 我好像没上过九年义务 后面能具体点吗
debug_cat + 1 + 1 谢谢@Thanks!
Kasugano + 1 + 1 用心讨论,共获提升!
猫KsWeb点Cc + 1 + 1 谢谢@Thanks!
陌路无人 + 2 + 1 强啊!
逍遥壹回 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
qtfreet00 + 3 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
1358582642 + 1 + 1 谢谢@Thanks!
fengrui99 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lin_xop + 1 + 1 热心回复!
此时此刻1111 + 1 + 1 试玩机会怎么修改,请详细一点
xiaolan + 1 + 1 用心讨论,共获提升!
zhh4827 + 1 + 1 谢谢@Thanks!
娶名字真难 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

MrBin 发表于 2018-1-7 19:55
我真是醉了!你直接弄个视频+语音教程来教我们啊。
结果倒好,估计你花了二个小时来写此文章,而我们也要花个几小时进行学习。
你写的累,我们学的也累。
凌天羽 发表于 2017-12-5 10:23
头像被屏蔽
杨纹昊 发表于 2018-1-28 23:57
17773441534 发表于 2017-12-4 11:32
厉害了老哥哥
qtfreet00 发表于 2017-12-4 11:43
BinCrack是否是楼主本人?
 楼主| fxb960704 发表于 2017-12-4 11:55
qtfreet00 发表于 2017-12-4 11:43
BinCrack是否是楼主本人?

是的,我在四哥那里发的文章
lghlth 发表于 2017-12-4 12:54
谢谢分享 辛苦了
此时此刻1111 发表于 2017-12-4 14:00
试玩机会怎么修改,请详细一点,详细
C丶小调 发表于 2017-12-4 15:06
牛逼还是你牛逼啊
仿佛_一念成佛 发表于 2017-12-5 00:24
大牛厉害了
枯藤 发表于 2017-12-5 00:34 来自手机
楼主你好,请问你上一个主题  小米支付内购破解还能用吗?
真爱贤 发表于 2017-12-5 07:51
厉害了,手机端逆向!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表