我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款叫做:八门神器.apk
其实这个软件我下载安装了,但是没有什么效果,不知道是不是我哪里设置的有问题,但是我们这个应用也是有很多限制的,他必须要让手机进行root(说实话,现在获取root是很方便的一件事,如果你想玩游戏,并且想得到更多的东西,手机root是必须的,但是这个可能也可能会失去很多)。
我就当上面的那个应用不可靠,所以我们采用第二种方案了,反编译游戏的apk,然后修改他的代码,在打成apk,在进行这个像操作的同时,我们需要先做一个准备工作,就是了解一下相关知识和一些辅助工具,我们知道Android中的应用程序是:xxx.apk,其实这个apk就是一个压缩文件,我们可以使用解压软件打开的。要想看到源码的话,可能需要一些辅助工具:dex2Jar(将dex文件转化成jar文件),jd-gui.exe(查看jar文件),ApkTool(反编译apk,可以得到他的smali文件,同时可以进行编译打包和签名),这些工具网上都是可以下载到的,但是我这里为了防止有些同学可能找不到正确的版本,导致操作失败,很不开心,所以我就将这些工具都放到csdn中了。
http://download.csdn.net/detail/jiangwei0910410003/7346527
下面我们首先来通过一个简单的Demo.apk来看一下反编译的流程:
代码很简单,新建一个Android工程,Activity代码如下:
package com.example.androiddemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView txt = (TextView)findViewById(R.id.txt);
txt.setText("100000000");
}
}
好吧,我们编译运行吧,代码很简单吧!记得布局文件中添加一个TextView
然后我们将工程中等的bin目录中的apk文件拷贝到出来开始反编译:
第一步:首先得到apk中的classes.dex文件
使用WinRAR软件打开apk,将其中的classes.dex文件解压出来
第二步:通过classes.dex文件得到classes.jar文件
我们从上面下载的工具中,解压Android反编译文件,进入目录中:
看到上面的标记文件夹,我们将上面得到的classes.dex文件拷贝到这个文件夹中,然后使用命令行将当前的路径切换到这个文件夹目录,然后执行命令:
d2j-dex2jar.bat classes.dex
执行完命令之后,我们在这个文件夹中会看到多出一个classes-dex2jar.jar文件,这个就是我们想要的jar文件
第三步:通过jd-gui.exe工具查看jar文件,查看源代码
我们可以看到我们的Activity类的源代码,当然我们这里没有进行扰码操作的,所以代码大体上都能看懂,只是会做一些代码的优化,这个关于代码的优化的过程,就是在Android编码编译成.dex文件的时候操作的
第四步:使用ApkTool工具进行反编译Apk文件
通过上面下载的工具中解压ApkTools.zip:
我们需要将我们上面编译之后的apk文件拷贝到这个目录中,并且需要将这个apk文件的名称修改成123.apk,然后运行APKTool.cmd:如下界面:
我们看到这里的每一步操作都说明的很清楚了,我们首先执行1,进行反编译,反编译成功之后我们会发现在文件目录中出现一个APK文件夹,在这个文件夹中就是反编译之后的内容了,我们找到MainActivity.smali文件
关于smali文件,不了解的同学们可以自己去google一下,网上有很多的例子,他其实就是一个能够被Android虚拟机读取命令进行执行的文件,然后我们打开这个smali文件:
我们其实看这些代码没什么难度的,如果你之前使用javap命令查看过java反编译的代码,这个和那个是差不多的,我们这里主要来看一下我们设置TextView的显示内容的代码,就是最后一个标记中,我们看到了我们设置的内容是:“10000”,所以我们只要修改这个值,现在我们修改这个值为:“10”,然后保存这个文件。
这里在补充一下上面的第一个标记中我们会看到有两个int类型的变量,但是我们会有一个疑问,我们代码里面没有用到int类型的变量呀?我们从变量下面的方法中可以看到,是setContentView和findViewById方法,其实我们知道Android中引用资源都是使用一个int类型的变量指定资源文件的。这里我们要记得怎么使用smali语法设置一个int变量的值(这个在后面会用到)
最后我们就可以使用上面ApkTools命令中的2进行编译,这时候在Apk目录中会多出一个build文件夹,这个是编译之后的文件夹,然后我们在使用4命令,进行签名包,执行完毕之后在build目录中有签名的apk了:
我们安装这个包测试一下,看到显示的是100。好吧,至此我们就成功的通过修改一个apk文件了。
好吧,上面的例子只是一个前奏,下面我们来看一下一个真实的案例吧:
哈皮妹-萝莉 v1.2.apk
关于这个apk,其中的内容有点不干净,正好赶到了最近政府在打压,所以好多市场中都下架了,其实你可以直接在百度中搜这个应用的,但是要注意的是一定要是v1.2的,不然可能会不一样,我担心有些同学可能找不到正确版本的apk了,所以给出下载链接:
http://download.csdn.net/detail/jiangwei0910410003/7346875
我们先来安装一下这个apk,看看效果吧!!一些男同学貌似很感兴趣呀!但是我们得先干正事
我们点击购物车图标,会看到有购买金币和钻石的界面,系统默认是金币为100,钻石为0,我们将金币改成10000,钻石改成10,这样我们就可以看到更多的东东了。
我们按照上面例子的步骤来进行操作,我们看源码会看到一个类:
package com.qxshikong.mm.lolita.c;
public final class c
{
private int a;
private int b;
public final int a()
{
return this.a;
}
public final void a(int paramInt)
{
this.a = paramInt;
}
public final int b()
{
return this.b;
}
public final void b(int paramInt)
{
this.b = paramInt;
}
}
我们会看到这个类,关于如何找到这个类的,不要问我,我是找了很多次才找到的,这个没有技巧可言的,我们知道这个代码应该就是一个JavaBean,提供两个属性:一个是金币数,一个是钻石数,那么下面我们反编译这个apk,查看他的smali文件:
这里修改的方法就是参照我们前面说到的例子中怎么设置一个int类型的值
我们一定要通过上面的源码文件的目录找到指定的smali文件:
我们修改了smali文件之后保存,然后进行编译打包,之后安装打好包之后的apk(这个步骤在前面的案例中已经说过了),我们安装签名的apk,但是我们可能会遇到一个问题:
会涉及到签名不一样,但是包名一样的问题(和没有手机中之前的apk包冲突),这个很简单,卸载后安装即可,运行之后我们到购买界面查看:
擦,我们发现金币和钻石多了好多呀,那么我们就可以疯狂的操作吧!!!
但是这里我们会发现一个问题,这里的数量和我们设置的不一样,而且我们发现是我们设置的65536倍,是2的16次方,这个问题,我以为是上面smali文件中修改成十六进制的问题,所以我又改成十进制的,结果还是一样,没办法了,不就结了,这个问题不是我们这篇文章的主题,我们只要看到了金币数和钻石数确实被修改了。好开心呀!!
总结:
本文的内容只在于讲解如何破解Android中apk的原理和步骤,当然并不是所有的游戏都能破解的,这也是我这里为什么要选择这款应用的这个版本,这都是有原因的,我曾经用这种方法去破解不同版本的,比如是1.8版本的,结果失败了!因为这里面有一个很大的麻烦就是怎么找到指定的smali文件,这个其实想找到真是超级难的,所以你们也不要多想去破解所以的游戏,当然你们也是可以尝试的,如果可以的话,记得通知我,我也来看看,哈哈!!
分享到:
相关推荐
本应用实现android金币掉落动画
Android中修改资源Id的值的案例
Android中如何修改系统时间,用代码修改linux层的命令,简单好用,系统比较经过Root之后方可进行系统时间的修改,请使用前进行系统root。
android游戏开发之旅 android游戏开发之旅
android studio 安卓扫雷小游戏源代码 运用Android 制作扫雷游戏,制作简单,没有复杂的代码,对于熟悉Android的页面布局,跳转有帮助理解=。这个扫雷还有点瑕疵,广大程序员们可以对其修改和完善。
历史 颜色切换,界面美观好看,并且该套代码需要有扎实的Android的工功底,没有扎实的功底切勿下载,游戏注释打的少,但不影响全局去修改代码 代码本试运行没有任何问题,但是有问题请留言,附带一报错说明。然后...
android 地理位置信息修改 Android中修改地理位置信息
对于适配器加载自定义的xml布局文件,修改该Spinner样式较简单,就是在定义的xml布局文件中修改显示的样式就可以。但对于加载android自带的xml布局文件,有时会出现不是项目所需要的效果。主要问题有下拉几个: 1....
Android 图片属性信息修改(定位信息修改)无需root 直接获取手机中的图片的信息,并修改
本科毕业设计论文,android解密游戏开发,从 1 绪论 1.1 课题的背景及意义1.2 研究现状1.3 论文主要工作1.4 论文结构安排 2 Android平台研究2.1 Android特征 2.2 Android应用的构成2.2.1 活动2.2.2 意图接收器2.2.3...
android 拼图 小游戏 源码android 拼图 源码 小游戏android 拼图 源码 小游戏android 拼图 源码 小游戏android 拼图 小游戏android 拼图 小游戏
Android 3D游戏开发,(含代码和游戏实例)
android xml 文件破解 批量破解
如何修改Android模拟器的IMSI,简单方法。
android原生setting分析(修改版)
Android手机修改通话记录,可以修改通话记录呦。
基于Android平台的扫雷小游戏,使用Android Studio开发,附有简单注释,适用于初步掌握Android技术的程序猿们!
Android修改系统文件访问权限,在init.rc里配置service,通过启动service去执行脚本,在脚本里做修改文件访问权限操作。应用通过jni启动service。
Android中如何修改系统时间,一种是重新编译apk,(这种是网上下载的)另一种是用代码修改linux层的命令;第二种方法比较简单好用;
网上好多不会修改android串口的权限,上传脚本文件供大家使用,公司真实环境无私奉献出来。