美文网首页
Android进程注入|实战

Android进程注入|实战

作者: M4K0 | 来源:发表于2018-10-23 01:27 被阅读88次

Android进程注入,又名so注入。对于一些防护不严的应用,可以加载自定义的so文件,执行恶意代码。本文采用第三方代码对一款APP进行注入,供安全测试之用。正如余弦所言,run it 优先,之后再究其原理。
create: 2018-10-23 01:17:07

  1. 准备工作
    原理简介:https://www.cnblogs.com/goodhacker/p/3920365.html
    项目地址:https://github.com/yurushao/droid_injectso
    直接去bin目录下载两个编译好的文件,一个是注入工具injector、另一个是待加载的代码libtest.so
    然后push到手机data/local/tmp/目录中,chmod 755 injector赋予可执行权限。
image.png
  1. 锁定目标
    启动待注入APK,通过如下命令找到对应的进程号24900和25002。
> ps |grep gamehall
u0_a92    24900 181   1085880 280960 ffffffff 4010f73c S com.xxx.gamehalltv
u0_a92    25002 181   913632 54256 ffffffff 4010f73c S com.xxx.gamehalltv:ipc
  1. 执行注入
> ./injector -p 25002 -l /data/local/tmp/libtest.so
  1. 验证注入
    从libtest.so源码中可知,当注入成功后,会打印Logcat输出"lib loaded ..."和进程号信息。根据这些信息可以对注入情况做下验证。
#include <unistd.h>
#include <sys/types.h>
#include <android/log.h>

#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "inject-test", __VA_ARGS__))

void _init(char *args)
{
    LOGI("lib loaded ...");
}

void so_entry(char *p)
{
    pid_t pid = getpid();
    LOGI("pid: %d", pid);
}

用grep过滤一下logcat结果,与预期一致,注入成功。

> logcat |grep inject
I/inject-test(25002): lib loaded ...
I/inject-test(25002): pid: 25002

更通用的方法是查看内存映射,下面显示的也是注入成功的情况。

> cat /proc/25002/maps |grep libtest.so
779e2000-779e5000 r-xp 00000000 b3:1c 652251     /data/local/tmp/libtest.so
779e5000-779e6000 r--p 00002000 b3:1c 652251     /data/local/tmp/libtest.so
779e6000-779e7000 rw-p 00003000 b3:1c 652251     /data/local/tmp/libtest.so

结语

玩转ptrace(一)翻译得一坨翔,不如把英语学好,直接看原文:

个人感悟:是在进程号中注入自己的so,和原APP应用有没有so没关系。是把恶意so注入到进程,而不是把恶意so注入到原app的原生so中。
学习步骤:先执行,把流程打通。然后详细地分析其原理,接着分析别人的代码,编写自己的代码。最后是防护原理及防护代码!并再次验证,确定注入失败则防护成功。

相关文章

网友评论

      本文标题:Android进程注入|实战

      本文链接:https://www.haomeiwen.com/subject/vzznzftx.html