ARM - 是否可以从外部静态库调用函数?

逆向工程 艾达 手臂 安卓
2021-06-26 22:10:19

基本上,我正在 Android 上调试一个闭源二进制文件,我想在它们之间执行一些代码,这些代码大到无法放入 codecave。那么是否可以用我的代码单独编译库然后从目标二进制文件中调用它?如果是,那么如何?

我的朋友建议我修改二进制头和扩展数据段来注入我的代码。方便吗?

我还有一个建议。我知道该封闭源二进制文件的接口,那么是否可以编写包装二进制文件?例如,假设闭源二进制文件是 libfoo.so。那么是否可以编写一个二进制 libbar.so,它实际加载 libfoo.so 并将函数调用发送到 libfoo.so

我问这个是因为我看到一些warez程序捆绑了一些额外的dll,通常还有一些包装器可执行文件。

2个回答

“包装”绝对是可能的,我通常用于 Android 逆向工程的技术之一是“填充”二进制文件。本质上,您编写了一个小型应用程序,基于 Java/应用程序或基于 C/Native。这样做的一个例子是here;

https://github.com/rednaga/native-shim

这允许您通过稍加修改来调用您想要的任何方法。

如果此库是静态链接的,则在不更改可执行文件的情况下无法更改它。但是,您可以在调试会话期间使用Frida来拦截特定调用、自动执行此任务并运行您自己用(惊喜!)JavaScript 编写的代码。

有关更多详细信息,请参阅此处的简单示例