最近在研究进程注入,只能在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中的进程注入功能实现,
InjectDemo 实现对Android进程注入功能 1、以root权限执inject。 2、注入指定进程。 感谢:
Android中的进程注入功能的实现逻辑代码
Android中的进程间注入的核心代码实现以及案例
该资源包含了一个android平台使用so注入进程的demo,运行在4.4模拟器。
看雪大牛写的
注入安卓服务或APK neweglSwapBuffers 用法: injector com.target.apk /data/local/tmp/libmy.so injector /system/bin/surfaceflinger /data/local/tmp/libmy64bit.so static EGLBoolean neweglSwapBuffers...
PE注入、DLL注入、进程注入、线程注入、代码注入、Shellcode注入、ELF注入、Dylib注入,当前包括400+工具和350+文章,根据功能进行了粗糙的分类 目录 -> -> -> -> -> -> -> -> -> PE注入 工具 [535星][20d] [C] ...
Android平台上的注入代码LibInject 处理器是arm的,需要额外处理一些东西 整体流程分3步 1.在目标进程中分配内存,用来写shellcode和参数 2.往目标进程中写入shellcode, shellcode会调用dlopen来载入我们的library 3...
Andorid进程的so注入的框架代码,相比网上其他的Andorid so注入代码更稳定,留给需要的同学,也为了自己备份一下。按照博客中的说明,在eclipse下能够编译成功。
一个工具用于检查、转储、修改、搜索和注入库至Android 进程
android平台下实现进程注入,以libinject为主。
Android中进程间注入的核心代码实现
Android中的注入功能的实现第三个工程:DemoInject3
Android应用程序是运行在一个沙箱中。这个沙箱是基于Linux内核提供的用户ID(UID)和用户组ID...此外,有root权限的应用程序,还可以通过Linux的ptrace注入到其它应用程序进程,以及系统进程,进行各种函数调用拦截。
Android进程so注入Hook java方法的原理和使用(一)中介绍的Android native Hook工具文件,已经在android模拟器上进行Hook测试,能够成功,提供给需要的朋友,也为自己备份一下。
LingoRecord is a better recorder for Android, you can easily process pcm data from it. Features 多线程机制保证处理能力和 PCM 数据的完整性。 抽象出 AudioProcessor 来注入 Recorder 中以支持录音和...
详细说明请见文章:Android WebView独立进程解决方案 本项目主要包含两方面内容: WebView独立进程 定制DWebView,继承自WebView,满足了基本的WebView配置,用户可以直接使用; 设计了几个WebFrament,用以页面...