安卓逆向_2 --- Androidkiller,apktool、dex2jar、jd-gui、jadx、jeb、gda

From:https://www.52pojie.cn/thread-726176-1-1.html

AndroidKiller 与 Android Studio  的使用 ( 反编译后通过 android studio 动态调试 smali ):
https://blog.csdn.net/a_1054280044/article/details/60465267

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

反编译工具

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

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

AndroidKiller安装、设置及使用教程:https://www.52pojie.cn/thread-726176-1-1.html

链接: https://pan.baidu.com/s/134pGb1Mc4Yhpv54fozb73A
提取码: q6m2
解压密码:www.52pojie.cn

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

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

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

color 3f

:MENU
CLS
@ ECHO.
@ ECHO =================================================
@ ECHO.
@ ECHO            出处:    https://www.52pojie.cn
@ 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

以上为批处理的代码。

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

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

一、基础篇:

Androidkiller 的使用

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

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

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

1. 安装 JDK

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

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

下载和安装的过程这里就略过了,毕竟都是一直下一步这样的操作,没技术含量,来吾爱的都懂的操作。安装和配置 Java JDK 和 JRE:https://blog.csdn.net/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:解决编译源码卡死[2018.3 更新链接] 作者 @你坏  https://www.52pojie.cn/thread-658341-1-1.html   (我提供的整合版中已经替换了文件)更新一下 rtl230.bpl 这个文件,替换 AndroidKiller 目录中的 rtl230.bpl 就可以了。
  • 最后,我们按照帖子:androidkiller 反编 java 卡死的一种简便处理方法(继续与坛友的讨论)  作者 @winding:https://www.52pojie.cn/thread-689999-1-1.html  再来添加一下 @winding 大神的批处理插件,具体方法参照上方的说明以及大神的主题帖子。(我提供的整合版中已包含)

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

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

下载地址:

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

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

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

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

三、终篇成神篇:

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

AndroidKiller 插件

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

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

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

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

​2020-02-15 安卓应用逆向安全 androidKiller 使用与配置:https://www.jianshu.com/p/a7d9c28337e5

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

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

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

​4、终极神器插件,来自帖子:小白的《宾果消消消》某定制版逆向笔记 作者 @winding
https://www.52pojie.cn/thread-712040-1-1.html    (整合版已包含该附件并附上winding大神亲自录制的操作视频)

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

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

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

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

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

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

【原创】城市飞车V6.9内购PJ教程   https://www.52pojie.cn/thread-710786-1-1.html

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

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

【原创】赛 尔号之勇者无敌2PJ教程   https://www.52pojie.cn/thread-723725-1-1.html

二、apktool

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

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

工具 作用
javac java ------> class
ddx class ------> dex
baksmali dex ------> smali
smali smali ------> dex
dex2jar dex ------> jar ( class的压缩包 )
apktool apk ------> smali

安装 apktool

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

Windows:

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

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

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

Linux:

  1. Download Linux wrapper script (Right click, Save Link As apktool)
  2. Download apktool-2 (find newest here)
  3. Rename downloaded jar to apktool.jar
  4. Move both files ( & ) to (root needed)apktool.jarapktool/usr/local/bin
  5. Make sure both files are executable (chmod +x)
  6. Try running via cliapktool

macOS:

Or you can install apktool via Homebrew:

  1. Download Mac wrapper script (Right click, Save Link As apktool)
  2. Download apktool-2 (find newest here)
  3. Rename downloaded jar to apktool.jar
  4. Move both files ( & ) to (root needed)apktool.jarapktool/usr/local/bin
  5. Make sure both files are executable (chmod +x)
  6. Try running via cliapktool
  7. Install Homebrew as described in this page
  8. Execute command in terminal (no root needed). The latest version will be installed in and linked to .brew install apktool/usr/local/Cellar/apktool/[version]//usr/local/bin/apktool
  9. Try running via 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

decode 和 d  是等效。

apktool d bar.apk -o baz
apktool decode bar.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 项目目录

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

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、if or install-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图) 的制作,以及遇到的问题:https://www.jianshu.com/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.xml and META-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 工具:https://zhuanlan.zhihu.com/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 链接:https://github.com/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 的高级技巧:https://www.jianshu.com/p/e5b021df2170

下载 和 使用

在 GitHub上直接下载:https://github.com/skylot/jadx

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

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

注意:

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

五、jeb

官网:https://www.pnfsoftware.com/

可以看到,jeb 分 3个版本

  • jeb demo ( jeb 演示版 ) 包含 JEB Pro 的大部分功能,附带完整版中提供的所有模块(反编译器、文件分析器、调试器等)。
    局限性:
            反编译仅限于代码的子集
            保存或加载项目已禁用
            不允许使用剪贴板
            限时会议
            需要互联网连接
  • jeb CE ( jeb 社区版 )
  • jeb pro ( jeb 专业版 )。包括 安卓反编译器 + 安卓调试器 等,可以动态调试 smali 代码。

jeb 工具的使用

https://blog.csdn.net/freeking101/article/details/105910877

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

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

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

jeb 动态调试 smali

https://www.52hb.com/thread-49414-1-1.html

动态调试 smali 代码

六、gda

gda:https://github.com/charles2gan/GDA-android-reversing-Tool

官网:http://www.gda.wiki:9090/index.php

GDA:中国第一款现代交互式反编译器:https://zhuanlan.zhihu.com/p/28354064

GDA是一款完全基于C++开发的新型反编译工具,因此该工具并不仅依赖于Java平台。该工具使用起来非常方便,而且运行速度非常快,支持APK、DEX、OBED和oat等文件格式。

实际上,GDA是一款新型的Dalvik字节码反编译工具。该工具是完全独立的,并且运行非常稳定,并且能够在没有安装Java VM的环境下运行。GDA的大小只有2MB,我们可以直接在任何新安装的Windows操作系统或虚拟机系统中使用该工具,无需进行额外配置。此外,GDA还有以下更加出色的功能:

免费版、专业版 区别

jdax、jeb、gda 对比

与世界上最顶级反编译器的反编译能力对比图如下:

轻松上手

https://zhuanlan.zhihu.com/p/28354064

概要分析

1.首先,可以直接将样本拖入GDA,非常快的我们能够看到分析主界面。我们根据主界面判断其是否有加固,如果有加固主界面会显示,如果没有显示代表没有加固。

2.然后可以通过 BaseInfo 来了解该样本的一些基本情况,如检查看看该病毒开启了扫描敏感权限,

3.我们通过如下红色标记的工具栏看到该APK的签名信息。

 4.接下来可以通过树形框中AndroidManifest来分析该所使用的Activity, Service,receive等信息。

5.接下来还可以通过树形框中的MalScan来了解该app大致的行为。

#HTTP网络连接: 
#获取设备中已安装APP: 
#文件遍历: 
#发送HTTP请求: 
#删除短信、联系人: 
#权限检测: 
#加载外部APK/DEX执行,可能存在恶意代码捆绑: 
#电话监听: 
#开启蓝牙: 
#文件读取: 
#文件写操作: 
#开启视频录制: 
#获取SIM序列号: 
#获取蜂窝位置信息: 
#文件删除: 
#读取联系人、短信等信息: 
#获取地址位置: 
#命令执行: 
#开启录音功能: 
#搜集用户手机IMEI码、电话号码、系统版本号等信息:  

可以看出该app具有很多恶意的操作。行为描述下面的是产生该种类型的恶意行为的实现方法。双击method@可以进入该方法中查看,比如点击进入第二” #读取联系人、短信等信息:”的[method@0001e5]: com.itcast.cn112.a.a

如果对反编译结果有疑问,可以按 F5 查看 smali 代码。如图

6.此外概要分析时,还可以通过查看该APK所使用的字符串和API来做分析。

  • 其中 AllStrings 会获取该APK所有的字符串,
  • 而 AppStrings 只会获取APK有效类会用到的字符串,相对来说AppStrings是更有用的字符串。

其中 string@ 区域同样支持交叉引用(X),编辑(右键菜单),双击操作。

AllAPI的method@区域支持交叉引用的功能

JAVA伪代码分析

主要从APK的执行逻辑和执行流程上对APK进行全面的分析,以下简单介绍GDA的基本使用那么方法。

1.从入口点分析,点击entry按钮进入APK的执行入口函数,MainActivity的onCreate函数是该APK第一个执行函数。。

如果代码内容太多,我们需要做页内代码搜索,这种情况下,可以按CTR+F启动页内搜索

为了高效的分析整个APK,我们需要对识别出来的方法或者类进行识别,GDA可以修改方法名称和做注释。

双击a.d()进入该方法,可以看出该方法只是一个做日志的方法,所以我们修改函数名称为log

通过同样的方法,把所有可以识别的方法进行修改。

有时需要进一步描述,因此可以使用注释功能(C)。 

很多时候需要看当前方法的调用者,这时可以通过交叉引用来查看。

有时候也需要知道当前字符串在什么地方被使用了,可以把鼠标放在字符串双引号之间,按X查看引用的方法。

高级分析

1、隐私泄露检测

GDA的隐私泄露检测引擎是基于GDA反编译器的低级中间表示做寄存器追踪来实现的,其检测内核以轻量级高速污点传播引擎FlashFlow为基础, 通过扫描APP中的所有可能的敏感数据生成点(DataPin)做污点传播分析来确定泄露点。同时记录有效泄露点与敏感数据生成点之间的路径, 以方便做路劲回溯,并且输出隐私泄露报告。使用方法

2、漏洞扫描

GDA漏洞扫描引擎由漏洞检测引擎和规则解释引擎构成:漏洞检测引擎采用两级HASH TABLE来存储method,以实现method的快速定位, 同时结合GDA独有高速反编译内核、HIRA(高级中间表示分析器)、API链检测器等底层分析模块构建而成的一个高效漏洞检测引擎。 规则解释引擎采用基于堆栈状态机的规则判定法,同时采用了一种以动态执行的方式进行规则解释(动态规则解释器)。 其中规则表达式通过词法分析器和语法分析器将规则表达式存入堆栈,规则解释器是基于堆栈做规则表达式的解释执行。 这里之所以是动态的,体现在两个方面:1、词法分析器和语法分析器从左到右扫描规则,一旦检查出一条完整表达式后或者检测到算符优先级下降时, 就会调用解释器做堆栈执行,这里不会将整条规则解析到堆栈后再调用解释器执行;2、动态解释执行后的结果是一种布尔状态的值(结果中常常还会携带有更复杂的参数), 同样GDA的规则解释引擎也不会等到所有表达式执行完后再做规则判定,而是采用效率更高的动态判定方法。使用方法

3、GDA-路径求解

程序路径求解问题的应用方向, 漏洞挖掘:当我们确定程序的攻击面后,需要知道攻击面上的点是否与脆弱函数存在一条可以联通的路径。 隐私泄露:对于程序中的任意敏感数据获取函数,需要知道这些数据是否被泄露出去。 恶意代码分析:对于恶意代码中的敏感函数,需要确定这些敏感函数是否被触发。 其他:闭源代码审计,程序半自动化分析等。 使用方法

4、GDA-APK取证

当我们在做android APK取证分析或者恶意代码分析时,会想知道一个APK中各个文件的原始时间以确定该代码项目的最早产生时间, 最后一次签名的时间等等信息,以及对apk内的所有文件进行全局检索,收集相关线索和证据:如IP地址,域名,URL,DB文件名,apikey等等信息。 于是便在GDA反编译器中加入该工具,以应对一些特殊的使用场景。使用方法

5、GDA脚本批量解密APP字符串向导

一些APK尤其是Android恶意代码会将自身的一些重要的字符串进行加密,加大逆向分析的 难度,这类字符串往往数量比较大,很难一个一个进行处理。本文将介绍一种方法来解密这 种字符串,并将解密的字符串应用于反编译器中。使用方法

6、GDA数据流追踪分析

FlashFlow采用上下文无关的数据流分析算法,可实现任意位置任意变量或寄存器的追踪, 并且无需对环境进行初始化,无需做任何配置。这样使得FlashFlow可以GDA反编译器进行 很好的结合,成为一个极为简单易用的辅助功能。该功能可对单个变量和寄存器进行分析 (隐私扫描功能目前仅用于测试,没有开放在GDA反编译器中),目前支持smali代码下的任 意寄存器的值数据流分析,以及java代码中对一个method的参数和返回值进行数据流分析。使用方法

7、GDA python脚本自动化分析

为了能够更加灵活的提供分析和信息交互,GDA从3.6版本开始提供了对python脚本的支持。 GDA为分析人员提供了整个APK文件中的类和方法的相关信息,其中分别以列表和字典的方式 来组织类和方法,提高类和方法的访问速度。使用方法

8、二进制XML解码

9、算法工具

实现加密解密功能,支持如下算法:

Hash算法: md2 md4 md5 sha sha1 sha224 sha256 sha384 sha512

对称加密:des idea rc2 rc4 rc4-40 rc2-40 rc2-64 bf cast5 aes(128 192 256)及其相应的模式如ecb cbc ofb cfb,其他模式如(cfb1 cfb8)

非对称加密:RSA

编码算法:base62, base64

10、进程模块dump

具体使用参考知乎

GDA关于android脱壳的问题说明:https://zhuanlan.zhihu.com/p/26341224

11、搜索工具(S)

猜你喜欢

转载自blog.csdn.net/freeking101/article/details/105183001