在 android 上跟踪系统调用,包括堆栈(如果可能,还有 java 堆栈)?

逆向工程 安卓 爪哇 调用栈 系统调用 达尔维克
2021-07-03 11:24:57

我有一个 android 应用程序,它读取/写入一个似乎已加密的数据文件,我想制作一个工具来读取/写入该文件,所以我需要反转加密。

有问题的应用程序由几百个类和几个 .so 库组成,并且通过这些类和strings.so 文件的输出找不到游戏文件的名称(我尝试区分大小写,省略扩展名,以及所有这些东西),所以找到函数的“简单”方法不起作用。所以,我想要做的是拦截对open系统调用的调用,并检查调用者的堆栈(dalvik 和 C)。

在 Windows 上,这很容易使用procmon,它保存了每个系统调用的堆栈;在 Linux 上,strace -i它没有给我一个堆栈回溯,但至少有一个 IP 值;此外,我可以制作一个具有相关文件名的命名管道,以使应用程序阻止打开它并附加 gdb 以获取回溯。

strace在 android 上使用和/或调试器的问题是 ia) 获得strace适用于特定操作系统级别的 android的版本似乎并非易事,b) 当我尝试命名管道方法时,应用程序刚刚退出, c) 除非整个加密工作是在其中一个.so库中完成的,否则我还需要 Java 堆栈。

我发现jtrace似乎是 的替代品strace,但没有显示堆栈,并且这个问题有一些链接,但它们似乎是针对检测/分析,而不是我需要的。

所以问题确实在标题中:是否有一个工具可以跟踪 android 上的系统调用,并显示堆栈跟踪,就像procmon在 windows 上一样,如果可能,包括 java 堆栈?或者另一个想法来快速找到打开和解密文件的代码?

如果所有其他方法都失败了,我可能会将 IDA 附加到进程中,在 上放置一个断点open,然后编写一个检查文件名的断点条件。但这仍然不会给我 Java 堆栈,如果有“更好”的工具,我想避免这种努力。

2个回答

JavaJournal构建在pyspresso框架之上,专为跟踪 Java 中的方法调用而设计。

您也可以使用 strace 获取系统调用堆栈。你只需要用libunwind编译 strace 之后,您只需要使用 -k 来获取每个系统调用的系统调用堆栈。