混淆的Android应用渗透测试(广州中软)

自动工具

在手工开始工作之前,有几个反编译工具和网站可以在很多混淆场景提供帮助。APK Deguard是其中之一。它最大只支持16Mb的APK文件,为了确保不会超过限制有很多资源文件时候就需要删了。这个工具可以识别库文件,所以有时候可以完美地得到重构方法和类名。不过,它也是有很多bug的:时候它生成4个字节大小的类(null)。

使用XPosed框架

XPosed框架  

在某些情况下,使用XPosed框架可能更好,可以记录下任何方法,或者替换存在的方法。不过有个比较麻烦的就是每次更新模块都需要重启(或者软重启)。

另外,例如JustTrustMe,可以和很多应用一起使用,用来绕过SSL pinning。但它不是对所有应用起作用。也有人打了补丁可以用了。RootCloak,也可以在很多应用隐藏root信息,但这个模块已经有些时间没更新了。

Frida

Frida是一个有趣的工具。已经有一些基于Frida的有趣的脚本,例如:appmon。

Frida和XPosed都有一个不好的地方:函数内部执行跟踪,例如我们无法在一个方法中打印一个确定的值。   

解包和重打包

检查应用是否检查它自己的签名。使用一个锁定bootloader、没有root的真实设备(不是模拟器)。

查找原始字符串

可以用:grep -r const-string smali/来提取所有代码里的所有字符串。

插入日志代码

可以调试一个小项目:反编译字符串和跟踪执行。

在smali文件夹下增加用于调试的smali文件。

手工插入日志代码:

invoke-static {v1}, LLogger;->printObject(LV

要打印的寄存器替换v1。

大多数时候,反编译函数在所有地方都有相同的参数和返回值,在这个情况下,签名是:

.method private X(III)Ljava/lang/String;

可以写一个脚本:

1.查找反编译函数

2.插入一个调用来记录字符串

打印反编译函数中的结果字符串是容易的,但有一个问题:这字符串是从哪来的(哪一行,哪个文件)?

可以像这样插入更详细的日志代码:

const-string v1, "Line 1 file http.java"

invoke-static {v1}, LMyLogger;->logString(LV

但这需要有未使用的寄存器来存字符串(需要追踪现在哪个寄存器是未使用的),或增加本地寄存器数量然后使用最后一个寄存器(在函数已经使用了所有寄存器时不起作用)。软件测试哪家好

你可能感兴趣的:(混淆的Android应用渗透测试(广州中软))