开心消消乐简单的逆向破解过程
0x0 定位dex脱壳
反编译之后,可以很明显的发现源码的Dex已经壳文件代替,主代码被加密隐藏了起来。分析壳的代码,DexClassLoader加载的形式:
那应该说明Dex是被整体加密或者隐藏了。通过分析本地文件,压缩格式打开Assets文件夹下的he.jar包含了原来的Dex文件:
那么,只需将he.jar中的classes.dex拖出来,替换到原来的apk中,再反编译即可得到全部的源码。
可能有些童靴比较草率,拿到Dex反编译得到全部Smail以后,就直接删除掉了清单文件中Application的android:name属性,以至于回编、安装测试的时候,程序闪退报错:
额,致命错误,无法查找原因..其实,一般情况下会报Unable加载某个类的错误。原因是没有考虑到源代码中会有Application类的情况。修复方法是在Smali代码中搜索“.super Landroid/app/Application;”,将其所在的类名替换掉原来的壳的类名。<开心消消乐>修改之后也就变成了:
<application android:debuggable="false"… android:name="com.happyelements.AndroidAnimal.MainApplication">
所谓的脱壳至此完成..
0x1 去签名校验
其实有一段时间,<开心消消乐>免费的破解版本都是比较少的,一方面它的签名校验放在加密的lua脚本里,破解技术要求比较高;更大一方面,很多会lua脚本解密的大牛都不动国内游戏的,就Z大出手了一次。我这次磨出来的去验证方法就对技术的要求低了哈哈~~高的我也不会o(╯□╰)o~~去校验主要用了两个关键点:
1.Hook本身的签名信息
这个就很简单啊,使用的是飘云阁大神空道的Hook本身签名的现成手法。不过需要注意的是添加的类要足够多,我用这个方法的时候就是在尽量多的类里面添加引用Hook的so,比较重要的有:Application、主Acitivity、主Activity继承的所有类、getActivity方法所在的类、getContext方法所在类等等。<开心消消乐>需要添加的类有:
Lcom/happyelements/AndroidAnimal/MainApplication;、Lcom/happyelements/hellolua/MainActivity;
Lcom/happyelements/android/BaseActivity;
Lorg/cocos2dx/lib/Cocos2dxActivity;等等,
宜多不宜少啊..当然这是比较笨、无脑、怕出错的做法咯..
2.验证包路径转向
通过测试发现,只单纯的使用空道的手段,游戏仍然会提示“不是合法版本”。其实我也纠结了很久,最后才蒙出来绕过的方法。
见:http://blog.csdn.net/zihao2012/article/details/39891547
在Smali代码中搜索sourceDir 和 getPackageCode,在可能会影响校验结果的地方,将路径指向正版包的SD卡路径即可。
0x2 破除QQ和新浪的登录接口限制
一般来说,一个程序要想支持QQ和新浪微博的接口登录,都必须事先将自己签名的MD5放到接口的后台官网来申请登录SDK,如果签名不一致则拒接登录,所以要解除它们的登录限制就在反编译的SDK的Smali文件中,让它读取正版包的签名信息。具体的怎么做用一张图片来简单的说明一下吧:
0x3 内购破解
我实现的方式是将IMSI转向电信接口,然后就无支付窗口直接成功了。详见:
http://blog.csdn.net/zihao2012/article/details/39693333
0x4 消费限额的去除
当时我记得好像是通过LogCat信息看出来每日消费的限额是在加密的lua脚本中写的,一开始还觉得无能为力,当我看了它的本地储存文件时,看到了希望:
6050860..什么的,很明显是我随机过的咯 没随机之前貌似是IMSI之类的东西。所以出现“每日限额“的提示时,重新打开游戏就好了。
0x5 验证包的处理
验证包就是路径指向的正版包,上面在sourceDir 和 破除接口登录限制的时候,都提到了将路径指向SD卡中的正版包。对于追求完美的人来说,破解还要再附带一个脓肿的正版包一定是很不爽的。有一个参考的方案就是:
1.删减文件,优化验证包大小。
比如如果验证包的作用只是获取正版的签名信息,那就只保留META-INF和
AndroidMainfest.xml文件,其他的删除;如果验证包的作用是验证classes.dex的有效性,那就只保留其中的classes.dex和AndroidMainfest.xml文件等等。
2.将验证包放到Assets。
将已经删减的验证包放在Assets文件下,在程序主Activity的onCreate()方法中添加一段将其复制到指定的目录下,验证时直接指向该目录即可。
开心消消乐简单的逆向破解过程相关推荐
- 用Python3和Pygame实现简单的开心消消乐游戏
用Python3和Pygame实现简单的开心消消乐游戏 项目简介 项目思路 现存Bug 项目截图 项目简介 项目Git:https://github.com/Accright/py-icehappy. ...
- 开心消消乐简单消除检测
最近在b站上看一个Unity教学视频,制作开心消消乐.个人感觉视频中的消除方法写得很随意,有点不爽,于是自己新写了个方法. 基本规则:三个或三个以上元素,横着连一起算消除,竖着连一起算消除. L形和T ...
- [Android] 开心消消乐代码(写的比较简单)
突然想要在android上写一个消消乐的代码,在此之前没有系统地学过java的面向对象,也没有任何android相关知识,不过还是会一点C++.8月初开始搭建环境,在这上面花了相当多的时间,然后看了一 ...
- python编程游戏手机版_利用Python开发手机同款游戏:开心消消乐
手机上面的开心消消乐,我想大部分人都是玩过的吧,今天小编就教大家如何用python开发这款游戏 不过只有十个关卡,不像手机里面那么多的关卡!不过游戏的画面和bgm都是同款的哦~ 效果图 基本配置 wi ...
- android飞翔的小鸟游戏素材包_开心消消乐×愤怒的小鸟:为开心而战
手机里总有那么一些游戏,是你一旦不小心打开,就完全停不下来的.在这份"一直玩一直爽游戏清单"里,绝对少不了开心消消乐和愤怒的小鸟的身影. 神奇的是,在2020的夏天,它们合体了!在 ...
- java开心消消乐代码_Vue实现开心消消乐游戏算法
摘要:这篇Vue栏目下的"Vue实现开心消消乐游戏算法",介绍的技术点是"开心消消乐.Vue.开心.游戏.算法.实现",希望对大家开发技术学习和问题解决有帮助. ...
- 用Python写个开心消消乐小游戏!自己写的游戏就是好玩!
提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏. 实现 消消乐的构成主要包括 ...
- Android开发入门 - 简易开心消消乐界面设计
Android开发入门 - 简易开心消消乐界面设计 第一步,点击File->NEW->new module,进入以下界面,选择第一个,即运行在手机和平板电脑上.点击next. 第二步,在第 ...
- 开心消消乐java下载_开心消消乐下载_开心消消乐下载最新iPhone版-太平洋下载中心...
<开心消消乐>,以三消游戏的方式,让国民连接在一起!2021年,8亿玩家的共同选择! [App Store下载量榜首,多次精选推荐] 全民级三消游戏<开心消消乐>不仅是中国区A ...
- java开心消消乐代码_Java小项目之:教你做开心消消乐!
Java小项目之:教你做个开心消消乐! 今天给大家带来的小项目是开心消消乐(连连看),还是一样的惯例.操作简单,适合java初学者练手.想看其他java小项目的朋友可以关注我,我会持续更新,也可以私信 ...
最新文章
- 在linux 下怎么查看服务器的cpu和内存的硬件信息
- 我是如何用机器学习技术帮助 HR 省时间的
- SpringMVC之访问静态文件
- MySQL DELETE 语句的一个简单介绍
- python 矩阵除法_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...
- oracle数据库系统介绍,Oracle数据库(Oracle Database)体系结构及基本组成介绍
- 转载:【Oracle 集群】RAC知识图文详细教程(四)--缓存融合技术和主要后台进程
- android开发用什么字体,移动端web app和页面开发使用什么字体?微软雅黑?
- 京瓷1020手动双面打印提示_自动双面打印时纸张是如何被翻转的?
- 装完nvme固态经常蓝屏_NVMe固态硬盘安装Win7蓝屏0x0000007B快速解决方法
- 【成神之路】Nuxt入门
- DVWA靶机-存储型XSS漏洞(Stored)
- android蓝牙开启后会尝试自动连接,Android 自动连接蓝牙
- [mit6.1810] Lab system calls
- DCM+BUFG的使用
- 定时任务-动态定时任务(springboot+org.quartz)
- npm login e401问题(npm ERR! Unable to authenticate, need: BASIC realm=“Sonatype Nexus Repository Mana)
- Godot游戏开发实践之一:使用High Level Multiplayer API制作多人游戏(上)
- c语言 [Error] expected declaration or statement at end of input的解决方法
- 2019 蓝桥杯省赛 A 组模拟赛(一)C. 结果填空:马的管辖 (暴力搜索)