使用的inject库为:http://bbs.pediy.com/showthread.php?t=141355
源码打包如附件。 编译hello-jni.so makefile如下
代码:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c \ shellcode.s LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog include $(BUILD_SHARED_LIBRARY)
代码:
//#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <android/log.h> #define LOG_TAG "debug" #define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, fmt, ##args) int hook_entry(char * a){ LOGD("Hello ARM! %s pid:%d\n",a,getpid()); while(1) { usleep(100); } return 0; }
代码:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog LOCAL_ARM_MODE := arm LOCAL_MODULE := hello LOCAL_SRC_FILES := hello.c include $(BUILD_SHARED_LIBRARY) 最终生成libhello-jni.so 由apk打包。 另外 adb push /home/libhello.so /dev/ 将inject 使用的库传上去。 jni中使用如下
代码:
target_pid = find_pid_of("/system/bin/servicemanager"); int success = inject_remote_process( target_pid, "/dev/libhello.so", "hook_entry", "I'm parameter!", strlen("I'm parameter!") ); 按说效果应当是servicemanager 进程将被注入我提供的libhello.so 库,并执行hook_entry函数, 但在下面的代码中出错
代码:
int ptrace_attach( pid_t pid ) { DEBUG_PRINT( "ptrace_attach1111111" ); if ( ptrace( PTRACE_ATTACH, pid, NULL, 0 ) < 0 ) { DEBUG_PRINT( "ptrace_attach errno:%d",errno ); if(errno == EPERM) { DEBUG_PRINT( "ptrace_attach EPERM errno:%d",errno ); } DEBUG_PRINT( "ptrace_attach errno:%d",errno ); return -1; } waitpid( pid, NULL, WUNTRACED ); //DEBUG_PRINT("attached\n"); if ( ptrace( PTRACE_SYSCALL, pid, NULL, 0 ) < 0 ) { DEBUG_PRINT( "ptrace_syscall" ); return -1; } waitpid( pid, NULL, WUNTRACED ); DEBUG_PRINT( "ptrace_attach22222222222" ); return 0; } D/debug ( 760): [+] Injecting process: 27 D/debug ( 760): ptrace_attach1111111 D/debug ( 760): ptrace_attach errno:1 D/debug ( 760): ptrace_attach EPERM errno:1 D/debug ( 760): ptrace_attach errno:1 D/debug ( 760): pid:760 error1 也就是在执行ptrace 时。 提示权限不正确。 在java代码中同时也考虑到了提权的问题
代码:
try { Process process = Runtime.getRuntime().exec("su"); TextView tv = new TextView(this); tv.setText( stringFromJNI() ); process.waitFor(); setContentView(tv); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }
上传的附件
| ||||
|
最佳答案 - 作者: pc小波 |
如图: |
普通会员
|
如图:
| ||
|
初级会员
|
嗯。 吹了会风,想明白了。是因为应用本身依然没有root的权限。仅仅是新开的shell有而已。
| ||
|
初级会员
|
额。早上来试了一下。我在adb shell 下su .然后执行pm install -r Hellojni.apk 并不能让应用获取特权,应用仍然是普通权限。
| ||
|
初级会员
|
pm install 只是安装而以, 权限是由APK的描述决定的.
总不能说以ROOT权限安装的程序都有了ROOT权限吧?! | ||
|
初级会员
|
| ||
|
初级会员
|
楼主解决了吗?怎么回事来自呀?
| ||
|
转载于:https://blog.51cto.com/laokaddk/1175507