Skip to content

Commit f5a6f5d

Browse files
committed
docs: 添加LICENSE文件并更新README.md
添加木兰宽松许可证(Mulan PSL v2)文件,并更新README.md以包含贡献指南、许可证信息和开源赞助计划。这些更改旨在明确项目的许可条款,鼓励社区贡献,并提供捐赠支持项目发展的途径。
1 parent 5624768 commit f5a6f5d

File tree

9 files changed

+473
-0
lines changed

9 files changed

+473
-0
lines changed

README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,40 @@ Erlang/OTP 27 [erts-15.2.6] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threa
128128
129129
```
130130

131+
-----
132+
## 编译逻辑算法
133+
#### 1. 后台逻辑
134+
![后台逻辑](./assets/sequence_backend/sequence_backend.png)
135+
136+
#### 2. 后台类图
137+
![后台类图](./assets/class_backend/class_backend.png)
138+
139+
#### 3. 客户端逻辑
140+
![客户端逻辑](./assets/sequence_frontend/sequence_frontend.png)
141+
142+
#### 4. 客户端类图
143+
![客户端类图](./assets/class_frontend/class_frontend.png)
144+
145+
-----
146+
147+
## 系统要求
148+
149+
### 硬件要求
150+
151+
- CPU: 双核处理器及以上(小魔法师的大脑要够聪明哟~)
152+
- 内存: 4GB RAM 及以上(魔法背包要够大才能装下数据呀~)
153+
- 硬盘空间: 最少 1GB 可用空间(魔法仓库要留有余地哒~)
154+
- USB 端口: USB 2.0 或以上(魔法桥梁要够稳固哟~)
155+
156+
### 软件要求
157+
158+
| 操作系统 | 最低版本要求 | 魔法适配版本 |
159+
| -------- | ---------------- | ------------------- |
160+
| Windows | Windows 7 64 位 | 魔法兼容性测试通过~ |
161+
| macOS | macOS 10.14 | 苹果魔法水晶球适配~ |
162+
| Linux | Ubuntu 18.04 LTS | 开源魔法石板适配~ |
163+
164+
131165
---
132166

133167
## 技术细节与极客思考
219 KB
Loading
64.8 KB
Loading
179 KB
Loading
328 KB
Loading

doc/class_backend.puml

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
@startuml
2+
' === 类图 ===
3+
title 木马后台服务类图 (改进视图)
4+
5+
' 样式设置
6+
skinparam class {
7+
BackgroundColor #FFFFFF ' 白色背景
8+
BorderColor #6C8EBF ' 浅蓝色边框
9+
ArrowColor #6C8EBF ' 箭头颜色
10+
FontName Arial ' 使用 Arial 字体
11+
Shadowing false ' 无阴影
12+
StereotypeFontColor #000000 '构造型字体颜色
13+
FontStyle Bold
14+
}
15+
skinparam package {
16+
FontName Arial
17+
BorderColor #6C8EBF ' 浅蓝色边框
18+
BackColor #E0E0E0 ' 浅灰色背景
19+
FontColor #000000
20+
FontStyle Bold
21+
}
22+
skinparam roundcorner 15 ' 更大的圆角
23+
skinparam note {
24+
BackColor #f5f5dc
25+
BorderColor #d3d3d3
26+
FontColor #000000
27+
}
28+
29+
' 核心组件
30+
package "Core Components" {
31+
class trojan_socket {
32+
- DEFAULT_NAME: string ' 默认名称
33+
- DEFAULT_PORT: int ' 默认端口
34+
- DEFAULT_IP: tuple ' 默认 IP 地址
35+
- DEFAULT_BUFSIZE: int ' 默认缓冲区大小
36+
- device_info: record ' 设备信息 (Erlang 记录)
37+
- ANSI_RESET: string ' ANSI 重置码
38+
- ANSI_COLOR_CODES: list ' ANSI 颜色码列表
39+
+ start() ' 启动服务
40+
+ create_schema() ' 创建数据库 schema
41+
+ create_table() ' 创建数据表
42+
+ print_banner() ' 打印启动横幅
43+
+ get_ip_information(IP) -> map ' 获取 IP 信息 (返回 Map)
44+
+ ip_to_string(IPTuple) -> string ' IP 元组转字符串
45+
+ write_file(Filename, Content) ' 写入文件
46+
+ random_color() -> string ' 生成随机颜色码
47+
+ log(Level, FormatString, Args) ' 记录日志消息
48+
+ get_current_local_ip_addr() -> list ' 获取本地 IP 地址列表
49+
+ extract_value(Binary, Key) -> string ' 从二进制数据提取值
50+
- handle_connection(Socket) ' 处理客户端连接
51+
- handle_command(Command) ' 处理客户端命令
52+
- receive_all(Socket) ' 接收客户端数据
53+
- accept_loop(ListenSocket) ' 接受客户端连接
54+
}
55+
note as TrojanSocketNote
56+
核心套接字类,负责处理网络通信、
57+
命令解析和数据交换。
58+
end note
59+
60+
61+
enum LogLevel {
62+
info ' 信息级别
63+
warning ' 警告级别
64+
error ' 错误级别
65+
}
66+
trojan_socket --|> LogLevel : "uses" ' 使用日志级别枚举
67+
trojan_socket --+ TrojanSocketNote
68+
69+
70+
}
71+
72+
' 数据库组件
73+
package "Database" {
74+
class mnesia {
75+
+ start() ' 启动 Mnesia
76+
+ create_schema(Nodes) ' 创建数据库 schema
77+
+ create_table(TableName, Options) ' 创建数据表
78+
+ read(TableName, Key, LockType) -> list ' 读取数据 (返回列表)
79+
+ write(TableName, Value) -> "ok" | "{error, Reason}" ' 写入数据 (返回状态)
80+
+ delete(TableName, Key) -> "ok" | "{error, Reason}" ' 删除数据 (返回状态)
81+
}
82+
note as MnesiaNote
83+
Erlang 内置的分布式数据库,
84+
用于存储设备信息和配置。
85+
end note
86+
mnesia --+ MnesiaNote
87+
88+
}
89+
90+
' 网络组件
91+
package "Network" {
92+
class inet {
93+
+ getifaddrs(): "{ok, list}" | "{error, Reason}" ' 获取网络接口地址
94+
+ peername(Socket): "{ok, tuple}" | "{error, Reason}" ' 获取连接对端信息
95+
}
96+
class httpc {
97+
+ request(Method, URL, Headers, Options): "{ok, Response}" | "{error, Reason}" ' 发送 HTTP 请求
98+
}
99+
note as NetworkNote
100+
处理网络相关的操作,
101+
包括 IP 地址获取和 HTTP 请求。
102+
end note
103+
inet --+ NetworkNote
104+
httpc --+ NetworkNote
105+
106+
}
107+
108+
' 文件系统组件
109+
package "File System" {
110+
class file {
111+
+ write_file(Filename, Content, Options): "ok" | "{error, Reason}" ' 写入文件
112+
+ read_file(Filename) -> "{ok, binary}" | "{error, Reason}" ' 读取文件
113+
+ delete_file(Filename) -> "ok" | "{error, Reason}" ' 删除文件
114+
}
115+
note as FileNote
116+
提供文件读写和删除功能。
117+
end note
118+
file --+ FileNote
119+
120+
}
121+
122+
' 关系 (简化表示)
123+
trojan_socket --> mnesia : "uses" ' 使用 Mnesia 数据库
124+
trojan_socket --> inet : "uses" ' 使用 inet 网络模块
125+
trojan_socket --> file : "uses" ' 使用 file 文件模块
126+
trojan_socket --> httpc : "uses" ' 使用 httpc 客户端
127+
128+
' 添加一些图例说明 (可选)
129+
legend top
130+
|= 符号 |= 说明 |
131+
| --- | --- |
132+
| Class | 类 |
133+
| Abstract Class | 抽象类 |
134+
| Interface | 接口 |
135+
| Enum | 枚举 |
136+
| Package | 包 |
137+
| note | 注释 |
138+
endlegend
139+
140+
@enduml

doc/class_frontend.puml

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
@startuml
2+
' === 类图 ===
3+
title 假Deepseek 应用类图 (改进版)
4+
5+
' 样式调整 (可选,根据需要调整)
6+
skinparam class {
7+
BackgroundColor #FFFFFF ' 白色背景
8+
BorderColor #888888 ' 灰色边框
9+
ArrowColor #888888 ' 灰色箭头
10+
FontName Arial ' 使用 Arial 字体
11+
}
12+
skinparam package {
13+
FontName Arial
14+
BorderColor #888888
15+
BackColor #EEEEEE
16+
}
17+
18+
package "应用核心" {
19+
classDeepseek {
20+
- appname: str ' 应用名称
21+
- version: str ' 版本号
22+
- url: str ' 应用 URL
23+
- default_port: int ' 默认监听端口
24+
- default_ip: str ' 默认监听 IP
25+
- listening_time: int ' 监听超时
26+
- default_bufsize: int ' 默认缓冲区
27+
- DNS: dict ' DNS 配置
28+
- host: str ' 目标主机
29+
+ __init__() ' 构造函数
30+
+ start() ' 启动流程
31+
+ dangerZone() ' 后台操作
32+
+ getUserInfo() -> str ' 获取用户信息
33+
+ prompt_accept_terms() -> bool ' 用户协议
34+
+ check_network() -> bool ' 检查网络
35+
+ animated_print() ' 动画打印
36+
+ WARN() ' 打印警告
37+
}
38+
note as N1
39+
Deepseek 方法
40+
----
41+
- __init__(): 初始化
42+
- start(): 启动
43+
- dangerZone(): 后台
44+
- getUserInfo(): 用户信息
45+
- prompt_accept_terms(): 协议
46+
- check_network(): 网络
47+
- animated_print(): 动画
48+
- WARN(): 警告
49+
- get_public_ip(): 公网 IP
50+
- get_computer_model(): 电脑型号
51+
- get_os_version(): 系统版本
52+
- get_network_type(): 网络类型
53+
- get_computer_hostname(): 主机名
54+
- get_cpu_model(): CPU 型号
55+
- get_current_location_no_key(): 地理位置
56+
- capture_webcam_image_base64(): 摄像头图像
57+
end note
58+
}
59+
60+
package "系统交互" {
61+
class socket {
62+
+ socket(...) ' 创建套接字
63+
+ connect(...) ' 连接
64+
+ sendall(...) ' 发送数据
65+
+ close() ' 关闭
66+
+ gethostname() ' 获取主机名
67+
}
68+
class platform {
69+
+ system() ' 操作系统
70+
+ version() ' 版本
71+
+ release() ' 发行版
72+
+ mac_ver() ' macOS 版本
73+
+ linux_distribution() ' Linux 发行版
74+
}
75+
class subprocess {
76+
+ check_output(...) ' 执行命令
77+
}
78+
}
79+
80+
package "多媒体" {
81+
class cv2 {
82+
+ VideoCapture(...) ' 打开设备
83+
+ isOpened() ' 检查打开
84+
+ read() ' 读取帧
85+
+ release() ' 释放设备
86+
+ imencode(...) ' 编码图像
87+
}
88+
class base64 {
89+
+ b64encode(...) ' Base64 编码
90+
+ b64decode(...) ' Base64 解码
91+
}
92+
}
93+
94+
package "图形界面" {
95+
class tkinter {
96+
+ Tk() ' 主窗口
97+
+ Menu(...) ' 菜单
98+
}
99+
class messagebox {
100+
+ showinfo(...) ' 信息框
101+
}
102+
class webview {
103+
+ create_window(...) ' WebView 窗口
104+
+ start() ' 启动 WebView
105+
}
106+
}
107+
108+
package "网络" {
109+
class requests {
110+
+ get(...) ' HTTP GET
111+
}
112+
}
113+
114+
' 关系 (更简洁的表示)
115+
Deepseek --> socket : uses
116+
Deepseek --> platform : uses
117+
Deepseek --> subprocess : uses
118+
Deepseek --> cv2 : uses
119+
Deepseek --> base64 : uses
120+
Deepseek --> tkinter : uses
121+
Deepseek --> messagebox : uses
122+
Deepseek --> requests : uses
123+
Deepseek --> webview : uses
124+
125+
hide methods
126+
hide members
127+
@enduml

doc/sequence_backend.puml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
@startuml
2+
' === 序列图 ===
3+
title 木马后台服务序列图
4+
5+
participant 用户
6+
participant trojan_socket as 服务器
7+
participant mnesia as 数据库
8+
participant inet as 网络
9+
participant file as 文件系统
10+
participant httpc as IP_API
11+
12+
== 服务器启动 ==
13+
用户 -> 服务器: start()
14+
服务器 -> 服务器: print_banner() ' 打印横幅信息
15+
服务器 -> 服务器: getCurrentLocalIPAddr() ' 获取本地 IP 地址
16+
服务器 -> 网络: inet:getifaddrs() ' 获取网络接口地址
17+
网络 -->> 服务器: {ok, 接口列表} 或 {error, 原因}
18+
服务器 -> IP_API: httpc:request(get, "http://ip-api.com/json/...") ' 请求 IP 信息
19+
IP_API -->> 服务器: {ok, 响应} 或 {error, 原因}
20+
服务器 -> 服务器: log(info, ...) ' 记录启动日志
21+
服务器 -> 数据库: mnesia:start() ' 启动 Mnesia 数据库
22+
服务器 -> 服务器: gen_tcp:listen(端口, 选项) ' 监听指定端口
23+
服务器 -->> 用户: 服务器已启动
24+
25+
== 客户端连接和数据处理 ==
26+
服务器 -> 服务器: accept_loop(监听套接字) ' 进入连接等待循环
27+
服务器 -->> 用户: 等待客户端连接
28+
用户 -> 网络: 发起 TCP 连接到服务器
29+
网络 -->> 服务器: {ok, 套接字}
30+
服务器 -> 服务器: handle_connection(套接字) ' 处理新的连接
31+
服务器 -> 网络: inet:peername(套接字) ' 获取客户端 IP 地址
32+
网络 -->> 服务器: {ok, 客户端IP}
33+
服务器 -> 服务器: log(info, "新的客户端连接...") ' 记录连接日志
34+
服务器 -> 服务器: receive_all(套接字) ' 开始接收数据
35+
服务器 -->> 用户: 等待来自客户端的数据
36+
用户 -> 网络: 发送数据 "[DATA]客户端数据..."
37+
网络 -->> 服务器: {ok, <<...>>} ' 接收到二进制数据
38+
服务器 -> 服务器: unicode:characters_to_list(<<...>>, utf8) ' 解码为 UTF-8 字符串
39+
服务器 -> 服务器: string:find("[DATA]", ...) ' 查找数据标记
40+
服务器 -> 服务器: string:split("...", "[DATA]") ' 分割数据
41+
服务器 -> 服务器: calendar:local_time() ' 获取当前时间
42+
服务器 -> filename:join(...) ' 构建文件名
43+
服务器 -> 文件系统: file:write_file(文件名, <<...>>) ' 写入数据到文件
44+
文件系统 -->> 服务器: ok 或 {error, 原因}
45+
服务器 -> 服务器: log(info, "数据已写入文件...") ' 记录文件写入日志
46+
服务器 -> 服务器: receive_all(套接字) ' 继续接收数据
47+
用户 -> 网络: 发送数据 "[COMMAND]get_screenshot" ' 发送命令
48+
网络 -->> 服务器: {ok, <<...>>}
49+
服务器 -> 服务器: unicode:characters_to_list(<<...>>, utf8)
50+
服务器 -> 服务器: string:find("[COMMAND]", ...) ' 查找命令标记
51+
服务器 -> 服务器: string:split("...", "[COMMAND]") ' 分割命令
52+
服务器 -> 服务器: handle_command("get_screenshot") ' 处理命令
53+
服务器 -> 服务器: log(info, "收到命令: get_screenshot") ' 记录命令日志
54+
' ... (命令处理逻辑在此处展开) ...
55+
服务器 -> 服务器: receive_all(套接字)
56+
用户 -> 网络: 关闭 TCP 连接
57+
网络 -->> 服务器: 连接已关闭
58+
服务器 -> 服务器: gen_tcp:close(套接字) ' 关闭客户端套接字
59+
服务器 -> 服务器: log(info, "客户端连接已关闭") ' 记录连接关闭日志
60+
61+
== 服务器关闭 (隐式) ==
62+
' (序列图未显式显示关闭过程,但通常涉及关闭监听套接字)
63+
64+
@enduml

0 commit comments

Comments
 (0)