MT管理器破解游戏及软件付费内购教程

(小白前言)
MT管理器是一个手机上非常强大的工具,是破解党必备之神软,之前有看见过一位大神的MT破解游戏的贴,以小白的身份来看觉得语言与过程过于复杂且繁琐,进而在网络上找到一篇比较简单明了的游戏破解教程,废话不多说,我是伟大的搬运工。
正题如下↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
android端的破解操作方法(本人使用的是平板)
首先请确认你的手机已经取得了root权限
然后介绍一下我们需要用到的工具
w7n9rl.jpg
▲mt管理器(仅此一款软件完成破解工作破解汉化者必备)
首先我们先将想要进行破解的游戏拷贝到SD卡任意目录中(已经安装的而没有安装包的可以在根目录中的data文件夹中的app文件夹中找到)
这一步骤可以用RE管理器来操作,也可以用mt管理器来操作
2rrpiz7.jpg
▲使用mt管理器拷贝
这里插入一下mt的复制机制:
打开mt管理器,可以看到java和symbian上很经典的左右两边分栏的文件管理模式
长按文件就可以弹出菜单,然而这个菜单却没有粘贴键
所以,当你复制或者剪切的时候,正在操作的文件从它所在那一边的文件目录移动/拷贝到另一边的目录中
这里我们用雷电2012HD作示范,文件名为cn.koogame.Fighter-2,先进入游戏寻找突破口。
进入游戏,选择一个收费项目,直接点了确定。
fkxjlv.jpg
▲点击购买后
可以看见提示我sim卡异常。因为平板电脑没有插,所以提示这个很正常。
然后现在就可以退出游戏了,突破口就是“sim卡异常”这串字符。
接下来,用mt管理器单击移动到sdcard某个目录中的apk文件,选择查看,就可以看到apk里面包含的文件。
2uz34f9.jpg
▲内部文件
实际上apk就是一个压缩包,用其它解压工具解压了结果也是一样的
可以看到四个文件夹和三个文件,文件夹不需要管它,主要存储游戏资源等东西,而三个文件是AndroidManifest.xml,classes.dex,resources.arsc。
第一个是类似文件列表的东西,第二个是用来储存代码的,第三个是用来存储各个需要用到的字符串的。而我们看到的sim卡异常
而破解的重头戏就是第二个文件classes.dex,直接用mt管理器打开它。
我们可以看到,里面有四排,选择第三个搜索类,输入sim卡异常然后搜索字符串。
29ld1dg.jpg
▲搜索
出来了,只有一个结果
k0396x.jpg
▲搜索结果
点开它,结果发现里面和刚打开classes.dex类似。
再选第四个搜索方法,之前输入的sim卡还在,搜索
axgzmp.jpg
▲再搜索
又只有一个结果
zsp9pw.jpg
▲搜索结果
点开它,就能看见一堆代码。
插入:classes.dex的结构和为什么要搜索两次
classes.dex实际上是由很多个*.smile文件组成的,而smile文件是可以直接用记事本打开的。
classes.dex将这些smile文件定义为方法,又将一些smile的组合定义为类,于是所有的类合起来就是classes.dex文件了。
所以我们先搜索了类,知道了字符串在这个类里,再在类里面搜索方法,知道字符串在这个方法里面,打开方法,就能看到出现了这个字符串的代码。
15wpdt.jpg
▲代码
接下来,看看这段代码,我将用到的部分贴出来。
label_15:
if-eqzv7:label_25
const-stringv0""
invoke-virtual{v7,v0}Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-resultv0
if-eqzv0:label_35
label_25:
iget-objectv0v9Lcn/koogame/market/MarketLogic;->activity:Lcn/koogame/ui/KooUiActivity;
const-stringv1"支付失败"
invoke-virtual{v0,v1}Lcn/koogame/ui/KooUiActivity;->onFail(Ljava/lang/String;)V
先讲label_x,因为没有学习过java,我根据全部代码推断它就是函数。
这里有3个函数,根据支付失败四个字,可以推断const-string是用来输出字符让字符显示在屏幕上的。
而if很明显是个判断条件,后面的-eqzv7就不知道了,先不管它。
然后我们可以推断,函数15一开始会先判断某个东西,如果成立了,就跳转到函数25,否则就做下面的动作,然后再一个判断,成立了就跳转到函数35。
函数25输出了“支付失败”四个字,可以推断只要函数15跳转到了函数25就是失败了,那我们再来看看35。
label_35:
invoke-static{v7}Lcn/koogame/ui/KooUiActivity;->setBpid(Ljava/lang/String;)V
invoke-static{v7}Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I
move-resultv6
sget-objectv0Lcn/koogame/ui/KooUiActivity;->mMNO:Ljava/lang/String;
if-eqzv0:label_60
sget-objectv0Lcn/koogame/ui/KooUiActivity;->mMNO:Ljava/lang/String;
invoke-virtual{v0}Ljava/lang/String;->trim()Ljava/lang/String;
move-result-objectv0
const-stringv1""
invoke-virtual{v0,v1}Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-resultv0
if-eqzv0:label_72
有点长,看不懂的都不看,我们就可以看到if-eqzv0:label_60和if-eqzv0:label_72一个是跳转到60,一个是跳转到72。
label_60:
invoke-static{}Lcn/koogame/market/MarketLogic;->getInstance()Lcn/koogame/market/MarketLogic;
move-result-objectv0
iget-objectv0v0Lcn/koogame/market/MarketLogic;->activity:Lcn/koogame/ui/KooUiActivity;
const-stringv1"Sim卡异常!"
invoke-virtual{v0,v1}Lcn/koogame/ui/KooUiActivity;->onFail(Ljava/lang/String;)V
goto:label_32
label_72:,
packed-switchv6:label_152
goto:label_32
其中,goto在C语言也有,是用作跳转
那么再贴出函数32
label_32:
return-void
这句return在C语言中代表函数结束,可以理解为只要跳转到函数32就结束了这一个方法。
我们再来看函数60,经过一些动作后提示sim卡异常并结束。而函数72只有一句packed-switchv6:label_152
switch是选择的意思,还是无法推断,那么我们先看看函数152
label_152:
.pswitch_data2
2:switch_76
3:switch_91
4:switch_106
5:switch_121
6:switch_136
.endpswitch_data
函数152也有switch,简单猜测一下,应该是函数72把变量v6的值传递到函数152的选择函数里面,当v6取2到6的时候,分别是switch_76,91,106,121,136,那么switch后面的数字又代表什么?我们可以大胆的猜测,这些数字正好对应label_的后面数字,那么就将它看做跳转到函数xx。
我们在这个代码里面可以看到这几个函数,正好就是购买炸弹,金币之类成功的提示。
那么梳理一下,函数15检测,没有网络连接就跳转到函数25,有则是函数35,而函数35又分别跳转到支付失败的函数60,以及跳转到函数152进行选择的函数72。那么我们应该如何进行修改?
只需要将跳转到函数25的函数改成函数35,跳转到函数60的函数改成函数72就行了,再删除函数25和函数60这两个函数,就无论购买是否成功都算作成功,也就是直接跳过这两个环节了。
(之前修改时改了跳转没有删除两个失败的函数,结果因为没有调用这个函数导致代码自动出现了一些变化,所以大家记得一定要把没用到的函数删除了,另外这样改了保存之后,大家可以回去再看看,函数35变成了28,这也是代码的自动优化吧)
如上所示进行修改,点返回键提示是否保存,选择保存一路返回,退出.dex文件的时候提示你是否保存,保存后再提示你文件修改是否在压缩文件更新,更新后,就可以安装试试效果了(出现问题的请用mt管理器单击修改过后的apk选择签名)
sopcba.jpg
▲再次购买
啊咧,这次提示购买失败了,这又是为什么?
之前是提示“sim卡异常”,现在变成了“购买失败”,换句话说,其实检测sim卡的环节已经被我们成功跳过了
想想,就可以猜到购买验证有两个环节,我们之前修改的只是第一个环节而已。
再次打开之前已经修改过了的apk,进入classes.dex,这次换搜索“购买失败”了
2l96zrm.jpg
▲搜索结果
出来两个结果,先打开第一个,继续搜“购买失败”,出来的结果好像有点规律,是不是这里面还有个onPaymentSuccess呢?
返回这一个类,选择第三项“方法列表”,我们就看到这么4个方法。
2zic9hl.jpg
▲方法列表
当看到onPaymentSuccess时,我们就成功一半了,因为只要有了Success的代码,只要把其它的都改成这个代码,不就不论成功与否都算成功了么?
如上所诉,进入onPaymentSuccess方法,复制后粘贴到其它三个里面覆盖,保存,退出,更新压缩文件,安装测试
(之前搜索“购买失败”的第二个结果其实我也忘了改了,不过还是成功破解了收费限制,而且里面所有收费项目都尝试过了,没有发现没破解到的,后来看了下那个代码,要进行修改的话就要删一些代码,而又有其它代码只被删掉的代码调用,删掉其它代码又有更多代码需要被删,既然已经没有发现没破解到的地方,我就没有进行修改)
测试一下是否成功
2u55egp.jpg
▲购买成功
可以看到,已经成功了,大家也可以试试其它收费的功能,破解工作也告一段落了
感言:
其实很多东西实际上只是没有找到进入的门,很多人就被阻隔在了外面
本文只是给大家提供一个破解游戏的门路,实际上本文所用的手法实在是拙劣,或许大家以后成为相关方面的大神的时候再看这篇文章就会感到好笑了
但是本文只是给大家打开这么一扇门,给大家指出一条路,至少让你不会因为没有门而束缚了才智
本文只是一个初学者写的,凭借比大多数初学者多出的一点C语言算法知识自己摸索出了这道门和门后的小路,并希望分享给大家
最后也希望大家不要因为找不到门而放弃一些自己感兴趣的领域,只为了将来不会感到后悔
郑重声明:
本文及所提供素材仅供安卓程序设计交流使用,请自觉于下载后24小时删除,请勿将之用于任何盈利性质或非法用途,对此引发的法律责任本人概不负责!

本文首发PC426论坛,原作者裂魂,百度贴吧马甲@裂裂裂裂魂,转载请注明出处!感谢大神原创!!!

温馨提示:看图片的注意流量哦,不过我貌似多心了,大家都不缺流量吧