一款帮助更快、更轻松、更高效地对 Android 应用进行渗透测试的 Java 工具。AndroTickler 提供了信息收集、静态和动态检查等多种功能,涵盖了 Android 应用渗透测试的大部分方面。它还提供了渗透测试人员在测试过程中需要的若干功能。AndroTickler 还与 Frida 集成,提供方法追踪和操纵。它之前以 Tickler 的名称发布。
AndroTickler 需要一台 Linux 主机以及一台通过 USB 连接且已 root 的 Android 设备。该工具不会在 Android 设备上安装任何内容,只会在 /sdcard 上创建一个 Tickler 目录。AndroTickler 依赖 Android SDK 在设备上执行命令,并将应用的数据复制到主机上的 TicklerWorkspace 目录以供进一步分析。TicklerWorkspace 是 AndroTickler 的工作目录,每个应用在 TicklerWorkspace 中都有一个单独的子目录,其中可能包含以下内容(取决于用户操作):
libs 目录和 Tickler.conf 配置文件位于 jar 文件所在的同一目录中。配置文件设置了主机上 TicklerDir 目录的位置以及 Android 设备 /sdcard 上的 Tickler 目录位置。如果配置文件不存在或未设置这两个目录,则将使用默认值(当前目录下的 Tickler_workspace 和 /sdcard/Tickler)。Tickler_lib 目录包含 AndroTickler 使用的一些 Java 库和外部工具,例如 apktool 和 dex2jar。
AndroTickler 高度依赖以下工具,因此在使用前应确保它们存在于您的机器上:
其他工具在某些功能中是必需的,但 AndroTickler 仍能在没有它们的情况下运行:
从代码构建工具
gradle build
将 AndroTickler.jar 移动到与 Tickler_lib 目录和 Tickler.conf 文件相同的目录中(自动创建在 build/libs 中)
将 dex2jar 设置为可执行(libs/notJars//dex2jar-2.1/d2j-dex2jar.sh 和 libs/notJars//dex2jar-2.1/d2j_invoke.sh)
连接您的 Android 设备并安装待测试的应用
注意:如果构建源代码失败,您可以从 releases 标签下载最新的编译版本
当前版本具有以下功能:
java -jar AndroTickler.jar -h
列出设备上已安装的应用:
java -jar AndroTickler.jar -pkgs
在设备上搜索包名包含搜索关键词的应用(包):
java -jar AndroTickler.jar -findPkg <searchKey>
java -jar AndroTickler.jar -pkg <package> [其他选项]
任何带有 -pkg 选项的命令(无论是否与以下任何选项一起使用),如果尚未执行过以下操作,则会执行以下操作:
java -jar AndroTickler.jar -pkg <package> -info
返回以下信息:
java -jar AndroTickler.jar -pkg <package> -squeeze [short | <codeLocation> ]
从应用的反编译 Java 代码中提取以下内容:
毫不意外,其输出通常很大,因此建议将命令输出重定向到文件
short 仅压缩属于开发者的反编译代码。例如,如果应用包名为 com.notEnaf.myapp,则 squeeze short 仅压缩 com/notEnaf 目录中的代码。
仅压缩 codeLocation 目录中的代码。有助于限制搜索范围,或在有源代码可用时压缩源代码。
java -jar AndroTickler.jar -pkg <package> -l [-exp] [-v]
列出应用的所有组件
-exp 仅显示导出的组件
-v 为每个组件提供更详细的信息:
java -jar AndroTickler.jar -pkg <package> -l [-act | -ser | -rec | -prov ] [-exp] [-v]
java -jar AndroTickler.jar -pkg <package> -db [|e|l|d] [nu]
默认情况下,所有 -db 命令在运行检查之前都会更新主机上应用的数据存储目录。
无属性 或 e 测试应用的数据库是否已加密。如果 -db 标志后没有给出选项,这是默认操作。 l 列出应用的所有数据库。加密的数据库可能无法检测到。 d 对任意未加密的数据库进行 sqlite 转储。 nu noUpdate:在不更新主机上应用数据目录的情况下运行上述任一选项。
java -jar AndroTickler.jar -pkg <package> -diff [d|detailed]
复制应用的数据存储目录(到 DataDirOld),然后提示用户执行所需操作并在完成后按 Enter。然后再次复制数据存储目录(到 DataDir),并在两者之间运行 diff 以显示哪些文件被添加、删除或修改。
d|detailed 与普通的 -diff 命令功能相同,同时还显示文本文件和未加密数据库中具体更改的内容。
java -jar AndroTickler.jar -pkg <package> -sc <key> [<customLocation>]
在以下位置搜索 key:
搜索不区分大小写。
将反编译 Java 代码位置替换为自定义位置。
java -jar AndroTickler.jar -pkg <package> -sd <key>
在应用的数据存储目录中搜索给定的 key
通过所有可能的意图组合触发应用的组件。例如,如果一个活动有一个包含 2 个可能操作和 3 个数据 URI 方案的意图过滤器,那么 AndroTickler 将使用该意图的所有可能组合来触发此活动。此外,AndroTickler 会捕获组件对应 Java 类中提到的 intent extras,为其分配虚拟值,并将它们添加到可能的意图组合中。仅支持 boolean、string、int 和 float 类型的 extras。
如果使用了 -exp 选项,则组件将在没有 root 权限或任何特殊权限的情况下触发。如果没有,则组件将以 root 权限触发。这有助于在两种不同的场景下测试应用:针对普通权限攻击者或高权限攻击者。
在触发组件之前,AndroTickler 会打印所有要执行的命令。然后对于每个命令,它会触发组件、打印命令并等待用户。这给用户足够的时间在命令执行后执行任何额外的检查。在用户继续下一个命令之前,可以选择为 PoC 文档截取设备屏幕截图。
java -jar AndroTickler.jar -pkg <package> -t [-all | -exp] [target] [-log]
target 如 list 命令所述,可以是:
如果没有值,则目标为上述所有类型
[-comp] <component_name> 仅指定一个组件。您也可以直接使用 <component_name> 而不使用 -comp 标志。 -exp AndroTickler 使用普通权限仅触发导出的目标。 -all 默认选项。AndroTickler 使用 root 权限触发导出的目标。 -log 捕获触发会话期间生成的所有 logcat 消息。日志文件保存在 logs 子目录中。
Frida 应安装在您的主机上。此外,Android 设备上 Frida 服务器的位置应添加到 Tickler.conf 文件中的 Frida_server_path 条目
java -jar AndroTickler.jar -pkg <package> -frida vals <ClassName> <MethodName> <NumberOfArgs> [-reuse]
显示此方法的参数和返回值(仅限基本数据类型和 String)
reuse 对于 vals 和 set 选项,Frida 会创建/更新该功能的 Frida 脚本。您可以根据需要修改创建的脚本,然后如果您想通过 AndroTickler 运行它,请使用 -reuse 选项,以便脚本不会被覆盖。
java -jar AndroTickler.jar -pkg <package> -frida set <ClassName> <MethodName> <NumberOfArgs> <NumberOfArgToModify> <newValue>[-reuse]
将参数编号 NumberOfArgToModify 设置为 newValue(仅限基本数据类型和 String)。 NumberOfArgToModify 从 0 开始:第一个参数 --> NumberOfArgToModify = 0,...等等 要修改返回值,请将 NumberOfArgToModify 设置为 ret
java -jar AndroTickler.jar -pkg <package> -frida script <scriptPath>
在主机上运行位于 scriptPath 的 Frida JS 脚本
枚举已加载的类:
java -jar AndroTickler.jar -pkg <package> -frida enum
java -jar AndroTickler.jar -pkg <package> -dbg
创建应用的可调试版本,可以安装在设备上并使用任何外部工具进行调试。 AndroTickler 附带了一个用于签名可调试 apk 的密钥库,但需要在主机上安装 jarsigner 工具。
java -jar AndroTickler.jar -pkg <package> -apk <decompiledDirectory>
从目录构建 apk 文件,签名并安装。
java -jar AndroTickler.jar [-pkg <package>] [-bg|--bgSnapshots]
将设备拍摄的后台快照复制到 bgSnapshots 子目录中(可与 -pkg 选项一起使用,也可不一起使用)。
复制数据存储目录:
java -jar AndroTickler.jar -pkg <package> -dataDir [dest]
将数据存储目录复制到 DataDir dest 目标目录的可选名称,该目录将始终位于 transfers 子目录中。
复制任意文件/目录:
java -jar AndroTickler.jar -pkg <package> -cp2host <source_path> [dest]
从 Android 设备复制文件/目录。
如果未提供 dest 选项,则目录名称将为操作的时间戳。
java -jar AndroTickler.jar [-pkg <package>] -screen
对于不需要 -pkg 选项的命令,它们的数据将保存在 Tickler_Dir/NoPackage 中
java -jar AndroTickler.jar -pkg <package> -t -act -exp
触发导出的活动
java -jar AndroTickler.jar -pkg <package> -t -prov -log
查询所有内容提供者并保存 logcat 消息,直到工具停止执行
java -jar AndroTickler.jar -pkg <package> -t <component_name>
触发组件,触发类型取决于组件类型
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 0 "newValue"
挂钩到具有 2 个参数的方法 "myMethod",并将第一个参数(args[0])的值更改为 "newValue"
java -jar AndroTickler.jar -pkg de.not3naf.myApp -frida set de.not3naf.myApp.myActivity myMethod 2 2 false
挂钩到具有 2 个参数的方法 "myMethod",并将返回值更改为布尔值 false