-
-
[求助]新接手一个项目,对于注入不太懂,请大家帮忙看段代码。
-
发表于:
2014-10-27 09:50
6391
-
[求助]新接手一个项目,对于注入不太懂,请大家帮忙看段代码。
全部的代码见附件,下面贴出来主要的代码。。。
对于注入和C都不太懂,麻烦帮忙大家解释下这段代码的功能。。
多谢。。。网上搜索了不少,但还是不太明白。。
do_hook使用的是这里的代码:http://bbs.pediy.com/showthread.php?t=141355
全部代码::
jni.rar
#include <jni.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <dlfcn.h>
#include <string.h>
#include <android/log.h>
#include <sys/stat.h>
#include <sys/statfs.h>
#include <sys/types.h>
#include <signal.h>
#include "common.h"
extern "C" uint32_t do_hook(const char *module_path, uint32_t hook_func,
const char *symbol_name);
pid_t fork_hook(void)
{
pid_t p = -1;//fork();
LOGE("fork = %d", p);
return p;
}
void hookso(const char *path)
{
LOGD("hook so [%s] ", path);
uint32_t ret = 0;
ret = do_hook(path, (uint32_t) fork_hook, "fork");
LOGI(" > fork %s", ret? "suc." : "fail.");
}
void* dlopen_hook(const char* path, int flag)
{
char newPath[256] = {0};
LOGD("> dlopen [%s]", path);
void* h = dlopen(path, flag);
hookso(path);
return h;
}
void hookdvm()
{
uint32_t ret;
LOGI("hook dvm...");
ret = do_hook("/system/lib/libdvm.so", (uint32_t) dlopen_hook, "dlopen");
if (ret == 0) {
LOGE("ERROR: hook libdvm.dlopen failed!");
}
}
void preHook()
{
hookdvm();
}
int regNative(JNIEnv *env)
{
return JNI_OK;
}
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{
JNIEnv *env;
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
LOGE("ERROR: GetEnv failed\n");
goto bail;
}
if(regNative(env) != JNI_OK) {
LOGE("ERROR: regNative failed\n");
goto bail;
}
preHook();
return JNI_VERSION_1_4;
bail:
return JNI_ERR;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!