diff --git a/doc/hfk_userland.txt b/doc/hfk_userland.txt new file mode 100644 index 0000000..6e2b225 --- /dev/null +++ b/doc/hfk_userland.txt @@ -0,0 +1,23 @@ +* client: + ** client.c——客服端实现,写了一个简易shell,包含了一些内置功能的实现("help", "set", "unset", "show", "run", "export", "load", "exit") + help打印其他命令使用方法 + exit退出 + set设置变量值,需要两个参数,参数一为各参数类型("lhost", "lport", "srchost", "srcport", "rhost", "rport", "prot", "pass", "token",不区分 大小写),参数二为该参数的值,其值存储在var_array中 + unset撤销参数值,与set相反 + show打印参数值,按照VAR VALUE DESCRIPTION的格式 + run主要部分,首先检验各参数是否被正确设置,然后起了两个子进程listener 和 packet,并设置传入的参数....... + export需要一个参数,为文件路径,以w+方式打开文件,并写入各参数的值 + load与export类似 + ** listener.c——实现了远程连接(个人感觉类似与ssh),基于TCP,接受客服端的命令并在内置的shell上执行,包含的内置命令有"help", "download", "upload", "shell", "delay", "exit"....... + ** packet.c——指定不同的协议(tcp,icmp,udp)进行自定义的发包...... +* cypto:包含了aes.c和sha1.c,顾名思义,加密算法,初步分析没有进行魔改 +* include: + ** aes.h——ase.c的头文件 + ** sha1.h——同上 + ** config——配置文件,定义了一些宏 + ** custom_rol32.h——定义了简单的加解密宏,并含有一个循环左移的函数 + ** pel.h——定义了pel库的接口,实现初始化、消息接受、发送 + ** util.h——加载图形界面 +* transport:pel.c——用于处理客户端和服务端之间通信时的数据加解密过程 +* cmd.c——命令行工具,启动一个交互式的shell +* shell.c——自定义的shell \ No newline at end of file diff --git a/doc/kernel思维导图.png b/doc/kernel思维导图.png new file mode 100644 index 0000000..c0f1183 Binary files /dev/null and b/doc/kernel思维导图.png differ diff --git a/doc/mqc_kernel代码泛读.md b/doc/mqc_kernel代码泛读.md new file mode 100644 index 0000000..ecc0d0a --- /dev/null +++ b/doc/mqc_kernel代码泛读.md @@ -0,0 +1,43 @@ + + + +## 概述 +该项目是一个Linux内核模块,包含了多个组件,旨在提供隐藏进程、文件、目录、网络连接等功能,并包含一个后门功能。代码通过挂钩(hooking)Linux内核函数来实现其功能,涉及的Linux内核版本代码检查表明,它兼容多个版本的内核。 + +## 主要阅读文件 +Reptile-master\kernel\string_helpers.c + +Reptile-master\kernel\util.c + +Reptile-master\kernel\backdoor.c + +Reptile-master\kernel\dir.c + +Reptile-master\kernel\file.c + +Reptile-master\kernel\Kbuild + +Reptile-master\kernel\main.c + +Reptile-master\kernel\module.c + +Reptile-master\kernel\network.c + +Reptile-master\kernel\proc.c + + + +## 主要功能 +隐藏进程(proc.c):通过修改任务结构体的标记来控制特定进程是否对系统调用如kill和stat等隐藏。 + +隐藏目录和文件(dir.c 和 file.c):通过挂钩文件系统相关的内核函数,如fillonedir和vfs_read,来控制目录和文件的可见性。 + +隐藏网络连接(network.c):通过维护一个隐藏连接列表,挂钩网络相关的内核函数,如tcp4_seq_show和udp4_seq_show,来控制网络连接的可见性。 + +后门功能(backdoor.c):通过解析特殊的“魔术包”来执行远程shell命令,允许攻击者远程执行命令。 + +模块控制(module.c):提供了隐藏和显示模块的功能,允许模块在系统的模块列表中隐藏自己。 + +字符串处理(string_helpers.c):提供了字符串处理的辅助函数,如strreplace和kstrdup_quotable。 + +实用工具函数(util.c):提供了一些实用工具函数,如get_cmdline,用于获取进程的命令行参数。 \ No newline at end of file diff --git a/doc/sbj_script思维导图-scripts.md b/doc/sbj_script思维导图-scripts.md new file mode 100644 index 0000000..add3b83 --- /dev/null +++ b/doc/sbj_script思维导图-scripts.md @@ -0,0 +1,89 @@ +# **scripts 目录** + +* kconfig目录(这里只列举核心文件的功能) + + * lxdialog目录 + + * .pc目录 + + * patches目录 + + * check.sh + + * 用于检查系统是否支持国际化(gettext)功能 + + * conf.c、confdata.c、config.sh、mconf.c、nconf.c等 + + * 用于配置管理,构建系统或内核配置 + + * expr.c + + * 用于处理配置表达式的C语言程序 + + * gconf.c + + * 基于GTK+的图形化配置工具(gkc),用于管理和配置Linux内核或其他类似项目的配置选项 + + * image.c + + * 定义了一系列的XPM(X PixMap)图像数据,主要用于表示图形用户界面中的图标和图像。每个图像都使用数组形式存储,图像的数据格式是以文本形式表示的像素颜色和形状。 + + * kxgettext.c + + * 实现了一个用于国际化(i18n)支持的消息处理系统,主要功能包括创建、查找、存储和打印消息,处理消息的转义和格式化,以适应多语言环境的需求。 + + * menu.c + + * 菜单配置,包括其功能、使用方式、涉及的技术细节及操作提示 + + * util.c + + * 提供了有效的内存管理和字符串处理功能 + + * merge\_config.sh(核心) + + * 合并多个配置片段,生成一个最终的 .config 文件,并在过程中提供对重定义值的警告以及检查缺失的依赖项。 + + * 存放补丁代码 + + * 总的来说,kconfig用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config + +* lib目录 + + * Unescape.pm文件 + + * 提供了一个名为 unescape 的函数,用于将 Perl 中的转义字符转换为相应的字符。例如,字符串 '\t\c@\x41\n' 将被转换为实际的制表符、控制字符、十六进制字符和换行符。 + +* bashrc + + * 设置交互式 shell 的环境 + + * 配置终端设置、颜色提示以及对 ls、grep 等命令的别名 + + * 包括检查以确保用户不是 root,暗示该项目设计为非特权操作以避免被检测。 + +* destringify.pl( Perl 脚本) + + * 用于处理输入以反转义字符串并将其翻译为类似 C 的语法 + + * 忽略包含 asm、include 和 \_\_attribute\_\_ 等关键字的行,避免干扰实际的代码段 + + * 将字符串字面量翻译为适合嵌入 C 程序的格式,利于二进制注入或操作 + +* installer.sh + + * 负责安装 Reptile 项目,创建目录并复制必要的文件 + +* random.sh + + * 生成两个随机的十六进制数(4 字节),并将这些值以 AUTH 和 HTUA 的形式写入指定的配置文件中 + +* rule + + * 内容:ACTION=="add", ENV{MAJOR}=="1", ENV{MINOR}=="8", RUN+="/lib/udev/reptile" + + * 这条 udev 规则的功能是:当一个主设备号为 1,次设备号为 8 的设备被添加到系统时,系统将执行 /lib/udev/reptile 这个程序或脚本。 + +* start + + * 全文被注释 diff --git a/doc/scripts思维导图.png b/doc/scripts思维导图.png new file mode 100644 index 0000000..da9dd5b Binary files /dev/null and b/doc/scripts思维导图.png differ diff --git a/doc/userland思维导图.png b/doc/userland思维导图.png new file mode 100644 index 0000000..8562fba Binary files /dev/null and b/doc/userland思维导图.png differ diff --git a/doc/why_kernel项目泛读.md b/doc/why_kernel项目泛读.md new file mode 100644 index 0000000..07dc231 --- /dev/null +++ b/doc/why_kernel项目泛读.md @@ -0,0 +1,45 @@ +``` + +├── kernel +│ ├── backdoor.c //后门程序,用于监听特定的网络数据包,并根据数据包的内容执行指定的命令 +│ ├── dir.c //判断文件夹是否隐藏 +│ ├── encrypt +│ │ └── encrypt.c //使用给定的十六进制密钥对文件内容进行加密 +│ ├── file.c //判断文件是否隐藏 +│ ├── include //函数声明、定义、引用的头文件 +│ │ ├── backdoor.h +│ │ ├── config.h +│ │ ├── dir.h +│ │ ├── encrypt.h +│ │ ├── file.h +│ │ ├── module.h +│ │ ├── network.h +│ │ ├── proc.h +│ │ ├── string_helpers.h +│ │ └── util.h //基本的功能实现,例如加密、命令执行和权限提升 +│ ├── Kbuild +│ ├── khook //替换掉需要钩掉的函数的前几个字节,替换成一个跳转指令,让X开始执行的时候跳转到框架自定义的STUB代码部分,STUB再调用用户自定义的钩子函数。然后又会执行原先被跳转指令覆盖的指令,最后回到被钩掉的函数的正常执行逻辑 +│ │ ├── engine.c //内核级别的挂钩(hook)机制,主要用于在Linux内核中动态修改函数行为 +│ │ ├── engine.h +│ │ ├── engine.lds +│ │ ├── internal.h +│ │ └── x86 +│ │ ├── hook.c //内核中实现x86架构下的函数钩子(hook) +│ │ ├── Makefile +│ │ ├── README.md +│ │ ├── stub32.inc //32位汇编代码的定义或宏 +│ │ ├── stub.inc //汇编代码的定义或宏 +│ │ └── stub.S //x86架构上实现函数调用的拦截和转发 汇编代码 +│ ├── kmatryoshka +│ │ ├── Kbuild +│ │ └── kmatryoshka.c //内核模块的初始化 +│ ├── loader +│ │ └── loader.c ////加载所需模块 +│ ├── main.c +│ ├── module.c //内核模块隐藏 +│ ├── network.c //网络地址隐藏 +│ ├── proc.c //进程隐藏 +│ ├── string_helpers.c //获取命令行参数,转为可打印的字符 +│ └── util.c //访问和操作进程的命令行参数 +``` + diff --git a/doc/文档模板-开源软件泛读、标注和维护报告文档.docx b/doc/文档模板-开源软件泛读、标注和维护报告文档.docx new file mode 100644 index 0000000..1833f4e Binary files /dev/null and b/doc/文档模板-开源软件泛读、标注和维护报告文档.docx differ