inject.sh 6.2 KB

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