用于记录对 javax 的函数调用的 Android 拦截

逆向工程 反编译 安卓 爪哇
2021-06-12 23:10:33

我正在反转一个使用本机库.so通过反射调用某些 Java 方法的 apk

我通过分析存在以下调用的应用程序知道:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
//This metods are called from native c++ 
//via reflection
Mac mac= Mac.getInstance(method);
//Log this methods parameters
SecretKeySpec key=new SecretKeySpec(byte[],string);
mac.init(key);
ret=m.doFinal();//log the return

应用程序可在清单中调试

我如何记录此方法的参数?

1个回答

有几种方法可以做到这一点。

Rooted android:
使用 Xposed 和 Inspeckage 或您自己的模块来记录对这些方法的调用。

对于非 root 的 android,它有点复杂,但不应该是太大的问题。
反编译 APK 并添加与您打算记录的函数具有相同签名的 smali 类。
在您创建的函数中。
例如,如果您希望挂钩 Log.e 方法,那么您的 smali 文件将如下所示:

.class public LmyLog;
.super Ljava/lang/Object;

.method public e(Ljava/lang/String;Ljava/lang/String;)I
    .locals 1
    # log whatever params you need 
    invoke-static {p0, p1}, LsomeClassForLoggin;->log(Ljava/lang/String;Ljava/lang/String;)V

    invoke-static {p0,p1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I

    move-result v0

    return v0
.end method 

现在,仅此是不够的,因为您的方法不会从 .so 中调用。
因此,下一步是找到您要挂钩和记录的方法的类名,并在十六进制编辑器中对其进行编辑。
所以在这个例子中,我们将寻找 Landroid/util/Log;我们将用 LmyLog 替换它;
这应该将调用从 smali 重定向到您自己的代码。