android 逆向工程apktool dex2jar jd-gui Jadx Smali2Java

android 逆向工程apktool dex2jar jd-gui Jadx Smali2Java

app安全–签名校验:
(签名只是对完整性和签名发布机构的校验机制,不能阻止 Apk 被修改,只是签名无法保持一致
不同私钥对应着不同的公钥,实质上不同的公钥就代表了不同的签名)
JAVA层的签名校验,NDK层校验(IDA打开so跟踪修改),分段存放签名Hash串,服务器校验(服务器验证的抓包查看)

Apk文件结构:
1、META-INF:
签名文件夹,里面有三个文件 MANIFEST.MF 、 CERT.SF 、 CERT.RSA。
2、res:
资源文件,里面的 xml 格式文件在编译过程中由文本格式转化为二进制的 AXML 文件格式。
3、AndroidManifest.xml:
Android 配置文件,编译过程依然被转换为 AXML 格式。
4、classes.dex: (核心逻辑在 classes.dex,破解和二次打包也基本上针对该文件)
java 代码编译后产生的类似字节码的文件(dalvik 字节码)。
5、resources.arsc:
具有 id 值资源的索引表(asserts 文件夹中的资源不会生成索引)。
6、其他文件:
可由开发者自己添加,诸如assets等,或者lib(native so代码)等目录。

smali
Dalvik VM内部执行的核心代码,是Android的Dalvik虚拟机所使用的一种dex格式的中间语言。Android采用的是Java语言进行开发,
但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali。也就是由java转化而来

apktool
apk反编译工具,拥有编译、反编译、签名等功能,可得到apk的资源文件和配置文件以及代码的smali文件
1、反编译.apk
  对.apk文件进行反编译,生成相应的res、smali文件。
2、重建.apk
  根据反编译.apk得到目录重建.apk文件。
3、签名.apk
  对.apk文件进行签名。
4、优化.apk
  对.apk文件进行优化。
5、framework-res.apk工具
  实现framework-res.apk的安装和管理。
6、.apk转.jar
  将.apk文件转换为.jar文件。
7、.dex转.jar
  将.dex文件转换为.jar文件。
常用命令如下:
解包;
APK:Java -jar apktool.jar d *.apk -o out
*.apk 是被解包的APK文件名, out是输出目录名称
重新打包:
java -jar apktool.jar b out
out 就是上面的输出目录
导入framework-res.apk 架构文件:
java -jar apktool.jar if frameword-res.apk
需要将 framework-res.apk 文件放在 apktool.jar 的相同目录下,导入架构文件可以解决一些调用了系统框架资源的 APK 包解包失败的问题
如:

java -jar apktool.jar d Demo.apk -f   
//反编译,若报错 --- Exception in thread “main” java.lang.NullPointerException,根据错误信息,删除C:\Users\×××\apktool\framework\1.apk文件,从新运行以上指令即可
java -jar apktool.jar b Demo -f
 //打包,根据反编译Demo.apk得到的目录Demo,进行重建Demo.apk文件(生成的Demo.apk文件位于Demo/dist目录下)

1、java -jar apktool.jar就是调用apktool.jar来工作(它会自己找到main函数执行)
2、d 表示反编译(也可以是.jar包)
b 表示重建apk文件
3、Demo.apk 需反编译文件(跟apktool.jar文件处于同一目录下)
4、-f的意思是说如果Demo.apk反编译后端生成的Demo文件夹已存在, 就会覆盖
这里写图片描述

dex2jar
是一个能操作Android的dalvik(.dex)文件格式和Java的(.class)的工具集合,包含以下几个功能
1、dex-reader/writer: 用于读写 Dalvik Executable (.dex) 文件格式. 包含一个简单的API(与ASM相似)
2、d2j-dex2jar: 执行dex到class的文件格式转换
3、smali/baksmali: 与smali工具功能一致,但是对中文更友好
4、其他工具: 字符串解密

如:
将要反编译的APK后缀名改为.rar或则.zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),
将获取到的classes.dex放到dex2jar-2.0文件夹内,命令行下定位到dex2jar.bat所在目录,输入dex2jar.bat classes.dex在改目录下会生成一个classes_dex2jar.jar的文件
这里写图片描述

jd-gui
是一个独立的显示“.class” 文件Java源代码的图形用户界面工具,java的jar文件反编译工具。您可以使用JD-GUI浏览和重建源代码的即时访问方法和字段,以代码高度方式来显示反编译过来的代码。可以浏览重建的源代码,JD-GUI的即时访问方法和字段
是一个免费的非商业用途软件—jd-gui不得包含或嵌入到商业软件产品。
使用C++开发,主要具有以下功能:
一、支持众多Java编译器的反编译;
二、支持对整个Jar文件进行反编译,并本源代码可直接点击进行相关代码的跳转;
(APK打包时做过混淆,反编译之后里边多以abc之类的命名,但逻辑是很清晰的,可以给我们提供一个实现的思路)
这里写图片描述

JD-Core和JD-GUI
JD-Core 是一个免费的库,从一个或多个“.class”文件中 重构Java源代码。
JD-Core 可以用来恢复丢失的源代码,并深究Java运行时类库。
JD-GUI 和 JD-Eclipse(都包括JD-Core)
Java反编译工具,实现了eclipse的高亮着色功能,多文件标签浏览

Jadx
一款github上开源apk静态分析工具(Android反编译gui工具)
jadx可以一行命令直接反编译恢复出.java文件, 代码还原度高,且支持交叉索引等,
(相当于apktool + dex2jar + jd-gui的功能集, 但速度较慢,不支持变量,方法重命名等,在针对混淆代码分析时有些力不从心!)

操作步骤:(需要安装jdk)
1、需要先把1.apk拷贝到jadx目录的bin目录下 //支持反编译.dex, .apk, .jar or .class
2、打开cmd窗口,cd进入jadx的bin目录
3、在bin目录新建out文件夹
4、cmd窗口执行命令jadx -d out 1.apk
(或者双击jadx-gui.bat,点选需要反编译的.apk, 软件自动会反编译出.java文件等, 反编译了资源文件和源码)
这里写图片描述

这里写图片描述

Smali2Java
集成apktool的图形化apk反编译工具,运行Smali2JavaUI.exe,将要反编译的APK文件直接打开即可看见项目的.java源码(也可以转换.smali文件成.java文件),相当于apktool + dex2jar + jd-gui的功能集
(只是少了声明文件、布局文件、图片资源文件、smali文件、语言文件等其它反编译后的相关项目文件)
这里写图片描述

Android Killer
是一款免费可视化安卓反编译软件箱,它可以对安卓APK文件进行反编译、APK打包、APK签名、APK编码转换等多种功能为一体;
编译文件以树形目录结构呈现出来,自动失败图像资源文件,并提供图片资源的快捷替换功能,方便用户对APK文件进行二次修改,
同时工具中内置了代码编辑器,支持包含(但不限于)。
samli、xml、html等各类格式文件的语法高亮显示(良好的smali显示效果和编辑功能)。
同时,ak有一项强大的功能是代码插入,可以对代码进行稍加的封装,即可实现快速插入代码(代码插桩)
打造一站式逆向工具操作体验,大大简化了用户在安卓应用/游戏修改过程中的各类繁琐工作

### 回答1: Mac系统无法直接运行APK文件,因此需要使用一些工具来进行解压和反编译。apktooldex2jar是两个非常常用的工具,可以用来解压和反编译APK文件。jd-gui则是一款反编译工具,可以用来查看和编辑反编译后的代码。 首先,我们需要安装Java开发工具包(JDK)。可以在Oracle官网下载JDK,选择与自己的系统版本对应的安装包进行安装。 安装完JDK后,我们可以使用Homebrew来安装apktooldex2jar。Homebrew是一款Mac系统下的包管理器,可以方便地安装和管理各种软件。 在终端中输入以下命令: ``` brew install apktool brew install dex2jar ``` 这样就可以成功安装apktooldex2jar了。 接下来,我们需要下载并安装jd-gui。可以在jd-gui官网上下载适用于Mac系统的安装包。下载完成后,我们将其解压,并将解压得到的jd-gui.app文件移动到/Applications目录下即可。 现在,我们就可以使用这些工具来对APK文件进行解压和反编译了。具体操作方法可以参考相关教程和文档。总之,使用这些工具需要一定的技术和经验,初学者需要多加学习和实践。 ### 回答2: 首先,需要说明一下,macOS 平台是不能直接安装 apktooldex2jar 等工具的,在 macOS 上只能通过命令行安装 Homebrew 作为包管理器,然后使用 Homebrew 安装 apktooldex2jar。 步骤如下: 1. 安装 Homebrew:在 Terminal 终端输入以下命令(无需 sudo): ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" ``` 2. 安装 apktool:在 Terminal 终端输入以下命令: ``` brew install apktool ``` 3. 安装 dex2jar:在 Terminal 终端输入以下命令: ``` brew install dex2jar ``` 至于 jd-gui,它是一个 Java 应用程序,需要从官网下载 .dmg 安装包,然后在 Finder 中打开安装包,将 jd-gui 应用程序拖动到 Applications 应用程序文件夹中即可。 安装完成后,可以通过以下命令来测试 apktooldex2jar 是否安装成功: ``` apktool --version d2j-version ``` 如果命令行能够输出版本号信息,则说明安装成功。 使用这些工具时,需要注意以下几点: - 在使用 apktool 时,需要先使用 apktool d 命令将 APK 文件反编译成 smali 代码; - 在使用 dex2jarjd-gui 时,需要先使用 d2j-dex2jar 命令将 APK 文件转换成 jar 文件,然后使用 jd-gui 打开对应的 jar 文件进行反编译。 - 在使用这些工具时,需要先了解相关的基础知识,熟悉 smali 语言和 Java 字节码知识,否则可能会无从下手。 ### 回答3: 您好,mac 安装 apktooldex2jar, jd-gui 的步骤如下: 一、安装 apktool: 1. 首先,确保您已经安装了 Homebrew 包管理器,如果没有,请在终端输入以下命令进行安装: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 2. 安装 apktool,打开终端并输入以下命令: brew install apktool 3. 然后,可以输入以下命令检查 apktool 是否成功安装: apktool --version 二、安装 dex2jarjd-gui: 1. 首先,需要下载 dex2jar 工具和 jd-gui 工具,可以在官方网站中下载: dex2jar:https://github.com/pxb1988/dex2jar/releases jd-gui:http://jd.benow.ca/ 2. 下载完成之后,将 dex2jarjd-gui 的压缩包解压到任意目录下(例如:/Users/xxx/tools)。 3. 接着需要在终端中输入以下命令赋予 dex2jarjd-gui 的执行权限: chmod +x /Users/xxx/tools/dex2jar-2.0/d2j-dex2jar.sh chmod +x /Users/xxx/tools/jd-gui-1.6.6/jd-gui.app/Contents/MacOS/jd-gui 4. 现在,dex2jarjd-gui 就已经安装完成了,现在可以使用以下命令将 APK 文件转成 JAR 文件: /Users/xxx/tools/dex2jar-2.0/d2j-dex2jar.sh /path/to/apk/file.apk 然后,就可以使用 jd-gui 打开生成的 JAR 文件了。 希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值