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方法。
只能在这个方法开头添加才能成功弹出!
否则闪退。
如何让文字改变 如何让弹窗的文字时间延长一点?
下面看一段代码:【这段代码就是法总视频教程中的那段代码】
const-string v0, "游戏已破解"
const/4 v1, 0x1
invoke-static {p0, v0, v1},
Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
const-string v0, "游戏已破解"
const/4 v1, 0x1
invoke-static {p0, v0, v1},
Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
const-string v0, "已破解"
const/4 v1, 0x1
invoke-static {p0, v0, v1},
Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
各位应该看到了吧?为什么会有三段代码?各位应该发现。三段代码都是一样的。只是文字不一样。
我们把这3端代码放到启动的第一个activity的onCreate方法下。它就会运行这里的代码。
运行三段这样的代码,时间就会有所延长,
这就是添加弹窗的文字修改和时间延长!
各位应该听懂了吧?也就是100段相同的这样的代码。放到启动的第一个activity的onCreate
方法下。
它启动的时候就运行这里,一直往下运行。代码没完毕它就会一直显示。
这就是 “弹窗”的 举一反三。
【八】、反编译成功,回编译失败怎么办?
要么软件是对DEX处理过的,不让你回编译。
要么是回编译软件出问题,还是代码文件缺少出的问题。
比如APK IDE改之理 回编译签名后,会破解软件本身的文件。
如果不是对dex处理的。那么我们就可以
使用 上上签 签名工具 将DEX拖出来,签名。
也可以使用APK DB ,同样,将dex拖出来,回编译。这里我推荐这一款工具,
因为安装后,支持对APK 、DEX右键 反编译、回编译、的功能。
非常方便。
如果回编译DEX失败,那么软件对DEX就做了一定的处理。
完结篇:
在这里,我要推荐改SO工具; 010 Editor 该工具可以直接载入SO文件。
以十六进制模式展示。
xml文件中的id 0x279f00c2433之类的,都是以十六进制展示的,
所以,在必要时,我们把它转为十进制,打开JAVA源码查找。
+
+
手机端我要推荐使用的工具是:
APK解包打包工具
十六进制编辑器
十六进制计算器
MT管理器
Dalvik字节码编辑器
应用备份和还原
非常轻巧,内存小的备份软件,假如程序自动删除了软件包,
那么可以使用它备份。
1.首先要知道的是:
内购关键词:
和游戏搜索方法名
onResult,onchinabilling,resulton,Paycenter,Callback
联通游戏搜索方法名
OnPayResult,PyaResulton,Activity,result,callback
电信爱游戏搜索方法名
paySuccess成功,payCancel取消,payFailed失败
移动mm搜索方法名
onBillingFinish,Billing,CallBack
支付宝和银行卡方法名
handle,message
支付宝搜索字符:9000
360支付
onfinishedon,Activityresult
发送短信上限:android.permission.SEND_SMS
发送短信锁定支付式关建字符串
评论区