`

安卓进程注入

 
阅读更多

最近在研究进程注入,只能在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系统中,每一个应用程序都是一个...

    进程的注入功能

    下面我们将深入探讨Android进程注入的实现逻辑、相关技术以及应用场景。 1. **进程注入原理** 进程注入的基础是Android的Binder机制,它是Android系统中实现IPC的主要方式。通过Binder,一个应用可以将服务注册到...

    InjectDemo:实现对Android进程注入功能

    总之,InjectDemo是一个关于Android进程注入的示例项目,它展示了如何利用root权限和ptrace系统调用在Android上实现这一功能。理解和掌握这些知识点,对于从事Android底层开发、安全研究或逆向工程的人员来说,都是...

    HelloJni.tar.gz

    1. **Android进程注入**:在Android系统中,每个应用程序都运行在自己的进程中,以保证安全性和隔离性。然而,有时我们需要跨进程通信(IPC)或直接操作其他进程,这就涉及到了进程注入。进程注入通常通过系统权限...

    进程间注入的demo

    在Android系统中,进程间注入(Inter-Process Injection,IPI)是一种高级技术,它允许一个应用程序在另一个进程中运行代码或访问数据,从而突破了进程间的隔离性。本示例"进程间注入的demo"将深入探讨这一概念,并...

    注入安卓进程,并hook java世界的方法

    总的来说,Android的进程注入和Java世界Hook是复杂但极具价值的技术,它们对于开发者和安全研究人员来说是探索和理解Android系统行为的有力工具。通过深入学习和实践,你可以更好地控制和影响Android应用的行为,为...

    ptrace安卓程序注入例子

    在这个“ptrace安卓程序注入例子”中,我们将深入探讨如何利用ptrace机制在Android平台上进行程序注入,特别是与Java Native Interface(JNI)相结合的应用。 首先,ptrace是一个强大的调试工具,它允许tracer读取...

    注入进程需要的工程文件

    总的来说,"DemoInject3"项目为学习和理解Android进程注入提供了一个实践平台。通过深入研究该项目,开发者可以掌握注入技术,提升在复杂应用场景下的编程能力。不过,务必谨慎使用,避免触碰安全红线。

    Android平台so注入进程

    在这个"Android平台SO注入进程"的Demo中,我们将深入探讨这一技术。 首先,我们需要理解Android应用程序的基本架构。每个Android应用都是由一个或多个Dalvik或ART虚拟机实例运行的,每个实例对应一个单独的进程。...

    Android注入代码 - Libinject

    在Android平台上,开发人员有时需要对系统或应用的特定行为进行调试或监控,这就涉及到代码注入和hook技术。本文将详细解析"Android注入代码 - Libinject"项目,它利用ptrace系统调用实现hook功能,其中包括...

    Android 跨进程模拟按键(KeyEvent )实例详解

    这样服务就与系统服务在同一权限级别,可以跨进程注入事件。但是,这需要在Android源码环境中编译,并在`Android.mk`文件中指定`LOCAL_CERTIFICATE := platform`来确保服务被签名为系统应用。 下面是`Android.mk`...

    java安卓辅助源码-injection-stuff:PE注入、DLL注入、进程注入、线程注入、代码注入、Shellcode注入、ELF注入、

    PE注入、DLL注入、进程注入、线程注入、代码注入、Shellcode注入、ELF注入、Dylib注入,当前包括400+工具和350+文章,根据功能进行了粗糙的分类 目录 -&gt; -&gt; -&gt; -&gt; -&gt; -&gt; -&gt; -&gt; -&gt; PE注入 工具 [535星][20d] [C] ...

    vr android注入工具inject hook EGL函数eglSwapBuffers 支持arm32,arm64 源代码

    注入安卓服务或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

    Android平台上的注入代码LibInject 处理器是arm的,需要额外处理一些东西 整体流程分3步 1.在目标进程中分配内存,用来写shellcode和参数 2.往目标进程中写入shellcode, shellcode会调用dlopen来载入我们的library 3...

    cpp-一个工具用于检查转储修改搜索和注入库至Android进程

    在这个过程中,有一种名为"cpp"的工具,它提供了检查、转储、修改以及搜索和注入库至Android进程的功能。这篇文章将详细解析这个工具的工作原理及其在Android开发中的应用。 1. 工具概述: cpp工具,全称为C++编程...

    Android-AndroidVM注入和BinderJacking示例代码以及一些关于root的ramblings

    1. **注入工具**:用于将自定义的Dalvik字节码注入到运行中的Android进程。 2. **Binder Hooking**:示例代码展示了如何hook Binder调用,可能包括拦截特定的 Binder 方法,修改输入输出参数,或插入额外的行为。 3....

    注入的核心代码

    在Android系统中,"注入"通常指的是进程间通信(Inter-Process Communication, IPC)的一种特殊形式,即通过向其他进程注入代码或数据来实现特定功能。这种技术在系统调试、性能优化、安全研究以及恶意软件中都有...

    Android反frida注入检测的demo

    为了实现有效的反Frida注入,开发者需要深入理解Android系统的内部工作原理,包括进程间通信、内存管理、动态链接等。此外,结合其他安全措施,如代码混淆、防篡改检测、权限控制等,可以进一步增强应用的安全性。 ...

Global site tag (gtag.js) - Google Analytics