Android中怎么破解游戏之修改金币数
我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是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黑科技系列——破解游戏之修改金币数
我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款 ...
- Android中通过进程注入技术修改系统返回的Mac地址
致谢 感谢看雪论坛中的这位大神,分享了这个技术:http://bbs.pediy.com/showthread.php?t=186054,从这篇文章中学习到了很多内容,如果没有这篇好文章,我在研究的过 ...
- Android中通过进程注入技术修改广播接收器的优先级
前言 这个周末又没有吊事,在家研究了如何通过进程的注入技术修改广播接收器的优先级,关于这个应用场景是很多的,而且也很重要,所以就很急的去fixed了. Android中的四大组件中有一个广播:Broa ...
- 【转】android 中如何限制 EditText 最大输入字符数
原文网址:http://blog.csdn.net/fulinwsuafcie/article/details/7437768 方法一: 在 xml 文件中设置文本编辑框属性作字符数限制 如:andr ...
- android 中如何限制 EditText 最大输入字符数
方法一: 在 xml 文件中设置文本编辑框属性作字符数限制 如:android:maxLength="10" 即限制最大输入字符个数为10 方法二: 在代码中使用InputFilt ...
- [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法
一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...
- [转载] Android中Xposed框架篇---利用Xposed框架实现拦截系统方法
本文转载自: http://www.wjdiankong.cn/android%E4%B8%ADxposed%E6%A1%86%E6%9E%B6%E7%AF%87-%E5%88%A9%E7%94%A8 ...
- 破解者是如何篡改游戏内数值的,揭秘Android手游破解全过程
由于Android系统的开放性,让人人都是开发者成为可能,也正因如此,手机APP遭受破解和盗版问题长期存在,且愈演愈烈.尤其是手游 行业,如刀塔传奇.植物大战僵尸.2048等知名游戏被破解的案例不胜枚 ...
- 分享:Android中利用机器码注册机制防止破解(转)
转自:http://blog.csdn.net/huzgd/article/details/6684094 最近做一个Android应用时遇到这个问题,客户要求功能必须注册才能使用,而程序本身又不是联 ...
随机推荐
- Database基础(一):构建MySQL服务器、 数据库基本管理 、MySQL 数据类型、表结构的调整
一.构建MySQL服务器 目标: 本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认 ...
- 学习.net的步骤
第一步 学习HTML与CSS 这并不需要去学一大堆的诸如Dreamweaver,Firework之类的各种网页设计工具,关键是理解HTML网页嵌套的block结构与CSS的box模型.许多ASP.NE ...
- Android ROM 开发技能图谱
# Android ROM 开发技能图谱 ## 1. 操作系统 * Ubuntu(首选)* MacOSX ## 2. 编程语言 * Java * JNI(务必掌握)* C++* C ## 3. 源码 ...
- 关于radio选中或者反选
关注点:一.attr()和prop()的区别 <!DOCTYPE html> <html> <head> <title>JavaScript对文字按 ...
- vi总结的几个技巧
1.用vi编辑完文件后 按两次Z可以直接保存退出2.在打开一个vi编辑时可以输入:sp /etc/passwd 同时打开另一个文件注意这里要用绝对路径
- POJ 2001 Shortest Prefixes (Trie)
题目链接:POJ 2001 Description A prefix of a string is a substring starting at the beginning of the given ...
- Rust <7>:数据结构==>链表
enum List { Cons(u64, Box<List>), NULL, } impl List { fn new() -> List { List::NULL } fn pr ...
- redis基本介绍搭建篇
1.redis基本介绍 1.1 redis介绍 Redis属于非关系型数据库和Memcached类似,redis也是一个key-value型存储系统. 但redis支持的存储value类型相对更多,包 ...
- 接口自动化测试框架-AIM2.0
跳转到3.0版本https://www.cnblogs.com/df888/p/12031649.html AIM是我用python搭建的第一款接口自动化测试框架,随着技术的提升,框架也在升级,故有了 ...
- NMS python实现
import numpy as np ''' 目标检测中常用到NMS,在faster R-CNN中,每一个bounding box都有一个打分,NMS实现逻辑是: 1,按打分最高到最低将BBox排序 ...