吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 38133|回复: 62
上一主题 下一主题
收起左侧

[Android 原创] 初学练手:某些游戏中Google Play 许可证验证的简单去除方法

  [复制链接]
跳转到指定楼层
楼主
charlie428 发表于 2017-12-12 09:50 回帖奖励
初学练手:某些游戏中Google Play 许可证验证的简单去除方法

注册论坛有一段时间了,这段时间里学到了不少东西。在此献丑,发一篇简单的过程记录,希望能激发更多像我一样的新手的兴趣,引导更多人走上学习的路。
首先要感谢qtfreet00大神的安卓逆向入门教程!非常详细!传送门:https://www.52pojie.cn/thread-408645-1-1.html

前言:一些以 Google Play 为官方发布渠道的应用、游戏会在启动时通过手机上的 Google Play 框架查询当前应用是否是从Google Play商店合法购买安装的,如果不是,会拒绝运行。如Minecraft(国际版):(本方法适用但不局限于此应用)

分析:对于此类应用,一般是使用了Google Play的许可证验证API。要想去除,要先学会如何加上,让我们前往Google的Android开发文档查询一下:https://developer.android.com/google/play/licensing/overview.html (自备梯子)
这里面有一张图,演示了许可证的检查过程:

可以看出,应用先向手机上的Google Play框架提出请求,然后由Google Play向服务器进行验证(过程加密),再回复给应用。
另一张图更实用,展示了应用在验证过程中的具体操作:

由此看出,关键函数就是LicenseChecker.checkAccess()。应用会调用LicenseChecker.checkAccess(),checkAccess()方法会进行检查,如果结果是许可证有效则会调用应用给出的回调中的allow(),否则调用dontAllow(),遇到错误则调用applicationError()。由此可得出思路:修改checkAccess(),使其不管查询结果为何,都无条件调用LisenceCheckerCallback.allow()。

分析完毕,开始操作:在手机上使用MT管理器(BinMT)完成
第一步:打开安装包中的classes.dex文件

第二步:找到com.googleplay.licensing.LicenseChecker并打开,查看Smali。在Smali编辑器界面使用搜索功能,搜索checkAccess。

第三步:接下来开始分析这段代码

[Asm] 纯文本查看 复制代码
.method public declared-synchronized checkAccess(Lcom/googleplay/licensing/LicenseCheckerCallback;)V
    .registers 11
    .param p1, "callback"    # Lcom/googleplay/licensing/LicenseCheckerCallback;

    .prologue
    .line 139
    monitor-enter p0

    :try_start_1
    iget-object v1, p0, Lcom/googleplay/licensing/LicenseChecker;->mPolicy:Lcom/googleplay/licensing/Policy;

    invoke-interface {v1}, Lcom/googleplay/licensing/Policy;->allowAccess()Z

    move-result v1

    if-eqz v1, :cond_17

    .line 140
    const-string v1, "LicenseChecker"

    const-string v2, "Using cached license response"

    invoke-static {v1, v2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

    .line 141
    const/16 v1, 0x100

    invoke-interface {p1, v1}, Lcom/googleplay/licensing/LicenseCheckerCallback;->allow(I)V
    :try_end_15
    .catchall {:try_start_1 .. :try_end_15} :catchall_62

    .line 174
    :goto_15
    monitor-exit p0

    return-void

这个函数从图中第623行(行号说的都是截图中的行号)开始,开头是一些信息之类的内容。从627行开始是函数体,631行是一个try-catch异常处理块的开头,里面是可能出现异常的代码。这个块里便是我们要寻找的关键。
632到636行的代码用Java写出来就是:
bool v1 = this.mPolicy.allowAccess();
这是尝试在本地缓存中查找有没有此应用的许可证,如有就返回true,没有就返回false。
紧接着重头戏就来了,638行判断如果v1是0(即false)就跳转到:cond_17(在哪里进行联网检查许可证)否则继续执行。而继续执行便是我们希望看到的allow()。
因此我们只要不让程序跳到:cond_17就一定能通过验证。因此修改方式便是:
把638行的if-eqz v1, :cond_17改成nop(或在此也可以直接删掉)。
第四步:保存、编译、保存、签名、安装。


大功告成!

总结:对于逆向的学习,个人认为有编程基础的话学起来会容易一些、上手快一些。当然,没有也不是说就不能学会,只要认真,耐心,逆向并不难学,但是我还是觉得入门之后应当把编程知识多少补上一些,方便以后发展。

最后,这是我第一次发主题帖,哪里说的不好,请多指正!谢谢!

免费评分

参与人数 28威望 +1 吾爱币 +34 热心值 +27 收起 理由
jbgsn1998 + 1 谢谢@Thanks!
protea_ban + 1 + 1 谢谢@Thanks!
qijimkm + 1 + 1 我很赞同!
小乖哟 + 1 + 1 我很赞同!
zhh4827 + 1 热心回复!
BY丶显示 + 2 + 1 谢谢@Thanks!
yzqps2 + 1 + 1 热心回复!
SomnusXZY + 1 + 1 热心回复!
SHH1997丶 + 1 + 1 用心讨论,共获提升!
360573078 + 1 + 1 我很赞同!
小信 + 1 + 1 热心回复!
qtfreet00 + 1 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
损人害己丶 + 1 + 1 用心讨论,共获提升!
大大怪 + 1 热心回复!
Kimipoker + 1 + 1 用心讨论,共获提升!
dreamer2020 + 1 + 1 用心讨论,共获提升!
hhntv418 + 1 + 1 谢谢@Thanks!
heazerry + 1 + 1 谢谢@Thanks!
dbsjacky + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xiexiansheng + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
610100 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
海盗小K + 1 + 1 手机码字,精神可嘉
lin_xop + 1 热心回复!
sunnylds7 + 1 + 1 用心讨论,共获提升!
vax6218 + 1 热心回复!
Smilience + 1 热心回复!
Meng1an + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

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

推荐
 楼主| charlie428 发表于 2017-12-14 09:55 |楼主
一生一世就好 发表于 2017-12-12 14:12
我想学习编程基础   楼主能推荐点不

从java开始吧。去搜一些比较系统的视频教程,我是从C#开始的,但现在觉得java更好😁。runoob.com是很好的参考资料。如果能接受英文书的话https://introcs.cs.princeton.edu/也不错。😂
推荐
 楼主| charlie428 发表于 2017-12-14 09:46 |楼主
ibin6 发表于 2017-12-13 10:29
其实我想说免费游戏的话,提示你安装或更新google play你按返回键就可以进去了

对于Minecraft这类不免费的就不是这样了。而且这里去除的是许可证验证,而不是提示安装google play
沙发
lmeiz888 发表于 2017-12-12 09:59
3#
xkwdm 发表于 2017-12-12 10:14
居然看完了,虽然排版不咋样
4#
 楼主| charlie428 发表于 2017-12-12 10:29 |楼主
xkwdm 发表于 2017-12-12 10:14
居然看完了,虽然排版不咋样

用手机发帖,排版真是件可欲不可求的事啊
5#
GANDALF111 发表于 2017-12-12 10:39
挺好挺好的,谢谢分享~
6#
道本 发表于 2017-12-12 10:47 来自手机
学习了,感谢分享
7#
纳兰容若 发表于 2017-12-12 11:03
多谢楼主分享方法
8#
linclon 发表于 2017-12-12 11:10
厉害厉害,感谢楼主分享
9#
zhang509607936 发表于 2017-12-12 11:11 来自手机
楼主厉害,赞感谢分享
10#
Smilience 发表于 2017-12-12 11:15
对于卤煮表示支持 感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

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

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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