-
Notifications
You must be signed in to change notification settings - Fork 41
/
inject.sh
executable file
·208 lines (170 loc) · 6.03 KB
/
inject.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#!/bin/bash
# made by hazukie
# date: 2024.4.13
# JUST FOR LEARNING PURPOSES, DON'T USE THIS TO CRACK SOFTWARE.
# 只是出于学习目的,请勿将其用于破解软件,否则后果自负。用户行为均与本项目作者无关!
#####################################
#### 函数配置部分 ####
####################################
# 打印警告日志
warning() {
printf "\033[31m-> $*\n\033[0m"
}
# 打印日志
infos() {
printf "\033[32m=> $*\n\033[0m"
}
# 捕获 Ctrl+C 中断键
trap 'onCtrlC' INT
function onCtrlC() {
printf "\n"
warning "触发 Ctrl+C,已中止当前脚本运行..."
exit 0
}
# 提示高危命令执行
check_dangerous_cmd(){
warning "即将执行 $*"
warning "是否确认执行高危命令? (y/n)"
read -p "-> " -r dcheck
if [[ "${dcheck:0:1}" != "y" ]];then
warning "已取消执行高危命令,程序中止退出..."
exit 1
else
infos "正在执行高危命令 $*"
fi
}
# 询问函数:
# 调用函数后通过 ret 变量获取返回值,
function ask(){
infos "$*"
read -p "-> " -r content
until [[ ! -z "$content" ]];
do
infos "$*"
read -p "-> " -r content
done
ret=""
ret="$content"
}
check_typora_installed_path(){
warning "该脚本包含 sudo 指令,请您确保知悉高危命令执行的后果且承担相关代价"
warning "在执行過程中,请您仔细确认相关提示,当提示「即将执行高危命令」时,那么此种情形将考验您的判断力"
infos "Typora 安装路径: $*"
warning "Typora 安装路径是否正确?(y/n)"
ret="$*"
read -p "-> " -r check
if [[ "${check:0:1}" != "y" ]];then
ask "不正确的话你可以尝试输入新的路径:"
infos "已确认当前安装路径为: $ret\n"
fi
}
# 判断 node 是否安装
check_node(){
warning "检测是否存在 node..."
if ! type node >/dev/null 2>&1;then
warning "未找到 node..."
exit 0
else
infos "node 存在\n"
fi
}
# 判断文件是否存在
file_exist() {
if [ -e "$1" ]; then
return 0
else
return 1
fi
}
#注入数据
write_js2file() {
cat "$CUR_HOOK_JS_PATH">"$HOOK_JS_WRITE_PATH"
}
# 给目的文件中追加一行 "require('./hook')",
# 实现在 Typora 运行时调用注入JS文件
append_require2file() {
echo -e "\nrequire('./hook')">> "$CUR_INJECT_JS_PATH"
}
#前置准备工作
mkinit(){
# 检查相关文件夹是否存在
if file_exist "$CUR_INJECT_JS_DIR_PATH"; then
warning "您可能已经注入过 hook 文件了!\n警告:在当前目录下发现 node 文件夹"
infos "您若不确定之前是否注入过该文件的话,请手动删除当前目录下的 node 文件夹($CUR_INJECT_JS_DIR_PATH)!\n"
infos "您可以有以下选择:"
infos "\t 1. 删除目录"
warning "\t\trm $CUR_INJECT_JS_DIR_PATH -r\n"
infos "\t 2. 复制已注入压缩包(已确认)至 $INJECT_JS_DIR_ASAR_PATH"
warning "\t\tsudo cp $CUR_PACKED_ASAR_PATH $INJECT_JS_DIR_ASAR_PATH"
exit 0
fi
if file_exist "$INJECT_JS_DIR_ASAR_PATH"; then
warning "未找到 node_modules.asar!"
warning "请确认 Typora 安装目录下是否正确,以及该安装目录下的 resources 中是否存在 node_modules.asar!"
exit 0
fi
# 检查 node 是否存在
check_node
# 复制 asar 文件至当前项目 build 下
infos "复制 node_modules 至 当前目录下($(pwd)/build)"
check_dangerous_cmd "sudo cp $INJECT_JS_DIR_ASAR_PATH $CUR_INJECT_ASAR_PATH"
sudo cp $INJECT_JS_DIR_ASAR_PATH $CUR_INJECT_ASAR_PATH
}
################## 函数配置部分 ###############
################## 数据配置部分 ###############
# 待注入数据文件路径
CUR_HOOK_JS_PATH="./src/hooklog.js"
# Typora 安装路径
TYPORA_INSTALLED_PATH="/usr/share/typora"
# 再次确认是否正确
check_typora_installed_path "$TYPORA_INSTALLED_PATH"
TYPORA_INSTALLED_PATH="$ret"
# 注入 JS 文件的待解压缩包路径
INJECT_JS_DIR_ASAR_PATH="$TYPORA_INSTALLED_PATH/resources/node_modules.asar"
# 为防止破坏原压缩包,特意复制至当前目录
if [[ ! -d ./build ]];then
mkdir build
fi
# 当前压缩包副本路径
CUR_INJECT_ASAR_PATH="./build/node_modules.asar"
# 当前重新打包压缩包路径
CUR_PACKED_ASAR_PATH="${CUR_INJECT_ASAR_PATH}_new"
# 当前注入 JS 文件的文件夹路径
CUR_INJECT_JS_DIR_PATH="./build/node"
# 注入 JS 文件路径
HOOK_JS_WRITE_PATH="$CUR_INJECT_JS_DIR_PATH/raven/hook.js"
# 注入JS文件的目的文件路径
CUR_INJECT_JS_PATH="$CUR_INJECT_JS_DIR_PATH/raven/index.js"
# 解压缩 Asar 包的程序路径
ASAR_BIN="./asar_modules/node_modules/@electron/asar/bin/asar.js"
################## 数据配置部分 ###############
################## 正式执行部分 ###############
# 前置工作初始化
mkinit
# 解压 asar 文件
infos "正在解压 node_modues.asar"
node $ASAR_BIN extract $CUR_INJECT_ASAR_PATH $CUR_INJECT_JS_DIR_PATH
infos "成功解压至 $(pwd)/node 文件夹中!\n"
# 添加js文件和依赖
infos "正在将 hook.js 添加至 $CUR_INJECT_JS_DIR_PATH 文件夹中..."
write_js2file
infos "正在将依赖添加到 $CUR_INJECT_JS_PATH...\n"
append_require2file
infos "添加 $CUR_HOOK_JS_PATH 成功!"
infos "在 $CUR_INJECT_JS_PATH 添加依赖成功!\n"
# 重新打包成 asar 文件
infos "正在重新打包 node 文件夹至 $CUR_PACKED_ASAR_PATH..."
node $ASAR_BIN pack $CUR_INJECT_JS_DIR_PATH $CUR_PACKED_ASAR_PATH
infos "打包完成!\n"
# 复制 asar 文件到软件处
warning "###### 正在将 $CUR_INJECT_ASAR_PATH 移动至 $INJECT_JS_DIR_ASAR_PATH ######"
check_dangerous_cmd "sudo cp $CUR_PACKED_ASAR_PATH $INJECT_JS_DIR_ASAR_PATH"
sudo cp $CUR_PACKED_ASAR_PATH $INJECT_JS_DIR_ASAR_PATH
# 善后工作
warning "若执行当前脚本后不能正常打开软件的话,则请执行以下命令还原:"
warning "\tcp $CUR_INJECT_ASAR_PATH $INJECT_JS_DIR_ASAR_PATH\n"
infos "您的序列号为:"
infos "\tLSGDW2-6M43UN-KHKH2A-D6FDJF"
infos "\tD9KYN9-MCCL2F-59LFPC-NK2CPX\n"
warning "如果激活失败,恐怕您还得安装 rust 环境并使用 license-gen/target/debug/license-gen 生成新的序列号"
################## 正式执行部分 ###############