来谈一谈安卓应用的破解

栏目: Java · 发布时间: 6年前

内容简介:之前有写过一篇博客介绍了下java字节码的查看和分析其实除了分析java内部类、枚举等java语言的实现原理之外,在一些特定的场景也是比较有用的.这篇文章做个死,给大家讲解通过字节码去破解某些安卓应用的原理.

之前有写过一篇博客介绍了下 java 字节码的查看和分析

其实除了分析java内部类、枚举等java语言的实现原理之外,在一些特定的场景也是比较有用的.

这篇文章做个死,给大家讲解通过字节码去破解某些安卓应用的原理.

很多的单机游戏,甚至是一些网络游戏他们运行的时候逻辑运算都是放在本地的.服务端只是接收客户端上传的运算结果.还有一些收费应用,其实功能都在本地代码里面了,只不过是判断了下是否有付费,如果有付费才显示功能入口.

如果我们可以修改它的代码,将上传的结果或者是否付费的判断改成我们希望的,就可以为所欲为了.

反编译

要修改应用的代码逻辑,首先要先分析原来的代码逻辑是怎样的.

但由于应用的代码都是各家公司的私有财产,除非有人做大死泄露了出来,一般我们是拿不到的.所以这个时候我们就只能使用反编译技术了.

如果大家到网上搜索apk的反编译技术,大概率会搜到下面的方法:

  1. 使用apktool工具解压apk
  2. 使用dex2jar工具将安卓优化后的dex文件转换成java的class
  3. 使用jd-gui工具查看class里面的java代码

这么繁琐的操作其实已经过时了,我这边介绍个一键式傻瓜操作的 工具 给大家

jadx

jadx是个开源的安卓反编译工具,它的代码托管在 github 上,大家可以去 下载 来使用

用法很简单,下载之后解压,然后进入bin目录运行jadx-gui(linux/mac)或者jadx-gui.bat(windows),就可以启动一个可视化的界面了,然后点击”文件->打开”,并且选择我们想要反编译的应用,就能看到apk里面的代码了

来谈一谈安卓应用的破解 来谈一谈安卓应用的破解

我这里反编译了一个demo应用,它的MainActivity.onCreate里面判断了一个flag变量,然后弹出Toast.

我们安装这个apk运行起来可以看到弹出toast: “hello world!”

来谈一谈安卓应用的破解

其他应用也是类似的,可以这样查看它们的代码.

不过正式发布的应用一般都会做混淆操作,这个时候我们反编译处理看到的代码的类名、方法名、变量名就都会变成a,b,c这样无意义的字符.

但是只是名字变了,执行逻辑是完全一样的,所以只要够细心,还是可以理清楚它的代码逻辑的.

jadx有个厉害的功能就是可以导出gradle工程,点击”文件->另存为Gradle项目”就可以导出gradle项目了,然后改下目录结构,就可以用Android studio去打开工程并且编辑修改代码了.

如果修改之后编译成功,那么我们的目的就达到了,可以为所欲为,但是这个项目大概率是不能编译成功的,有很多奇奇怪怪的错误.

修改应用的字节码

我们可以用jadx去很方便的分析代码逻辑,但是如果重新编译失败的话我们就只有走别的路子了.

这里介绍直接编辑字节码的方式.走这条路的话就没有什么傻瓜操作可以用了.还是老老实实一步步来吧

1. 解压apk

apk其实是一种zip压缩包,我们可以将它的后缀改成.zip,然后直接解压

来谈一谈安卓应用的破解

我们将解压出来的东西都放到app-release-unsigned目录里面:

来谈一谈安卓应用的破解

2. 将dex转换成jar

我们都知道安卓的虚拟机不是普通的java虚拟机,它不能直接运行java的class文件,需要优化成dex文件.

而我们修改字节码的时候就需要将它转换回来了,这里使用的就是 dex-tools工具 的dex2jar功能:

这里我只介绍 Linux 下命令的用法,就不介绍Windows上的使用了,其实是类似的使用.bat的版本,大家可以自行搜索.

将classes.dex转换成jar文件:

 ~/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh classes.dex

它会生成classes-dex2jar.jar文件:

来谈一谈安卓应用的破解

3. 修改class字节码

其实jar文件也是一种zip压缩包,我们依然可以直接把后缀改成zip,然后解压:

来谈一谈安卓应用的破解

然后找到MainActivity.class

来谈一谈安卓应用的破解

这个时候我们就能用上篇文章说的javap命令去查看里面的代码了:

javap -c MainActivity
来谈一谈安卓应用的破解

这里第16行的意思就是付过栈顶的两个变量不相等就跳到第32行代码,否则继续执行

16: if_icmpne 32

而我们可以看到,继续执行的话会输出hello world!,如果跳的32行的话就会输出hello java!

这里我们可以直接将if_icmpne改成if_icmpeq,在相等的时候跳到32行,否则继续执行,这样原来的”hello world!”提示就会变成”hello java!”了

如果直接用编辑器打开class文件,里面是一些二进制的值.

那我们要怎么修改呢?

这里我们会用到另外一个工具 jbe ,全称是java bytecode editor

下载了之后解压,进入bin目录使用下面命令打开图形界面:

java ee.ioc.cs.jbe.browser.BrowserApplication
来谈一谈安卓应用的破解

在图形界面打开MainActivity.class,并且找到我们的MainActivity.onCreate代码:

来谈一谈安卓应用的破解

然后点击Code Editor选项就可以对字节码进行修改了,这里我们将if_icmpne改成if_icmpeq,然后点击Save method:

来谈一谈安卓应用的破解

这样我们的逻辑修改就完成了

4. 重新打包dex

接下来我们将重新打包apk,首先将class压缩成zip, 注意目录结构 :

来谈一谈安卓应用的破解

然后将后缀改成jar,并且使用jar2dex生成dex:

~/dex-tools-2.1-SNAPSHOT/d2j-jar2dex.sh classes-dex2jar.jar

接着用生成的dex替换原来的classes.dex,然后删除所有刚刚生成的临时文件,如classes-dex2jar.zip和classes-dex2jar目录

来谈一谈安卓应用的破解

5. 重新打包apk

接下来同样的压缩文件生成zip压缩包, 注意目录结构 :

来谈一谈安卓应用的破解

最后将zip后缀改成apk,我们的apk就打包好了

重签名

由于我们重新打包的apk和原来不一致了,如果直接安装是会失败的,需要我们重新给它签名.

创建签名

可以用下面命令创建alias为android.keystore,文件名也是android.keystore的签名文件

keytool -genkeypair -alias android.keystore -keyalg RSA -validity 400 -keystore android.keystore

按下回车之后它会让你输入一些密码、开发者信息等,完成之后就能得到一个android.keystore文件

签名应用

然后我们使用得到的android.keystore去给应用重新签名:

jarsigner -keystore android.keystore -signedjar release.apk app-release-unsigned.apk android.keystore

得到签好名的release.apk

大功告成!

让我们安装进去运行看看,toast已经变成了”hello java!”:

来谈一谈安卓应用的破解

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ant Colony Optimization

Ant Colony Optimization

Marco Dorigo、Thomas Stützle / A Bradford Book / 2004-6-4 / USD 45.00

The complex social behaviors of ants have been much studied by science, and computer scientists are now finding that these behavior patterns can provide models for solving difficult combinatorial opti......一起来看看 《Ant Colony Optimization》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具