我有一个可读取/写入似乎已加密的数据文件的android应用,并且我想制作一个工具来读取/写入该文件,因此我需要取消加密。所涉及的问题由几百个类和几个.so库组成,并通过这些类和.so文件上的strings的输出grepping找不到游戏文件的名称(我尝试区分大小写,省略了扩展名,以及所有其他内容),因此无法轻松找到该函数。因此,我想做的是拦截对open系统调用的调用,并检查堆栈(dalvik和C)是否存在调用方。每个系统调用;在Linux上,有procmon不会给我堆栈回溯,但至少可以提供IP值;另外,我可以制作一个具有问题文件名的命名管道,以使应用程序在打开它时阻塞并附加gdb以获取回溯。 ia)获得适用于特定OS级别的android的strace -i版本似乎很重要,b)当我尝试使用命名管道方法时,应用程序将退出,c)除非完成了所有加密工作其中一个strace库,我也需要Java堆栈。定位于检测/分析,而不是我所需要的。在Windows上,如果可能的话,包括Java堆栈?还是另一个快速找到打开并解密文件的代码的想法?

如果所有其他方法均失败,则可能会将IDA附加到进程中,在strace上放置一个断点,并编写一个断点条件来检查文件名。但这仍然不会给我Java堆栈,如果有一个“更精细”的工具,我想避免这样做。

评论

您是否尝试过简单地chmod 000 / location / to / datafile并使用logcat Monitor来查看apk生成的错误消息?

@Sigtran:我喜欢这个主意。不幸的是,该日志确实包含一个错误消息条目,但没有堆栈回溯。

您也许可以从github.com/CalebFenton/simplify上获得一些收获,或者至少可以通过修改smalivm来做到这一点

我将在下个月发布一个开源工具来完全满足您的需求:https://recon.cx

Guntram Blohm。您找到适合您问题的解决方案了吗?我现在正在解决同样的问题。

#1 楼

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

#2 楼

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