http://www.cnblogs.com/jinshelangjun/archive/2013/01/09/2852493.html
實驗環境:ubuntu12.04 + eclipse + ADT + NDK
在android平台上實現進程注入與在linux上實現進程注入非常相似,但是又不完全相同。本文將詳細介紹android平台下進程注入的實現方法。
首先下載libinject包,下載地址為:http://download.csdn.net/download/ljhzbljhzb/3680780,采用這個包可以幫助我們省去不少時間。
在NDK安裝成功之后,將其自帶的實例中的HelloJni導入到eclipse中,編譯運行,如果出現“Hello from Jni”則表明系統環境配置成功。
下載的libinject包中總共有三個文件inject.c/inject.h/shellcode.s,我們將inject.c中的代碼拷貝到hello-jni.c中,將inject.h中的代碼拷貝到hello-jni.h中,並將shellcode.s整個文件復制到HelloJni工程的jni文件夾下。同時在jni文件夾下新建一文件,命名為Android.mk,文件內容為:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=hello-jni
LOCAL_SRC_FILES:=\
hello-jni.c \
shellcode.s
include $(BUILD_SHARED_LIBRARY)
保存即可。在hello-jni.c中修改代碼,將main函數刪除,添加以下函數
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
pid_t target_pid;
target_pid = find_pid_of("/system/bin/servicemanager");
int success = inject_remote_process( target_pid, "/dev/yuki/payload.so", "hook_entry", "I'm parameter!", strlen("I'm parameter!") );
if(success!=0)
return (*env)->NewStringUTF(env, "failure");
else
return (*env)->NewStringUTF(env, "success");
}
接下來打開terminal , 進入HelloJni工程所在目錄,輸入命令:ndk-build
生成libs文件夾,里面包含我們需要的libhello-jni.so,在eclipse中刷新工程,編譯運行即可。
程序源碼下載地址:http://download.csdn.net/detail/jinshelangjun_/4976715