Android逆向破解之Smali篇
Dalvik跳转指令:
先附上完整的Dalvik跳转指令:
if-eq vx, vy, 目标 如果vx == vy注2,跳转到目标。
if-ne vx,vy, 目标 如果vx != vy注2,跳转到目标。
if-lt vx,vy, 目标 如果vx < vy注2,跳转到目标。
if-ge vx, vy, 目标 如果vx >= vy注2,跳转到目标。
if-gt vx,vy, 目标 如果vx > vy注2,跳转到目标。
if-le vx,vy, 目标 如果vx <= vy注2,跳转到目标。
if-eqz vx, 目标 如果vx == 0注2,跳转到目标。
if-nez vx, 目标 如果vx != 0注2,跳转到目标。
if-ltz vx, 目标 如果vx < 0注2,跳转到目标。
if-gez vx, 目标 如果vx >= 0注2,跳转到目标。
if-gtz vx, 目标 如果vx > 0注2,跳转到目标。
if-lez vx, 目标 如果vx <= 0注2,跳转到目标。
!=是不等于
==是等于
<=是小于等于。
【一】:goto 的使用
goto在smali 里面的应用是:无条件。
goto应用很广泛,各位可以看看我的很多帖子都是用goto爆破的。。
goto的用法;
在条件判断跳转前加上goto,跳向成功【我们想要的代码处!】
在分支判断前面加上goto跳向成功,和分支结果都可以加上goto跳向成功!
帖子:
http://www.52pojie.cn/thread-311175-1-1.html http://www.52pojie.cn/thread-306127-1-1.html 【二】:3大游戏发布平台的支付函数
3大游戏发布平台指的是:
移动 【和游戏和MM商城】 、电信、联通
【和游戏】
移动游戏的支付函数:
onBillingSuccess【onUserOperCancel和onBillingFail】
onResult方法【判断】
Sta info OK 【对应修改的地方是:Sta info fail修改为OK即可。这种比较少见】
移动还有部分支付函数我就不说了,
现在都发展到;signature和MD5 Classes校验了,学习该方面的知识,和改SO是当前比较重要的。
电信
电信爱游戏的支付函数:
大家应该知道,
game189文件夹的sms$2文件夹里,有的呢,被混淆了,
成了,a、b、c、d文件夹里了。但是我们发现它仍然在game189文件夹里。找到那个分支,
使用让第二个分支,跳向第一个跳转了。如果不是,那么就一个一个试。
paySuccess【payFail、payCancel】
这个大家就很熟悉了,这个是爱游戏现在用的最广泛的一个了,可能爱游戏正在升级单机游戏
的验证系统。支付函数不得而知。
如果升级了验证系统,那么就一定不是这个了,
所以,要找游戏的关键字,进行查找。
联通:
联通 沃游戏的支付函数:
。。。。。
这个我没改过它们的游戏。原因吧,还是它们网站更新的游戏太少,也不经常去。
各位如果想更多的了解它们的支付函数,
可以到吾爱破解论坛的:这里下载:
Android各大支付接口SDK文档&DEMO共享
http://www.52pojie.cn/thread-263912-1-2.html 【三】去广告通用教程
1、本次教大家的是最简单的,也不算最简单的。。
首先:去广告,你要了解它签名后,闪退与否,改了闪退,就有签名验证,
就得先改掉签名验证。
我遇到过这种的。
2、INTERNET权限,在AndroidManifest.xml中基本都会有这个权限,
我们只要删除掉这个权限,保存,然后进入游戏,测试就会提示你;ERROR
意思;没有声明联网权限,然后找到这句英文,改掉它的跳转即可。
3、第三种:比如google的广告,可以在AndroidManifest.xml中
删除掉 google.adactivity,同样、inmob的广告也是这种改法。保存、测试仍然提示错误,没有声明权限,
所以找到这句英文改跳转即可。
如果以上三种方法不奏效,那么最后我们就要在代码里找到
它的网站了,比如google广告,我们只要搜索 google. 即可找到google.网站。
有很多,我们让它返回空的,
const-string “”
这样,就改好了。
帖子:
http://www.52pojie.cn/forum.php?mod=viewthread&tid=303362 【四】去积分通用教程
同样的,如果改了签名,闪退,软件就必须先改掉它的签名验证。现在,我见到的这样的软件有几个。技术发展。。。
1、去积分方法一、建议各位手机端安装:十六进制计算器.APK
安装后把图标放到桌面上,然后使用就方便了。
积分数量一般在关键字 “积分” 附近,所以找找就可以找到了,
找到后,假如需要80积分才能进入游戏,所以十六进制就是0x50
所以、找到以后,修改为0x0即可。
【提示:一般想找到自己软件的初始积分:0x0很难找,因为代码中有很多0x0、】
2、去积分方法二、
其实我们只要搜索;积分就可以找到许多可修改的地方。
那么我们缩短搜索范围进行搜索,我们搜索 “不足”
改掉它的跳转即可。
3、去积分方法三、
现在有一些 “顽固分子” “App”,改了积分也没用,改了跳转也没用,
那么,如果没有lib文件夹,又是联网获取积分。那么我们就要使用抓包了,
详见低调的视频教程:
BT种子搜索器之联网签名验证处理+去除积分墙
http://www.52pojie.cn/thread-262680-1-1.html 【五】我们应该如何找到游戏破解的关键位置?
首先我们在开始破解之前,就要收集游戏的信息,文字等等。
才能开始破解。
通过关键提示文字查找,这是一种最简单的方法。
一般文字都是,成功.失败,取消,对应;Success、Cancel 、Fail
但是也不是所有游戏都是Success、之类的。
那么我们应该如何定位,找到关键位置呢?
在我改过的游戏中,一般支付的方法,都会有 监听器。
监听器的英文翻译就是:Listener【listener】。所以我们可以查找该代码进行定位分析。
改游戏一般改跳转就可以达到破解成功!
比如:
if-eq v1 v2 label_12 【跳向成功】
if-ne v2 v3 label_14 【跳向失败】
第一种改法:
删掉if-ne v2 v3 label_14即可达到破解成功!
移动MM商城的 onBillingFinish 就是一个例子。
第二种改法:
if-eq v1 v2 label_12
改为goto label_12 或者eq改为ne
但是if-ne v2 v3 label_14必须改为eq
原理各位应该知道吧?
这个使用的goto就是不让它判断,它就会无条件实现这里的代码,
然后走向实现的地方:label_12
根据Dalvik跳转指令。
【六】、如何让游戏不弹出弹窗直接购买成功的简单分析
如果知道游戏的 “支付 接口” 又知道游戏支付成功所调用的是那一句,
我们就可以根据这些代码,将支付成功所调用的那一句,放到 “支付接口”那,
因为路径不同。所以要改路径。
这样改好了以后,就可以不弹出弹窗,直接购买成功!
低调的视频教程中介绍了 移动MM商城 onBillingFinish 的支付接口和成功的那句代码。
但是各位要注意、不是所有的游戏支付接口你都能找得出来,需要时间去找。
【七】、如何给安卓游戏添加弹窗文字时间延长 和弹窗文字改变
这个想必有人知道吧。
不知道的就去看法总的视频教程:
给APK添加弹窗的三种方法。
我们要给游戏添加弹窗,首先就必须知道;游戏最先启动的第一个activity
的onCreate方法。
只能在这个方法开头添加才能成功弹出!
否则闪退。
如何让文字改变 如何让弹窗的文字时间延长一点?