发布信息

如何获取Android反编译技术?java逆向工程怎么做?

作者:软荐小编      2023-08-07 01:07:54     171

Android 反编译器有哪些

我们下载的AndroidApp安装包是一个Apk文件(AndroidApplicationPackage)。 通过Apk文件,我们还可以获取这个应用程序的代码和资源文件,并对应用程序进行更改。

那么我们如何获取这些文件呢? 这就需要Android反编译技术了。

计算机逆向工程(Reverse Engineering),又称计算机软件恢复工程,是指对别人软件的目标程序(如可执行程序)进行“逆向分析研究”,从而推导出别人软件中使用的思想的工作产品、原理、结构、算法等元素在具体情况下都可以推导出源代码。

Android反编译工具

Android 应用程序只是数据和资源的存档。 即便如此,我们也不能简单地解压存档 .apk 来获取可读的源代码。 对于这种情况,我们必须依靠将字节代码(如在classes.dex中)转换为可读的源代码。

dex 文件是哪些

dex是Android系统的可执行文件,其中包含应用程序的所有操作指令和运行时数据。

因为dalvik是专门为嵌入式设备设计的java虚拟机,所以dex文件和标准的class文件在结构设计上有本质的区别。

当java程序编译成class时apk软件,还需要使用dx工具将所有的class文件整合成一个dex文件。 目的是让各个类能够共享数据,在一定程度上减少了冗余,同时也使得文件结构更加紧凑。 实验表明dex文件大小约为传统jar文件大小的50%

dex2jar简介

dex2jar 可以将字节码 .dex 文件转换为可读的 .jar 文件。

下载并安装

首先,必须在笔记本上安装并配置Java环境。 点击下载地址:dex2jar下载地址,下载后直接解压。 解压后可以看到文件内容如右图:

4k影视软件apk_软件apk是什么意思_apk软件

执行编译

1、用压缩软件打开apk包,然后解压classes.dex文件,放到我们解压的dex2jar目录下。

如果包中存在classes.dexclasses2.dexclasses3.dexclasses4.dex...等文件,这是因为apk中的方法数量超过65536,并且使用了multidex支持库来拆分apk中的dex文件分成多个 dex 文件。 相关知识可以搜索android65k了解。

4k影视软件apk_软件apk是什么意思_apk软件

打开cmd进入dex2jar目录,执行命令d2j-dex2jar.batclasses.dex完成编译。

C:\Users\Shuqing
λ cd C:\Users\Shuqing\Desktop\dex2jar-2.0


C:\Users\Shuqing\Desktop\dex2jar-2.0
λ d2j-dex2jar.bat classes.dex
dex2jar classes.dex -> .\classes-dex2jar.jar

如果想覆盖已经生成的classes-dex2jar.jar文件,可以添加参数--force。

3、解压完成后,我们可以看到多了一个文件classes-dex2jar

apk软件_4k影视软件apk_软件apk是什么意思

京东GUI

JD-GUI 是一个独立的图形实用程序,可显示 .class 文件的 Java 源代码。 您可以使用 JD-GUI 浏览重建的源代码,以即时访问技巧和数组。

下载链接:

安装完成后,启动JD-GUI,导出其中生成的classes-dex2jar,依次点击File-Openfile加载,可以看到如下界面:

软件apk是什么意思_apk软件_4k影视软件apk

通常App会对代码进行混淆或加密以保证安全,所以通常反编译后的代码都是混淆后的代码,无法直接看到原始代码。

apk工具简介

Apktool主要用于逆向apk文件,即将.dex文件转换为smali文件。 smali语言是Dalvik的反汇编语言。

Apktool与JD-GUI相比的主要优点是它是单向的。 这意味着,如果您反编译应用程序并对其进行更改apk软件,然后使用 Apktool 重新编译它,它将重新编译并生成新的 .apk 文件。 然而,dex2jar和JD-GUI无法完成类似的功能,因为它提供的是近似代码,而不是精确代码。

下载并安装

这里我们以Windows为例。 其他环境请参考:

要验证是否安装成功,可以打开cmd,进入apktool文件目录,然后输入命令apktool,看到如下提示则说明安装成功。

Apktool v2.4.1 - a tool for reengineering Android apk files
with smali v2.3.4 and baksmali v2.3.4
Copyright 2014 Ryszard Wiśniewski com>
Updated by Connor Tumbleson com>

usage: apktool
-advance,--advanced prints advance information.
-version,--version prints the version then exits
usage: apktool if|install-framework [options] ramework.apk>
-p,--frame-path
Stores framework files into .
-t,--tag Tag frameworks using .
usage: apktool d[ecode] [options]
-f,--force Force delete destination directory.
-o,--output
The name of folder that gets written. Default is apk.out
-p,--frame-path
Uses framework files located in .
-r,--no-res Do not decode resources.
-s,--no-src Do not decode sources.
-t,--frame-tag Uses framework files tagged by .
usage: apktool b[uild] [options]
-f,--force-all Skip changes detection and build all files.
-o,--output
The name of apk that gets written. Default is dist/name.apk
-p,--frame-path
Uses framework files located in .

For additional info, see: http://ibotpeaches.github.io/Apktool/
For smali/baksmali info, see: https://github.com/JesusFreke/smali

反向编译

apktool 编译命令 apktoolold[路径][应用程序名称].apk。 d 标志表示反编译(解码)。

C:\Users\Shuqing\Desktop\apktool
λ apktool d kaoyan.apk
I: Using Apktool 2.4.1 on kaoyan3.1.0.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\Shuqing\AppData\Local\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...

编译完成后会生成一个与apk包同名的文件夹,里面包含资源文件和代码文件。

eb6f59fb4e303f21170c2bcb7160ca57

打包编译

更改反编译的文件或代码后,我们可以调用命令 apktoolb[path][target-app-name].apk 重新打包生成 apk 文件。

C:\Users\Shuqing\Desktop\apktool
λ apktool b kaoyan -o new_kaoyan.apk
I: Using Apktool 2.4.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...

签名 生成签名文件

里面打包编译生成的apk因为没有签名所以不能直接安装。 因此,需要签名。 我们可以自己生成一个签名文件。 首先我们需要安装jdk环境。

使用keytool命令生成签名文件,如下:

λ keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: 51zxw
您的组织单位名称是什么?
[Unknown]: 51zxw.net
您的组织名称是什么?
[Unknown]: 51zxw2020
您所在的城市或区域名称是什么?
[Unknown]: beijing
您所在的省//自治区名称是什么?
[Unknown]: beijing
该单位的双字母国家/地区代码是什么?
[Unknown]: 86
CN=sutune, OU=sutune.me, O=sutune2020, L=changsha, ST=hunan, C=86是否正确?
[]: y

输入 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:

执行完成后,会生成android.keystore签名文件。

执行签名

执行签名操作如下:

jarsigner -verbose -keystore android.keystore -signedjar  new_kaoyan-signed.apk  new_kaoyan.apk  android.keystore
输入密钥库的密码短语:
....(此处省略N)
正在签名: assets/newsdetail/ky_article.html
正在签名: assets/newsdetail/newsdetail.html
正在签名: assets/newsdetail/newsdetail_1.html
正在签名: assets/ShareSDK.xml
正在签名: assets/share_logo.png
正在签名: manifest
正在签名: com/tencent/mm/sdk/platformtools/rep5402863540997075488.tmp
jar signed.

这样,一个apk的签名过程就完成了,接下来就可以安装使用了。

注意:如果您的手机上已经有此apk,需要先卸载,否则签名冲突会导致安装失败。

相关内容 查看全部