1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 安卓逆向_2 --- Androidkiller apktool dex2jar jd-gui jadx jeb 反编译工具

安卓逆向_2 --- Androidkiller apktool dex2jar jd-gui jadx jeb 反编译工具

时间:2021-10-08 14:45:31

相关推荐

安卓逆向_2 --- Androidkiller apktool dex2jar jd-gui jadx jeb 反编译工具

From:/thread-726176-1-1.html

爱盘 - 在线 PJ 工具包:/

AndroidKiller 与 Android Studio 的使用 (反编译后通过 android studio 动态调试 smali):

/a_1054280044/article/details/60465267

Androidkiller 的简单使用:修改应用名称

AndroidKiller 简单使用:修改应用名称:/zeussbook/p/11014144.htmlAndroid反编译工具的使用-Android Killer - 反编译美柚:/p/19b62aace407

反编译工具

1. 入门级反编译工具:Apktool、dextojar 都是基于命令行2. 初级反编译工具:jadx 比 apktool 要方便一些,不仅能解析 jar 包,还可以直接把 apk,dex,aar 拖进去直接查看,还可以搜索,非常方便。3. 高级反编译工具:jeb,这个工具的安装和使用都比前两个复杂,且是收费。

一、AndroidKiller 安装、设置、使用教程

AndroidKiller安装、设置及使用教程:/thread-726176-1-1.html

链接:/s/134pGb1Mc4Yhpv54fozb73A

提取码: q6m2

解压密码:

这篇帖子基本很详细的从 jdk 的安装到环境变量的设置,到安装到下载,以及会遇到的问题,解决办法都很详细了,没有之一,强推!。下面为帖子详细内容。直接搬过来

前置补充,感谢大神 @旧年白白白 的建议,4月15日15:20分网盘补充了一个蓝叠链接AK的批处理文件,有需要请下载!附上批处理的源代码,可以直接复制粘贴到记事本,然后另存为AK自动连接蓝叠模拟器.bat文件使用。从下面开始为批处理的代码

@echo off

TITLE AndroidKiller_v1.3.1自动ADB连接蓝叠模拟器工具 by 吾爱论坛 昨夜星辰

color 3f

:MENU

CLS

@ ECHO.

@ ECHO =================================================

@ ECHO.

@ ECHO出处:

@ ECHO.

@ ECHO =================================================

@ ECHO.

@ ECHO 以下将自动开始通过ADB命令连接蓝叠模拟器

@ ECHO.

@ ECHO 请确认是否已经将AK目录下bin\adb文件夹中的3个文件复制到蓝叠模拟器目录

@ ECHO.

@ ECHO 请确认蓝叠模拟器的安装路径是C:\Program Files\BluestacksCN

@ ECHO.

@ ECHO 请确认C:\Program Files\BluestacksCN\Engine\ProgramFiles目录下有HD-ADB.exe文件

@ ECHO.

@ ECHO 信息完全一致,请按 Y → 回车键继续

@ ECHO.

@ ECHO 信息不一致,请按 N → 回车键关闭窗口,修改本批处理文件后重新运行

@ ECHO.

@ ECHO =================================================

@ ECHO.

@ ECHO.

@ ECHO.

:CHO

set choice=

set /p choice= 选择你要进行的操作:

IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%

if /i "%choice%"=="Y" goto 1

if /i "%choice%"=="N" goto 2

echo 选择无效,请重新输入

echo.

goto MENU

:1

CLS

COLOR E0

ECHO. =================================================

echo.

echo 正在操作中,操作完成后按任意键关闭窗口

echo.

ECHO. =================================================

@ taskkill /im adb.exe /f

>nul 2>nul 上方的命令作用是结束adb进程,不用修改

@ taskkill /im hd-adb.exe /f

>nul 2>nul 上方的命令作用是结束hd-adb进程,这个进程是蓝叠模拟器特有的,其他模拟器应该没有,不用修改

@ cd /d C:\Program Files\BluestacksCN\Engine\ProgramFiles

>nul 2>nul 上方命令的作用是改变当前目录hd-adb.exe所在的C:\Program Files\BluestacksCN\Engine\ProgramFiles目录(蓝叠的默认目录是这个)如果你的目录不一样,请按实际路径修改命令的后半部分

@ hd-adb connect 127.0.0.1:5555

>nul 2>nul 上方命令的作用是启动hd-adb.exe进程,并通过5555端口进行连接,蓝叠是5555默认adb端口,其他模拟器请自行修改对应的端口号

CLS

COLOR 0a

CLS

echo.

echo.

echo.

echo.

echo 全部操作已处理完毕

echo.

echo.

echo.

ECHO. =================================================

echo.

echo 操作完成,按任意键关闭窗口

echo.

ECHO. =================================================

ECHO.

echo.

ECHO.

ECHO.

ECHO.

ECHO.

ECHO.

echo.

ECHO.

ECHO.

ECHO.

ECHO.

pause

:2

CLS

COLOR 30

echo ***************************************************************************

echo * *

echo * *

echo * 即将关闭窗口 *

echo * *

echo * *

echo * *

echo ***************************************************************************

ECHO.

echo.

ECHO.

ECHO.

ECHO.

ECHO.

echo.

echo.

ECHO.

pause

以上为批处理的代码。

大家好,我是昨夜星辰,之前发布过几个教程帖子,各位老铁反应非常热烈,但是还有一些小伙伴们看帖子想实际操作却操作不了,究其原因,是AndroidKiller(简称AK)、JDK等没有安装或者设置好,鉴于此,我整理了一下论坛现有的主题帖,发布这个教程贴,希望能帮助更多的小伙伴享受安卓逆向和安卓安全(不要老是说PJ了,说多了容易被河蟹,大家懂的)。在开始之前,首先需要感谢以下几位大神,因为帖子中引用到他们的劳动成功,排名不分先后:@淡然出尘 、@skywilling、@S先生 、@你坏 、@pwelyn 、@Aug_书生、@冥界3大法王 、@旧年白白白 、@winding,感谢以上所有大神所付出的努力以及对吾爱论坛的支持。

先简单说明下我的操作环境:

系统:Windows XP SP3 32位JAVA(JDK)8 下载地址:/java/technologies/downloads/Androidkiller (简称 AK )。下载地址:/Tools/Android_Tools/手机模拟器:雷电模拟器 官网地址:/

一、基础篇:

Androidkiller 的使用

首先,引用大神@淡然出尘的帖子:

​Android Killer V1.3.1正式版 发布信息:​/thread-319641-1-1.htmlAndroid killer 知多少:/thread-318780-1-1.html

​通过这两个链接,了解下 Androidkiller(简称AK)这个神器,但是,神器嘛,并不是谁想用就能用的,首先你得让神器认主了,才可以随心所欲的操纵他,如果不然的话,可能就会出现下面截图中的情况:

虽然不认主不会造成神器的反噬,但是会令到你不能使用神器,那就让人很不爽了。下面,我来传授你让神器认主的秘诀,一般人我还不告诉他。

1. 安装 JDK

先要安装好适合你系统版本的 JDK,在这里我使用的是 Java SE 8u241版本:

下载地址(需要 Oracle 账号登录才能下载):/java/technologies/javase-downloads.html

下载和安装的过程这里就略过了,毕竟都是一直下一步这样的操作,没技术含量,来吾爱的都懂的操作。安装和配置 Java JDK 和 JRE:/freeking101/article/details/80522586

2. 配置环境变量

java1.5 版本之后可不需要设置 classpath,这里只需要设置JAVA_HOME

然后 在PATH变量上追加%JAVA_HOME%\bin

配置之后,点击 开始(或者 win + r) → 运行 → cmd → 确定,然后在键入【java】以及【javac】,看到命令执行成功,说明 java 环境配置成功。

3. 设置 AndroidKiller 的 JDK

安装好 JDK 后,我们再次打开我们的神器 AK,出现如下提示我们直接点OK

到了这里,如果之前的步骤你没有出错的话,那恭喜你,你的神器已经完成认主了,你可以随心所欲的操纵神器,在APK的战场上尽情厮杀。

至此,基础篇已经修炼完毕,下面即将进行进阶篇。

二、进阶篇:

正所谓,工欲善其事,必先利其器,AndroidKiller 虽然是 Android 逆向方面的神器,但是 Android 版本更新迅速,而 Android Killer 早已不再更新,这不能不说是一个遗憾,也许有人会想到APK改之理(又叫APKIDE),我个人觉得,改之理 用着没那么顺手,在这里就不吐槽了。

表现 1:AndroidKiller 对高版本的编译会卡在代码的位置,如下图:

一直卡在这个状态,必须手动关闭AK。

再次打开 AK,对刚才的 APK 进行分析时,会出现如下情况:

直接运行 Androidkiller 根目录下 dextojar.bat 命令脚本,然后输入你的 androidkiller 目录下的 projects 下的名称,名称一定不能输入错误,否则的话,反编译不成功。

最后,再重新运行androidkiller工具,打开之前反编译的apk,然后随便打开一个smali文件,再点击工具栏上的查看java源码的按钮,即可查看相对应的java源码了

解决 androidKiller 反编译高版本 java 源码出错的工具优化篇 作者 @S先生:/thread-646293-1-1.html (我提供的整合版中已包含)。方法如下:

完成后会出现在这里

然后我们再按照帖子:AndroidKiller:解决编译源码卡死[.3 更新链接] 作者 @你坏 /thread-658341-1-1.html (我提供的整合版中已经替换了文件)更新一下 rtl230.bpl 这个文件,替换 AndroidKiller 目录中的 rtl230.bpl 就可以了。最后,我们按照帖子:androidkiller 反编 java 卡死的一种简便处理方法(继续与坛友的讨论) 作者 @winding:/thread-689999-1-1.html 再来添加一下 @winding 大神的批处理插件,具体方法参照上方的说明以及大神的主题帖子。(我提供的整合版中已包含)

表现 2:有时候 AK 在编译时会出现编译失败的情况,如下:

出现这个情况,可能是 apktool 版本太旧,因为 Android killer 的核心就是 apktool,需要更新apktool版本。

下载地址:

:/iBotPeaches/Apktool:https://ibotpeaches.github.io/Apktool/

下载最新的apktool,放在目录 AndroidKiller_v1.3.1\bin\apktool\apktool,然后下面方法配置

顺便也把 jd-gui 和 dex2jar 也更新了一下,帖子地址:

JD-GUI:/thread-398642-1-1.htmljd-guigithub地址:/java-decompiler/jd-gui

方法是将下载的文件替换 AndroidKiller_v1.3.1\bin\jd-gui 的 jd-gui.exe 和 AndroidKiller_v1.3.1\bin\dex2jar 里面的文件。

至此,进阶篇算是修炼完毕了,你的神器 AK 已经比一般人的 AK 强大太多了,可以称之为 AK47了。接下来该是成神篇了。

三、终篇成神篇:

再强大的个体也需要团队,再强大的神器也需要插件,所以,在这一篇章中,我为大家介绍下神器 AK 的几个神级插件。

AndroidKiller 插件

​1、首先为大家介绍的是来自作者 @冥界3大法王 大神的自制插件,新品到货:《AndroidKiller打开路径伴侣》来了~~ ( :/thread-697919-1-1.html ) (相关附件自行下载)具体的请大家移步到大神的主题帖查看,确实是不可多得的好插件。

2、在我们正常的安卓逆向中,难免碰到加壳、加固的APP,那怎么快速判断APK文件是否经过加壳加固呢?我们可以使用AK自带的查壳工具进行查壳,但是因为AK自身版本的原因,部分新壳可能无法识别。

为了解决这个问题,我们就需要第三方的查壳工具,是我要为大家介绍的第二个神器伴侣,来自大神@旧年白白白的帖子:ApkScan-PKID查壳工具+脱壳(搬运) 作者 @旧年白白白。( :/thread-708085-1-1.html)(提供的整合版中已包含该插件)

3、AK 作为 Android 逆向的神器,最大的功能当然就是进行APK的编译和反编译工作了,但是经过修改过的APK最终还是需要进行安装测试的,如果每次都用真机进行测试,未免太麻烦以及有点危险,毕竟不是每个人都有多部手机可以使用的。所以我们有另外一个大神器,手机模拟器。例如:夜神、天天、蓝叠、雷电 等等。我为大家介绍的第一个神器插件,就是用于将手机模拟器和AK 连接起来的神级插件,来源是:安卓反编神器Android killer 连接夜神模拟器小工具带e源码 作者@Aug_书生。( :​/thread-704289-1-1.html)(相关附件请自行下载)

具体的请移步到该大神的帖子中查看,因为我用的不是夜神模拟器,所以,我将结合我自己使用的蓝叠模拟器来为大家演示怎样将AK与模拟器连接。

因为AK版本升级到1.3后,对模拟器的支持不是很好,需要自己手动开启ADB命令才能连接上,担心大家不会操作,我尽可能的详细说明一下操作步骤和注意事项,第一点要注意的就是,我说的方法只适用于XP系统以及蓝叠模拟器,其他操作系统和模拟器请自行对照修改。

需要用到的工具:蓝叠模拟器、AK。

首先,进入 AK 目录下 \bin\adb 文件夹,将该文件夹中的 adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll 这三个文件复制到模拟器的安装目录下的 Engine\ProgramFiles 文件夹中,这个文件夹中有一个叫 HD-Adb.exe 的文件,不知道路径的话请直接搜索 HD-Adb.exe 这个文件,然后打开文件所在目录,如下图:

打开蓝叠模拟器,进入设置 → 存储设置 → 点击右上角的三点 → 选择USB计算机连接,在新打开的界面中勾选【MTP】,然后重启模拟器,具体如下图所示:

让我们先看看现在的AK中能不能发现模拟器:

等待模拟器启动成功,然后点击开始→ 运行 → 输入cmd → 确定 → 在命令提示窗口输入如下格式的命令【cd/d adb.exe所在的目录完整路径】,如我的路径为:(注意1,一定要等模拟器完全启动完成才能进行命令的输入,注意2,注意空格的位置)C:\ProgramFiles\BluestacksCN\Engine\ProgramFiles,则输入如下命令:【cd /d C:\Program Files\BluestacksCN\Engine\ProgramFiles】不含中括号。如下图:

然后再输入如下命令格式:【adbconnect 127.0.0.1:端口号】不含括号,其中蓝叠模拟器的端口号是5555,所以,我输入的命令就是【hd-adb connect 127.0.0.1:5555】如下图:注意空格

好了,好人做到底,我再顺便为大家送上几个主流模拟器的默认adb端口:

smali 插桩 插件

​-02-15 安卓应用逆向安全 androidKiller 使用与配置:/p/a7d9c28337e5

日志功能:一些app代码里会遗留一些debug信息,比如Log.d(“...”),利用日志功能我们可以找到这些信息。

日志功能还带有进程过滤的子功能,方便我们对特定的应用进程进行监控。

对一些没有apk验证的app来说,修改apk的包名,可以使在同一手机上共存两个相同的app。注意修改之后需要再次编译。某些字符串定位不到的时候,可以试试把字符编码改为unicon

​4、终极神器插件,来自帖子:小白的《宾果消消消》某定制版逆向笔记 作者 @winding

/thread-712040-1-1.html(整合版已包含该附件并附上winding大神亲自录制的操作视频)

​​根据 winding 大神的要求必须给神器的原作者注明一下:/charlessimonyi/article/details/52027563

Android应用逆向——分析反编译代码之大神器作者:charlessimonyi核心思想和代码是人家的。

我简单的介绍一下这个神器吧,引用原作者的话说,就是:“一个帮助分析代码执行流程的大神器。这个神器优点很多,不过遗憾的是它有一个致命的缺点!就是威力太大,能让使用它的人快速分析出一个复杂APP的执行流程,快速定位关键之处进行修改以达到各种目的,尤其对于像我一样的Android逆向新手来说,这是非常致命的。为什么非常致命?因为使用了该神器后,1个小时就找到了关键代码,弄清楚执行逻辑,1天之内就实现了程序,解决了外行人看来难度很高的问题。由此带来的后果就是自我感觉良好,自己感觉自己很牛逼,蒙蔽了自己的双眼,终日沉溺在这种骄傲的状态中,从而不能继续虚心刻苦学习技术知识,久而久之,在技术水平上落后别人一大截,对自身发展造成严重影响!”详细的请看大神的帖子,在本文的最后我会附上winding大神实际操作这个神器的视频教程。

说了这么多,打字和截图也累了,同时也辛苦各位看官不厌其烦的看到这里,是时候为大家送上福利了,这个福利就是一个已经将本帖中提到的所有东东整合到一起的AndroidKiller_v1.3.1.整合版,除去部分帖子中需要积分下载的附件没有下载外,凡是有免费下载通道的附件插件我都整合到一起了,并且附上相关说明,而需要CB下载的为了保护原作者的权益,就麻烦大家自行到相关帖子下载补充,我连帖子的传送门都为你准备好了,你还想我怎样嘛!好了,到这里本次的分享就要接近尾声了。

我是昨夜星辰,你的评分和热心是我继续发帖的动力,请不要吝惜,多多支持,多多收藏+评分,每人每天有3次免费评分的机会,不用就浪费了! 看帖5分钟,发帖2小时啊,这次这个帖我弄了2天,说多了都是泪啊,各位,免费的评分刷起来,下次再会。

【原创】果宝三国V5.9内购PJ教程(3.18更新盗版PJ教程) /thread-708030-1-1.html

【原创】城市飞车V6.9内购PJ教程 /thread-710786-1-1.html

【原创】雷电沙龙曼蛇V1.81内购PJ教程 /thread-715859-1-1.html

【原创】4399游戏-密室逃脱24末日危机V24.18.12PJ教程 /thread-718965-1-1.html

【原创】赛尔号之勇者无敌2PJ教程 /thread-723725-1-1.html

二、apktool

apktool 是谷歌提供的 apk 编译工具,可以 反编译 和 回编译。APK 其实就是一个压缩包,完全可以把.apk修改为.zip。通过这种方式来获取资源文件,但是 xml 会乱码。如果你使用 apktool 来进行反编译 apk 就不会出现这种问题了

官网:https://ibotpeaches.github.io/Apktool/github 地址:/iBotPeaches/Apktool/releases

Dex、Smali、Class、Java、Jar 之间的相互转换

安装 apktool

注意:包装脚本Wrapper scripts不是必须的,但是很有用,可以让你不必一遍又一遍键入命令 java -jar apktool.jar

Windows:

下载 Windows 包装脚本( wrapper script:/iBotPeaches/Apktool/master/scripts/windows/apktool.bat)(右键单击,将链接另存为apktool.bat)下载 apktool (/iBotPeaches/apktool/downloads/ )将下载的 jar 重命名为 apktool.jar将 apktool.jar、apktool.bat 移到 C://Windows如果您无权访问 ,则可以将这两个文件放在任何位置,然后将该目录添加到环境变量系统 PATH 变量中。命令行执行命令:apktool

操作目标 apk 安装包:apktool d target.apk

执行完毕,会生成一个和目标apk文件名相同的文件夹,里面就是我们反编译出来的文件

Linux:

Download Linuxwrapper script(Right click, Save Link Asapktool)Download apktool-2 (find newest here)Rename downloaded jar toapktool.jarMove both files (&) to(root needed)apktool.jarapktool/usr/local/binMake sure both files are executable (chmod +x)Try runningvia cliapktool

macOS:

Or you can install apktool viaHomebrew:

Download Macwrapper script(Right click, Save Link Asapktool)Download apktool-2 (find newest here)Rename downloaded jar toapktool.jarMove both files (&) to(root needed)apktool.jarapktool/usr/local/binMake sure both files are executable (chmod +x)Try runningvia cliapktoolInstall Homebrew as describedin this pageExecute commandin terminal (no root needed). The latest version will be installed inand linked to.brew install apktool/usr/local/Cellar/apktool/[version]//usr/local/bin/apktoolTry runningvia cliapktool

手动 build 源码生成 apktool

apktool 的官网上详细介绍了如何build源码生成 apktool:Apktool - Build Guide:https://ibotpeaches.github.io/Apktool/build/

Apktool 参数详解

官网文档:Apktool - Documentation

d 参数:apk 的反编译b 参数重新打包成 apk

1、反编译 apk ( d 参数)

反编译命令:apktool d com.xxx.apk

decoded是等效。

apktooldbar.apk -o baz

apktooldecodebar.apk -o baz

执行过程中会输出主要步骤 log,反编译结束后,反编译的内容均在目录下的 相应文件夹下 -- 文件夹名字与 apk 同名。

可以使用 -o 来指定反编译的输出目录,如上命令为 反编译 bar.apk 到 baz 目录,也可以使用绝对路径,输出到任意目录。

反编译 apk 成 dex 文件:java -jar apktool_2.3.4.jar -s d crackme02.apk

2、重新打包成apk ( b 参数 )

修改后需要重新打包成 apk 的命令:apktool b 项目目录

项目目录就是上一步反编译后生成的目录。buildb是等效。

apktool b bar -o new_bar.apk

apktool build bar -o new_bar.apk

可以使用 -o 来指定重新打包的输出目录,如上命令为 重新编译bar目录下的结构到 new_bar.apk,也可以使用绝对路径,输出到任意目录。

重新打包工程中,同样会输出主要步骤的 log。重新生成的 apk 位于目录中的 dist 目录下

注意:重新生成的 apk,是没有经过签名的,不能直接进行安装。需要重新签名

打包完成后会发现指定的目录下出现了打包好的 apk 文件。但是这个apk没有签名,需要重新签名之后,才能安装。

签名

首先需要生成 keystore 文件

命令:keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore

keytool 是 jdk 自带工具,如果 Java 环境变量配置了的可以直接使用,如果没配置的可以在Java/bin下面找到。

将图中生成的 adc.keystore 和 apktool 文件放在一起会比较方便。

进行签名,命令:jarsigner -verbose -keystore abc.keystore -signedjar nopassword_signed.apk nopassword.apk abc.keystore

执行之后会发现,在当前目录下生成一个 xxx_signed.apk,代表apk已经签名了,就可以正常使用了。安装 签名后的 apk。

3、iforinstall-framework 安装 framework

(1)apktool if framework-res.apk

安装framework-res.apk 到默认目录,默认目录如下:

unix -$HOME/.local/share/apktool

windows -%UserProfile%\AppData\Local\apktool

mac -$HOME/Library/apktool

(2)apktool if com.htc.resources.apk -t htc

安装framework-res.apk 到默认目录,并添加 tag 标记,最终可能生成 2-htc.apk,前序的数字,由所安装的 framework 的 pkgId 决定。个人理解 pkgId 是所安装的 framework 的apk中的Manifest中的package字段值。

(3)apktool if framework-res.apk -t baz -p foo/bar

安装framework-res.apk 到 -p 指定的目录,并添加tag标记,最终可能在 foo/bar 目录下生成 2-htc.apk

安装framework的作用,是让apktool能够识别一些厂商自定义的属性或resource,否则将反编译失败。

每一个版本的 apktool 都会自带有最新 AOSP 的 framework,能支持绝大多数的 apk 反编译。当需要特殊的 framework 时,如何寻找相应的 framework,请参阅 apktool 文档中的内容,此处不再详述。如何找到 framework

(4)注意:你需要自己确保默认的framework是最新的

apktool 会将自带的 framework 拷贝到默认路径下,各平台默认路径,请参考上文。

但是,当你升级apktool之后,最好是去掉默认路径下的 framework,让apktool自动安装最新的(自带的)framework。

同时,当默认路径不可用(通常是无权限)时,apktool会使用 /tmp 目录,但是此目录通常都不稳当,你可以使用--frame-path(也就是上文提到的 -p ) 指定一个其他的稳定的目录。

从2.2.1版本开始,apktool加入了相应的命令,可以完成此操作。

apktool empty-framework-dir 命令 会清除framework目录下的所有已安装的framework

(5)apktool不会判断framework是否重复安装了,你可以任意安装

4、使用指定的framework进行反编译

当你安装了不同的 framework,并且其中一些 framework 可能是互不兼容的,那么你在反编译的时候需要指定使用相应的 framework。

使用指定的framework进行反编译,注意查看log中的区别。

同时需要说明的是,当你使用了指定的framework进行反编译后,想要重新打包apk时,不需要再进行framework的指定了,apktool会自动使用反编译时使用的framework进行重新打包。

5、关于.9图的问题

谷歌官方文档上有.9图的说明,但是说漏了一些东西。

.9图有两种存在形式,一种是"源码"形式,一种是经过编译处理的形式。

"源码"形式很容易得到,我们平时写apk所用的到就是这种形式,网上也能方便的找到。而apk中的.9图,是经过编译处理后的图。

"源码"形式的.9图,带有透明的边框,而编译后的.9图,不再存在这种透明边框,编译后的图存在一种叫做npTc 数据块的结构中。你不能方便的查看和修改它,但是Android系统可以更快的读取和使用它。

以上的情况就会导致,apktool不能直接去修改.9图,而需要依赖谷歌官方的工具 -- aapt进行处理。

Android .9图(点9图) 的制作,以及遇到的问题:/p/d3b2c37d1674

6、Options

常用的配置

(1)-version, --version输出当前工具版本(2)-v, --verbose输出所有log,此参数必须放在第一位(3)-q, --quiet静默模式,与-v, --verbose 相反,此参数必须放在第一位(4)-advance, --advanced进行每一步操作前,打印相应log。默认开启。

清空 framework 的配置

(1)-f, --force强制清除目标目录(2)-p, --frame-path <DIR>指定加载framework的目录

反编译的配置

(1)-api, --api-level <API>指定生成smali文件所用的api等级,默认使用targetSdkVersion版本(2)-b, --no-debug-info防止baksmali写出调试信息(.local,.param,.line等)。如果您要比较来自不同版本的同一APK的smali,则首选使用。(3)-f, --force如果反编译的目标目录存在,将会被强制清空(4)--force-manifest强制反编译 AndroidManifest.xml文件,优先级高于-s, --no-src 配置。(5)--keep-broken-res如果出现"Invalid Config Flags Detected. Dropping Resources..." 错误,这表示apk中有apktool不能识别的结构。可能是apktool不支持的更新的api版本,亦或者是该apk为不规则的apk。你可以添加此配置,以跳过错误,但后续你需要手动修复这些错误。(6)-m, --match-original将各文件处理为最接近原生的形式,将会导致不能备重新打包。(Ps:我试了下,格式确实更接近原生,但是我重新打包也是成功了(打包成功,但并未签名安装)。)(7)--no-assets不处理和拷贝属于unknown 的资源文件。(8)-o, --output <DIR>指定输出目录(9)--only-main-classes只反编译apk根目录下的dex文件,如:classes[0-9].dex 通过阅读源码发现,此配置的作用为:反编译根目录下的以classes 开头,并以 .dex 结尾的dex文件,不仅限于0-9(10)-p, --frame-path <DIR>指定存储和加载framework的目录(11)-r, --no-res不反编译资源,保留resources.arsc 为原来的样子,如果你只是需要修改代码,此配置会加快反编译和重新打包的速度。(12)-s, --no-src不反编译代码,即不处理 dex文件。如果你只是需要修改资源,此配置会加快反编译和重新打包的速度。(13)-t, --frame-tag <TAG>使用指定的framework进行反编译,前文有述。

重新打包配置

(1)-a, --aapt <FILE>指定使用的aapt,当指定目录未找到aapt时,会使用apktool自带的aapt进行处理。(2)-api, --api-level <API>指定处理smali文件的api版本,默认使用minSdkVersion版本(3)-c, --copy-original拷贝原始 AndroidManifest.xmlandMETA-INF 到apk包体中。将会在2.5.0版本移除此功能。(4)-d, --debug在 AndroidManifest 加入debuggable="true" 配置。此配置,不会覆盖已经存在的debuggable配置。(5)-f, --force-all当生成的文件存在时,进行强制覆盖(6)-nc,--no-crunch禁止对资源文件的处理

此配置会传递给 aapt,参阅:

Expose the aapt --no-crunch option by Novex · Pull Request #1849 · iBotPeaches/Apktool · GitHub:Expose the aapt --no-crunch option by Novex · Pull Request #1849 · iBotPeaches/Apktool · GitHub

aapt build in apktool is not support new options · Issue #1232 · iBotPeaches/Apktool · GitHub:aapt build in apktool is not support new options · Issue #1232 · iBotPeaches/Apktool · GitHub

(7)-o, --output <FILE>指定apk的输出目录(8)-p, --frame-path <DIR>指定加载framework的路径(9)--use-aapt2使用aapt2进行打包

三、dex2jar 和 JD-GUI 工具

dex2jar 和 JD-GUI 工具:/p/433259910

Apktool:通过该工具能完整的从 apk 中提取出 resource、dex、manifest、xml 等文件,也可以修改资源文件之后 rebuild 一个 apk。dex2jar:通过该工具将 dex 文件变成一个(包含class 文件的)jar 文件。JD-GUI:通过该工具,可以通过可视化的界面操作查看第二步生成的 jar 文件,即查看反编译后的源码情况。

以上简单介绍了三个工具的主要功能,每个工具的具体操作如下:

步骤一:使用 apktool 反编译 apk,获取资源文件步骤二:解压 apk,然后使用 dex2jar将 dex 转为 jar 文件。步骤三:使用 JD-GUI 查看 class 源码

如果仅仅需要查看源码文件,而对 apk 的资源文件不感兴趣,可以跳过步骤一。

1、dex2jar 工具主要是将 dex 文件转换为包含 class 文件的 jar 文件。

2、JD-GUI 工具是针对从dex 转为jar后的文件,进行可视化读取与展示。

3、apk 安装包是一个 zip 压缩包,如果仅仅是想获取源码文件,并不关心具体资源文件,可跳过第一步 apktool 工具的操作,直接到第二步进行 dex 到 jar 文件的转换。

dex2jar 工具将dex文件转换成jar包

dex2jar 工具 GitHub 链接:/pxb1988/dex2jar

直接获取 Release 的最新版本(我操作时最新版本是 V2.1 版本)

跳转到 Releases 页面 Assets 目录,直接下载可执行文件的压缩文件。

解压后,命令行进入到该 dex-tools-2.1 路径下进行 dex 操作。

目标 dex 文件 的 操作

apk 安装包本质是经过特殊处理的压缩包,可以直接将 target.apk 修改后缀名为 target.zip,然后通过解压工具解压,解压后的文件夹包含各种资源文件和文件夹,以及 dex 文件,如果apk是多个 dex 文件组成,解压后会有多个dex 存在,可逐个操作。

需要注意的是,直接通过 zip 解压出来的文件,资源文件(比如 manifest 等文件)都是一些二进制码,无法直接查看,如果想要查看,可以使用 apktool 反编译后进行查看

执行脚本,操作 dex 文件转换为 jar 文件:sh d2j-dex2jar.sh classes.dex

JD-GUI 工具 查看 jar 文件

JD-GUI官网链接:http://java-decompiler.github.io/

下载对应对应系统的工具。

下载完成后解压,直接打开JD-GUI 文件工具

直接将之前通过 dex2jar 生成的 jar文件拖入 JD-GUI 即可查看源码

通过工具可以查看到源码是否有混淆。

可以通过 Save Source 或 SaveAll Source,将源码进行保存。

四、jadx 反编译工具

apktool 是基于命令行的反编译工具Androidkiller 是基于 apktool 的图形化反编译工具jadx 是另外一个 图形化的反编译工具

Android 反编译利器,jadx 的高级技巧:/p/e5b021df2170

下载 和 使用

在 GitHub上直接下载:/skylot/jadx

使用 jadx 直接打开一个 apk文件,就可以查看反编译的源码:

java 文件,资源文件(包括图片、layout、so文件)都反编译出来了。

注意:

1、反编译出来的 java 代码只能帮分析代码,一般都是没法直接编译通过的。2、不要指望反编译出的完整目录结构能一模一样导出来。因为反编译的目的就是分析代码,不是运行代码。3、商用APP都是经过加密的,反编译出来的代码肯定是混淆的,这个apk没有加密,所以反编译出来看着很漂亮。

五、jeb

官网:/

可以看到,jeb 分 3个版本

jeb demo ( jeb 演示版 ) 包含 JEB Pro 的大部分功能,附带完整版中提供的所有模块(反编译器、文件分析器、调试器等)。

局限性:

反编译仅限于代码的子集

保存或加载项目已禁用

不允许使用剪贴板

限时会议

需要互联网连接jeb CE ( jeb 社区版)jeb pro ( jeb 专业版 )。包括 安卓反编译器 + 安卓调试器 等,可以动态调试 smali 代码。

jeb 工具的使用

:/freeking101/article/details/105910877

调试逆向分为动态分析技术静态分析技术

静态分析技术:是指逆向者利用反汇编工具将二进制的可执行文件翻译成汇编代码,通过对代码的分析来逆向软件; 动态调试:则是指逆向者利用调试器跟踪软件的运行,寻求逆向的途径。

动态调试有两种方法:

方法 1:Jeb 调试

方法 2:AndroidStudio + smalidea 插件动态调试。

jeb 主要用到的功能:Smali、Java 代码分析(可以从smali跳到相应的Java代码中)字符串查看重命名(可以对一些混淆字段进行重命名)注释

jeb 动态调试 smali

:/thread-49414-1-1.html

动态调试 smali 代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。