android黑科技系列——破解游戏之修改金币数

我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款叫做:八门神器.apk

其实这个软件我下载安装了,但是没有什么效果,不知道是不是我哪里设置的有问题,但是我们这个应用也是有很多限制的,他必须要让手机进行root(说实话,现在获取root是很方便的一件事,如果你想玩游戏,并且想得到更多的东西,手机root是必须的,但是这个可能也可能会失去很多)。

我就当上面的那个应用不可靠,所以我们采用第二种方案了,反编译游戏的apk,然后修改他的代码,在打成apk,在进行这个像操作的同时,我们需要先做一个准备工作,就是了解一下相关知识和一些辅助工具,我们知道Android中的应用程序是:xxx.apk,其实这个apk就是一个压缩文件,我们可以使用解压软件打开的。要想看到源码的话,可能需要一些辅助工具:dex2Jar(将dex文件转化成jar文件),jd-gui.exe(查看jar文件),ApkTool(反编译apk,可以得到他的smali文件,同时可以进行编译打包和签名),这些工具网上都是可以下载到的,但是我这里为了防止有些同学可能找不到正确的版本,导致操作失败,很不开心,所以我就将这些工具都放到csdn中了。

下面我们首先来通过一个简单的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,看看效果吧!!一些男同学貌似很感兴趣呀!但是我们得先干正事

我们点击购物车图标,会看到有购买金币和钻石的界面,系统默认是金币为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文件,这个其实想找到真是超级难的,所以你们也不要多想去破解所以的游戏,当然你们也是可以尝试的,如果可以的话,记得通知我,我也来看看,哈哈!!

时间: 2024-08-02 18:33:48

android黑科技系列——破解游戏之修改金币数的相关文章

android黑科技系列——破解一款永久免费网络访问工具

一.前言 因为最近个人需要,想在手机上使用“高级搜索”,但是找了一圈发现都是需要收费的网络工具,奈何我没钱,所以只能通过专业技能弄一个破解版的. 二.应用分析 下面就直接奔入主题.首先我们看到到期界面如下: 提示会员还有0天,所以这个就是我们的突破口,直接反编译这个app,然后找到这个字符串信息: 然后用Jadx打开apk文件,全局搜索这个name值: 直接点进入进行查看即可: 最终会跟踪到这个方法中,我们在这里发现两个关键点:一个是程序会把用户的有效期保存到本地xml中,一个是这个程序漏洞,没

android黑科技系列——Xposed框架实现拦截系统方法详解

一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xposed框架是免费的而且还是开源的,网上也有很多文章介绍了Xposed框架的原理实现,不了解的同学可以自行查阅即可,本文主要介绍如何通过这个框架来进行系统方法的拦截功能,比如我们开发过程中,对于一些测试环境很难模拟,特别是测试同学有时候像随机改变设备的imei,mcc等信息用来模拟不同测试场景,这时候

android黑科技系列——静态分析技术来破解Apk

一.前言 从这篇文章开始我们开始我们的破解之路,之前的几篇文章中我们是如何讲解怎么加固我们的Apk,防止被别人破解,那么现在我们要开始破解我们的Apk,针对于之前的加密方式采用相对应的破解技术,Android中的破解其实大体上可以分为静态分析和动态分析,对于这两种方式又可以细分为Java层(smail和dex)和native层(so).所以我们今天主要来讲解如何通过静态分析来破解我们的apk,这篇文章我们会通过破解Java层和native层的例子来讲解. 二.准备工作 在开始今天的文章之前,我们

android黑科技系列——手机端破解神器MT的内购VIP功能破解教程

一.前言 在破解app的时候,我们现在几乎都是在PC端进行操作,但是之前bin神的MT管理器,可以在手机端直接破解,不过也有很大的局限性,但是对于一些简单的app破解没问题的.这个工具其实原理也很简单,就是解析apk中的dex,arsc等文件,然后支持修改其中的类方法信息和资源信息,然后在二次打包签名即可.其实把这部分功能移到了移动端做了,不过值得佩服的是这个app从整体效果来说,非常的赞,非常佩服这个工具的作者. 二.逆向分析 但是今天我们的主题是破解这个工具内部的收费功能,而用这个工具进行破

android黑科技系列——爆破一款应用的签名验证问题

一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是会做的,一般现在就两种方式: 第一种:签名校验不通过直接退出程序,也就是你会发现回编译二次打包运行失败的现象 第二种:签名校验不通过不触发程序指定逻辑,导致没有错误信息,也进不了应用的现象 关于Android中应用防护策略的文章可以看这里:Android中应用的攻防之战 今天我们就来看一下签名校验的

android黑科技系列——自动注入代码工具icodetools

一.前言 在前面已经介绍完了 自动给apk中注入日志代码工具icodetools原理了,在那里我们曾经说过其实离真正的可使用价值有点距离,本篇就对这个工具进行一些优化,让其真正意义上开始能工作量产.当时在前面一篇文章中说到遗留的三个主要问题: 第一个问题:对每个类中都添加一个静态打印方法堆栈信息的方法,这样会导致有些应用的dex过大,方法数超了问题 第二个问题:在从输入一个apk到给每个类中的每个方法添加日志代码然后在签名输出最终的apk,这个过程其实很多步,但是我们之前都是手动的去进行操作,非

android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如果这个app应用没有日志信息,我们该怎么办呢?那么这时候就需要采用抓包来寻找突破口了. 二.安装Fiddler证书 我们通过Fiddler连接手机进行抓包查看,应用访问数据信息都是用的HTTPS协议,也就是加密的数据,我们可能无法查看,比较麻烦,本文就来讲解如何查看这些加密数据了. 首先我们知道Fi

android黑科技系列——获取加固后应用App的所有方法信息

一.前言 在逆向应用的时候,我们有时候希望能够快速定位到应用的关键方法,在之前我已经详细介绍了一个自己研发的代码动态注入工具icodetools,来进行动态注入日志信息到应用中,不了解的同学可以查看这里:icodetools动态注入代码解析,看完之后都会发现这个工具对于现在加固的应用是没有办法的,所以我们如何能够得到加固的应用的所有方法信息呢?再不用复杂的脱壳步骤也可以轻松的获取对应的方法信息.这个就是本文需要介绍的内容. 二.获取加固应用方法 在之前了解过加固应用原理的同学或者是弄过脱壳的同学

android黑科技系列——Apk混淆成中文语言代码

一.前言 最近想爆破一个app,没有加壳,简单的使用Jadx打开查看源码,结果把我逗乐了,代码中既然都是中文,而且是一些比较奇葩的中文字句,如图所示: 瞬间感觉懵逼了,这app真会玩,我们知道因为Java语言是支持双字符的,所以可以将包名,类名,变量名,方法名定义成中文,或者其他国家的语言都可以的.所以本身这种做法是不会运行报错的,比如下面我们新建一个Java工程看一下效果: 运行是没有任何问题的.看到这里的时候觉得很好奇,所以就先没去看他的源码了,而是想着怎么实现这种混淆的功能.下面就来介绍一