资讯专栏INFORMATION COLUMN

"**游"强制更新破解

imingyu / 2795人阅读

摘要:传送门游强制更新破解前言前几天客户有提到一个作弊工具,所以就想下载体验一下。结果下载的应该是一个较早的版本需要强制更新到最新版本,不然不能运行。方法则是将当前版本写入。再次修改添加了将改为回编安装运行,终于不再提示更新了。。。。。。。

好久没有更新博客了,因为一些特操蛋的事情,一直没有心思写。上两周终于把《Android 软件安全与逆向分析》 看完了,然后就老是想找个 apk 练练手,但是水平太差,稍微加密就啃不动了。刚好遇到了这个 apk 习惯性逆向分析。

传送门:"**游"强制更新破解

0x00 前言

前几天客户有提到一个作弊工具,所以就想下载体验一下。结果下载的应该是一个较早的版本需要强制更新到最新版本,不然不能运行。
更新提示:

所以就想破解一下他的强制更新练练手,因为感觉不难。

0x01 分析Java代码

利用 jadx-gui 反编译 apk,jadx-gui 这个工具还是挺好用的。一条命令就可以看到反编译后的 Java 代码,还有资源文件。

AndroidManifest.xml分析

Application 是 Android 程序的主入口,也是分析 apk 的开始点。而且通过运行程序也可以发现。跳出的升级的 Dialog 是在程序运行后第二个页面跳出的,第一个页面为启动页面。所以重点分析对象就是 Application 到第二个页面。
AndroidManifest 查找 application 标签看有没有自定义 Application

过滤 android.intent.action.MAIN 查找第一个页面。

Activity分析

自定义的 Application 中没有什么信息,只是做了一些配置的初始化和第三方 SDK 初始化的。

SplashActivity

SplashActivity 是 apk 的第一个页面也就是启动页面,因为代码没有做混淆处理,其中我们还是可以发现一些关键的代码。


变量 isUpdate 是关键点,也可以发现这个页面停了100ms后会跳转到 MainActivity 页面。但是这个页面只是对变量 isUpdate 进行了判断赋值没有进行升级的处理。

MainActivity

MainActivity 真正的主页面,查看 onCreate方法。

当时只看到了第二个标注的代码,心想这不是改下 if-else 的事吗。(下面会将第一个标注)

0x02 修改Smali代码

apktool 反编译 APK,没有做过加固处理直接。定位到 MainActivity.onCreate 方法,修改if-else逻辑,将if-eqz v3, :cond_3改为以下代码:

原本为 isUpdatetrue时,执行 isUpdateAlert() 方法。改为 false时执行。 顺便还加了一个 Log,回编安装运行。

结果发现自己还是太年轻,没有绕过升级。虽然Log是有打印了,证明代码是没有问题的,但是在升级的 Dialog 还是出现了,并且之前还有一个 Dialog。

那天研究太晚了就睡觉去了。

0x03 重新分析代码逻辑

第二天想想肯定是自己哪里分析错了,又重新看了一遍代码。首先看下之前认为是改变逻辑后执行的函数 isUpdateAlert():

可以看到当用户点击确定的时候只改变了 SplashActivity.isUpdate 的值,没有其他操作了。再查找一下 R.string.str_reminder 的值在目录 res/values-zh/strings.xml:

好吧事实证明自己还太年轻啊。

分析变量 isUpdate 的作用

所以可以先回到 SplashActivity 看看变量是怎么赋值的。

可以看到 isUpate 的值是根据 Initialized 文件中保存的值跟当前APK的版本做比较得到的值。

方法 setInitFlag 则是将当前版本写入 Initialized。这样看来貌似 isUpdate 不可能为 true了。 再看下什么地方调用了这两个函数:

到这里可以明白了,Initialized 文件是写入当前版本号,但是当apk更新后版本号变了,跟 Initialized 中的版本号就不一样了。所以 isUpdate 记录的是当前 APK 是不是已经更新过了并且第一次打开,而不是当前 APK 是不是需要更新。

0x04 burp抓包分析

通过重新分析可以断定之前的修改是错误的了,但是既然 APK 需要判断是否需要更新那么就必须有网络请求,burp 该上场了,挂上代理打开APK:

这里请求成功的只有三个 HTTP 请求(百度地图的忽略),HTTP 还省了导入证书了。一个一个分析请求的 response 。抓包这个技能还是必须掌握的:

知道了哪个接口调用的那就简单了,直接找出这个接口的类:

用的友盟的更新模块,所以我上面忽略的才是真正的更新代码。

UmengUpdateAgent.setUpdateOnlyWifi(false);
UmengUpdateAgent.forceUpdate(this);

再看 com.umeng.update.UpdateResponse 这个类的 a(JSONObject) 方法:

对比返回的 response (burp复制出来中文乱码了,看key就好)

{
  "update": "Yes",
  "version": "12.1.2",
  "path": "http://au.apk.umeng.com/uploads/apps/5386ea3b6c738f0de0000025/_umeng_%40_188_%40_09e2ea839754f61d4fb24ddb96a638bf.apk",
  "origin": "",
  "update_log": "天下游12.1.2
1.修复小米5不能使用的问题
2.降低电量消耗、提高稳定性和兼容性
3.更新会清除12.0以前版本数据
4.更新完成后请重启手机,以使更新生效!!!
5.如遇到不能使用的情况,请到“问题反馈”中描述问题并留下您的联系方式",
  "proto_ver": "1.4",
  "delta": false,
  "new_md5": "09e2ea839754f61d4fb24ddb96a638bf",
  "size": "18278969",
  "patch_md5": "",
  "target_size": "18278969",
  "display_ads": false
}

所以这个类就是处理返回值的地方了。这不是修改一下 Yes字符串就完了,哈哈哈哈哈哈。

0x05 再次修改Smali

添加了Log 将 Yes 改为 No:

回编 安装 运行,终于不再提示更新了。。。。。。。

0x06 总结

逆向分析真是一个细致活啊,稍微有点忽略就走了弯路。另外对于 release 的版本的APK 最好可以进行 proguard 混淆和加固,现在有很多第三方加固都提供免费的服务了,做了这两步我想就能挡住很多像我这样的菜鸟了。
很久没更新博客,这篇也写了好几天才写好。。。。。。。。。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12920.html

相关文章

  • python自动化测试之破解滑动验证码

      python作为一门比较常见的编程语言,在工作当中的应用还是比较的广泛的,比如可以对此进行相关的自动化测试,比如自动化测试相关的代码,另外还有破解滑动验证码。那么,具体的操作手法是怎样的呢?下面就给大家详细解答下。  在Web自动化测试的过程中,经常会被登录的验证码给卡住,不知道如何去通过验证码的验证。  一般的情况下遇到验证码我们可以都可以找开发去帮忙解决,关闭验证码,或者给一个万能的验证码...

    89542767 评论0 收藏0
  • 以Referer方案写一个图片防盗链服务并实现网页端"破解"

    摘要:在同等安全级别的情况下,发送文件的源作为引用地址,但是在降级的情况下不会发送。 什么是盗链 资源不在自己服务器上, 而通过技术手段, 把资源放置到自己的网站中, 通过这种方法盗取他人的资源. 什么是Referer Referer是http请求header的一部分, 当浏览器(或者模拟浏览器行为)向web服务器发送请求的时候,头信息里有包含 Referer. 它表示当前接口的访问来源...

    sPeng 评论0 收藏0
  • python自动化测试之破解图文验证码

      小编写这篇文章的主要目的,主要是用来给大家介绍关于python自动化测试的一些事情,涉及到的内容主要有包括破解图文验证码等相关的一些事宜,具体怎么才能够破解图文验证码呢?下面就给大家详细解答下。  对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,  验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动验证的。  诸...

    89542767 评论0 收藏0
  • Python通用验证码识别OCR库ffffddocr的安装使用教程

      小编写这篇文章的主要目的,主要是给大家去做一个相关的介绍,介绍的内容是关于Python通用验证码的一些相关小技巧,包括有通用验证码识别相关的OCR库,同时也会给大家介绍一些内容,介绍包括OCR库ddddocr安装使用教程,下面小编就给大家详细解答下。  前言  在使用自动化登录网站的时候,经常输入用户名和密码后会遇到验证码。今天介绍一款通用验证码识别OCR库,对验证码识别彻底说拜拜,它的名字是...

    89542767 评论0 收藏0
  • 盘点Python爬虫中的常见加密算法

      现如今,各行各业都会用到各种各样的算法,包括我们在使用Python的时候,也会使用到各种各样的算法,比如,我们会使用到各种的加密算法,那么,到底什么才是加密算法呢?下面就给大家详细解答下。  序言  下面小编就和大家一起来盘点下数据收集环节中这一些热门的密码算法,这些有什么特点、数据加密的形式有哪些方面这些,了解了这一些以后其实对于我们反向破译这一些数据加密的主要参数可以起到很多的协助!  相...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<