首页
社区
课程
招聘
[求助]新接手一个项目,对于注入不太懂,请大家帮忙看段代码。
发表于: 2014-10-27 09:50 6391

[求助]新接手一个项目,对于注入不太懂,请大家帮忙看段代码。

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;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
2
首先呢~古河的那份代码是进程注入的,而你这份代码目测跟进程注入没有任何关系。

简单来说,就是hook自己进程的dlopen函数,当调用dlopen时,再hook要加载so的fork函数。这样执行fork的时候直接返回-1表示失败。
作用就是阻止fork调用。
2014-10-27 10:07
0
雪    币: 20
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我们项目是一个xposed的项目,这样做的目的是不是防止xposed修改我们的软件??

dlopen是/system/lib/libdvm.so中的函数吗?

能大概说下dlopen 和 fork函数的作用吗??
2014-10-27 10:18
0
雪    币: 20
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是不是禁止所有的进程 复制(fork)自己?
2014-10-27 10:40
0
雪    币: 1042
活跃值: (540)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看不懂这代码跟注入有撒关系
2014-10-27 12:49
0
雪    币: 233
活跃值: (148)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
6
作用就是监控进程创建子进程吧
2014-10-27 16:02
0
雪    币: 20
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
返回-1是不是 禁止创建的意思?
2014-10-27 20:36
0
游客
登录 | 注册 方可回帖
返回
//