Android 查看So文件是哪个库在使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 查看So文件是哪个库在使用相关的知识,希望对你有一定的参考价值。
参考技术A 最近App在弄Arm64的升级,但是有几个so文件找不到是哪几个组件使用的,也从网上找到了一些文章,试了一下貌似也不可以,就自己想了一些其他办法,App想要编译成功,如果组件是以上传到仓库的方式引用的话,我们想要查找这个so文件就比较麻烦,
整个工程是搜索不到的,但是想要编译成功还必须将这些组件拉倒本地缓存中,也就是说能运行的程序所有关于他的文件是都有的,
我们只需要找到他就好了
这里我借助了SearchEverything 这个软件,搜索了一下丢失64位的so库
很清楚的看到使用的组件叫 jefified-360Camera-1.0.1 的这个组件,剩下的事情就是需要把补全或者升级就好了
android注入so怎么使用
参考技术A dhrurthr64uhtdh 参考技术B Android下so注入是基于ptrace系统调用,因此要想学会android下的so注入,首先需要了解ptrace的用法。ptrace用法可以参考博客:http://blog.sina.com.cn/s/blog_4ac74e9a0100n7w1.html,也可以在ubuntu下输入man ptrace命令,查看具体描述。
android中进程系统调用劫持可参考博客:http://www.kanxue.com/bbs/showthread.php?t=180461,这是一个android简单的ptrace监控远程进程监控调用的例子。
Android系统是基于Linux系统,在linux系统中可以通过ptrace系统调用实现进程注入。ptrace注入过程大致过程如下:
(1)基于shellcode加载
[1]编写shellcode,shellcode是使用汇编语言写一段汇编程序,该程序实现so库的加载、so库函数查找以及执行库中的函数。
[2]通过远程进程pid,ATTACH到远程进程。
[3]获取远程进程寄存器值,并保存,以便注入完成后恢复进程原有状态。
[4]获取远程进程系统调用mmap、dlopen、dlsym调用地址。
[5]调用远程进程mmap分配一段存储空间,并在空间中写入shellcode、so库路径以及函数调用参数。
[6]执行远程进程shellcode代码。
[7]恢复远程进程寄存器。
[8]detach远程进程。
基于shellcode注入可看雪古河大哥写的libInject,网址: http://bbs.pediy.com/showthread.php?t=141355
(2)直接加载
[1]通过远程进程pid,ATTACH到远程进程。
[2]获取远程进程寄存器值,并保存,以便注入完成后恢复进程原有状态。
[3]获取远程进程系统调用mmap、dlopen、dlsym调用地址。
[4]调用远程进程mmap分配一段存储空间,并在空间中写入so库路径以及函数调用参数。
[5]执行远程进程dlopen,加载so库。
[6]执行远程进程dlsym,获取so库中需要执行的函数地址。
[7]执行远程进程中的函数。
[7]恢复远程进程寄存器。
[8]DETACH远程进程。
目前android so注入的版本基本上都是基于古河大哥的libInject修改而来。关于so注入的项目,还可以参考洗大师的一个开源项目,网址:https://code.google.com/p/libandroidinjector/downloads/list。洗大师注入需要修改elf文件。
提供一个方便测试so注入成功与否的小测试库,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <unstd.h>
#include <stdio.h>
#include <android/log.h>
#define LOG_TAG "test"
__attribute__((constructor))
void
inject
()
__android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,"Hello,I
am injected.");
说明:若函数被设定为constructor属性,则该函数会在main()函数执行之前被自动的执行。因此,so注入测试中,只需注入以上代码编译的so库,无需调用注入so的相关函数,即可测试是否注入到远程进程。
以上是关于Android 查看So文件是哪个库在使用的主要内容,如果未能解决你的问题,请参考以下文章