最近在研究进程注入,只能在pc上将so注入安卓进程,修改.so文件中的值
先记录一些参考贴:
http://blog.csdn.net/l173864930/article/details/38455951
http://www.cnblogs.com/lanrenxinxin/p/4712222.html
https://www.2cto.com/kf/201411/351143.html
http://blog.csdn.net/qq1084283172/article/details/53869796
【最简单的so注入,在myso.so(病毒)中调用宿主(inso.so)的c++方法,改变inso.so中的值】
参考贴:https://www.2cto.com/kf/201411/351143.html
1.材料:Poison应用(在上面的参考贴里有实现代码和最终的应用)
Android.mk:
LOCAL_PATH := $(call my-dir) #Myso include $(CLEAR_VARS) LOCAL_MODULE := myso LOCAL_MODULE_FILENAME := libmyso LOCAL_SRC_FILES := myso.cpp LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog include $(BUILD_SHARED_LIBRARY) #Inso include $(CLEAR_VARS) LOCAL_MODULE := inso LOCAL_MODULE_FILENAME := libinso LOCAL_SRC_FILES := inso.cpp \ JniTest.cpp LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog include $(BUILD_SHARED_LIBRARY)
Application.mk
# 编译生成的模块运行支持的平台 APP_ABI := armeabi-v7a # 设置编译连接的工具的版本 #NDK_TOOLCHAIN_VERSION = 4.9
myso.cpp(病毒so文件的源码)
#include <stdio.h> #include <stddef.h> #include <dlfcn.h> #include <pthread.h> #include <stddef.h> #include "log.h" class PoisonObj{ public: PoisonObj(){ LOGI(">>>>>>>>>>>>>PoisonObj()<<<<<<<<<<<<<<"); // void* handle = dlopen("libinso.so", RTLD_NOW); void (*setA_func)(int) = (void (*)(int))dlsym(handle, "setA"); if (setA_func) { setA_func(999); } } ~PoisonObj(){} } ppt; extern "C"{ extern void setA(int i); void display(); }
inso.cpp(宿主so文件的源码)
extern "C"{ static int gA = 1; void setA(int i){ gA = i; } int getA(){ return gA; } }
JniTest.cpp
#include <jni.h> #include <string.h> extern "C"{ extern int getA(); JNIEXPORT int JNICALL Java_com_example_poison_MainActivity_nativeGetA(JNIEnv *env,jobject thiz,jobject context){ getA(); } }
MainActivity.java
package com.example.poison; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { static{ System.loadLibrary("inso"); //System.loadLibrary("myso"); } native public int nativeGetA(Context context); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnLog = (Button)findViewById(R.id.btnLog); btnLog.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { new Thread(new Runnable() { @Override public void run() { while(true){ Log.i("TTT","----------num is " + nativeGetA(MainActivity.this) ); try{ Thread.sleep(1000L); }catch(Exception e){ e.printStackTrace(); } } } }).run(); } }); } }
2.注入步骤:
adb push poison /data/local/tmp
adb push libmyso.so /data/local/tmp
adb shell chmod 0777 /data/local/tmp/poison
adb shell chmod 0777 /data/local/tmp/libmyso.so
adb shell
su
ps | grep com.example.poison (假设得到的进程id为17569)
/data/local/tmp/poison /data/local/tmp/libmobisec.so 17569
cat /proc/17569/maps | grep libmyso.so(可以看到进程中有libmyso.so,注入之前是没有的)
adb logcat -s TTT
3.检查效果
日志tag为"TTT",可以发现,注入进程后,inso.so中gA的值被修改了
----------num is 1 ----------num is 1 ----------num is 1 >>>>>>>>>>>>PoisonObj()<<<<<<<<<<<<< ----------num is 999 ----------num is 999 ----------num is 999
4.原理
1.宿主程序运行,打印num
2.将病毒注入宿主程序时,因为myso.cpp中有一个PoisonObj的全局对象,系统调用PoisonObj的构造函数,在里面修改num的值
3.继续打印num的值
相关推荐
Android进程注入是一种技术,它允许一个应用程序在另一个应用程序的进程中运行其代码,通常是出于调试、监控或增强功能的目的。在Android系统中,由于其安全模型,这种操作需要深入理解操作系统的工作原理以及相应的...
下面将详细阐述Android进程注入的原理、实现方法以及相关知识点。 首先,我们要明白什么是进程。在计算机系统中,进程是程序的一次执行实例,每个进程都有独立的内存空间。在Android系统中,每一个应用程序都是一个...
下面我们将深入探讨Android进程注入的实现逻辑、相关技术以及应用场景。 1. **进程注入原理** 进程注入的基础是Android的Binder机制,它是Android系统中实现IPC的主要方式。通过Binder,一个应用可以将服务注册到...
总之,InjectDemo是一个关于Android进程注入的示例项目,它展示了如何利用root权限和ptrace系统调用在Android上实现这一功能。理解和掌握这些知识点,对于从事Android底层开发、安全研究或逆向工程的人员来说,都是...
1. **Android进程注入**:在Android系统中,每个应用程序都运行在自己的进程中,以保证安全性和隔离性。然而,有时我们需要跨进程通信(IPC)或直接操作其他进程,这就涉及到了进程注入。进程注入通常通过系统权限...
在Android系统中,进程间注入(Inter-Process Injection,IPI)是一种高级技术,它允许一个应用程序在另一个进程中运行代码或访问数据,从而突破了进程间的隔离性。本示例"进程间注入的demo"将深入探讨这一概念,并...
总的来说,Android的进程注入和Java世界Hook是复杂但极具价值的技术,它们对于开发者和安全研究人员来说是探索和理解Android系统行为的有力工具。通过深入学习和实践,你可以更好地控制和影响Android应用的行为,为...
在这个“ptrace安卓程序注入例子”中,我们将深入探讨如何利用ptrace机制在Android平台上进行程序注入,特别是与Java Native Interface(JNI)相结合的应用。 首先,ptrace是一个强大的调试工具,它允许tracer读取...
总的来说,"DemoInject3"项目为学习和理解Android进程注入提供了一个实践平台。通过深入研究该项目,开发者可以掌握注入技术,提升在复杂应用场景下的编程能力。不过,务必谨慎使用,避免触碰安全红线。
在这个"Android平台SO注入进程"的Demo中,我们将深入探讨这一技术。 首先,我们需要理解Android应用程序的基本架构。每个Android应用都是由一个或多个Dalvik或ART虚拟机实例运行的,每个实例对应一个单独的进程。...
在Android平台上,开发人员有时需要对系统或应用的特定行为进行调试或监控,这就涉及到代码注入和hook技术。本文将详细解析"Android注入代码 - Libinject"项目,它利用ptrace系统调用实现hook功能,其中包括...
这样服务就与系统服务在同一权限级别,可以跨进程注入事件。但是,这需要在Android源码环境中编译,并在`Android.mk`文件中指定`LOCAL_CERTIFICATE := platform`来确保服务被签名为系统应用。 下面是`Android.mk`...
PE注入、DLL注入、进程注入、线程注入、代码注入、Shellcode注入、ELF注入、Dylib注入,当前包括400+工具和350+文章,根据功能进行了粗糙的分类 目录 -> -> -> -> -> -> -> -> -> PE注入 工具 [535星][20d] [C] ...
注入安卓服务或APK neweglSwapBuffers 用法: injector com.target.apk /data/local/tmp/libmy.so injector /system/bin/surfaceflinger /data/local/tmp/libmy64bit.so static EGLBoolean neweglSwapBuffers...
Android平台上的注入代码LibInject 处理器是arm的,需要额外处理一些东西 整体流程分3步 1.在目标进程中分配内存,用来写shellcode和参数 2.往目标进程中写入shellcode, shellcode会调用dlopen来载入我们的library 3...
在这个过程中,有一种名为"cpp"的工具,它提供了检查、转储、修改以及搜索和注入库至Android进程的功能。这篇文章将详细解析这个工具的工作原理及其在Android开发中的应用。 1. 工具概述: cpp工具,全称为C++编程...
1. **注入工具**:用于将自定义的Dalvik字节码注入到运行中的Android进程。 2. **Binder Hooking**:示例代码展示了如何hook Binder调用,可能包括拦截特定的 Binder 方法,修改输入输出参数,或插入额外的行为。 3....
在Android系统中,"注入"通常指的是进程间通信(Inter-Process Communication, IPC)的一种特殊形式,即通过向其他进程注入代码或数据来实现特定功能。这种技术在系统调试、性能优化、安全研究以及恶意软件中都有...
为了实现有效的反Frida注入,开发者需要深入理解Android系统的内部工作原理,包括进程间通信、内存管理、动态链接等。此外,结合其他安全措施,如代码混淆、防篡改检测、权限控制等,可以进一步增强应用的安全性。 ...