inject.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. warning() {
  8. printf "\033[31m-> $*\n\033[0m"
  9. }
  10. # 打印日志
  11. infos() {
  12. printf "\033[32m=> $*\n\033[0m"
  13. }
  14. # 待注入数据文件路径
  15. HOOK_JS_PATH="./src/hooklog.js"
  16. # Typora 安装路径
  17. TYPORA_INSTALLED_PATH="/usr/share/typora"
  18. infos "Typora 安装路径: $TYPORA_INSTALLED_PATH"
  19. warning "Typora 安装路径是否正确?(y/n)"
  20. read -r check
  21. if [[ "${check:0:1}" != "y" ]];then
  22. infos "不正确的话你可以尝试输入新的路径:"
  23. read -r reply
  24. if [[ -z $reply ]];then
  25. warning "您输入为空...脚本已正常退出,请稍候重试!"
  26. exit 0
  27. fi
  28. TYPORA_INSTALLED_PATH="$reply"
  29. fi
  30. infos "已确认当前安装路径为: $TYPORA_INSTALLED_PATH\n"
  31. # 注入 JS 文件的待解压缩包路径
  32. INJECT_JS_DIR_ASAR_PATH="$TYPORA_INSTALLED_PATH/resources/node_modules.asar"
  33. # 为防止破坏原压缩包,特意复制至当前目录
  34. if [[ ! -d ./build ]];then
  35. mkdir build
  36. fi
  37. CUR_INJECT_ASAR_PATH="./build/node_modules.asar"
  38. # 注入 JS 文件的文件夹路径
  39. INJECT_JS_DIR_PATH="./build/node"
  40. # 注入 JS 文件路径
  41. HOOK_JS_WRITE_PATH="$INJECT_JS_DIR_PATH/raven/hook.js"
  42. # 注入JS文件的目的文件路径
  43. INJECT_JS_PATH="$INJECT_JS_DIR_PATH/raven/index.js"
  44. # 判断 node 是否安装
  45. check_node(){
  46. warning "检测是否存在 node..."
  47. if ! type node >/dev/null 2>&1;then
  48. warning "未找到 node..."
  49. exit 0
  50. else
  51. infos "node 存在\n"
  52. fi
  53. }
  54. # 判断文件是否存在
  55. file_exist() {
  56. if [ -e "$1" ]; then
  57. return 0
  58. else
  59. return 1
  60. fi
  61. }
  62. #注入数据
  63. write_js2file() {
  64. cat "$HOOK_JS_PATH">"$HOOK_JS_WRITE_PATH"
  65. }
  66. # 给目的文件中追加一行 "require('./hook')",
  67. # 实现在 Typora 运行时调用注入JS文件
  68. append_require2file() {
  69. echo -e "\nrequire('./hook')">> "$INJECT_JS_PATH"
  70. }
  71. ################## 正式执行部分 ###############
  72. if file_exist "$INJECT_JS_DIR_PATH"; then
  73. warning "您可能已经注入过 hook 文件了!\n警告:在当前目录下发现 node 文件夹"
  74. infos "您若不确定之前是否注入过该文件的话,请手动删除当前目录下的 node 文件夹($INJECT_JS_DIR_PATH)!\n"
  75. infos "您可以有以下选择:"
  76. infos "\t 1. 删除目录"
  77. warning "\t\trm $INJECT_JS_DIR_PATH -r\n"
  78. infos "\t2. 复制已注入压缩包(已确认)至 $INJECT_ASAR_PATH"
  79. warning "\t\tsudo cp $CUR_INJECT_ASAR_PATH $INJECT_JS_DIR_ASAR_PATH"
  80. exit 0
  81. fi
  82. if [ ! -e "$INJECT_JS_DIR_ASAR_PATH" ]; then
  83. warning "未找到 node_modules.asar!"
  84. warning "请将我(inject.py) 移动到 Typora 安装目录下!"
  85. exit 0
  86. fi
  87. check_node
  88. infos "复制 node_modules 至 当前目录下($(pwd))"
  89. sudo cp $INJECT_JS_DIR_ASAR_PATH $CUR_INJECT_ASAR_PATH
  90. if [[ ! -d backup ]];then
  91. mkdir -p ./build/backup
  92. fi
  93. infos "备份 node_modules 至 ./build/backup 目录下\n"
  94. cp $CUR_INJECT_ASAR_PATH ./build/backup
  95. infos "正在解压 node_modues.asar"
  96. node ./asar_modules/node_modules/@electron/asar/bin/asar.js extract $CUR_INJECT_ASAR_PATH $INJECT_JS_DIR_PATH
  97. infos "成功解压至 $(pwd)/node 文件夹中!\n"
  98. infos "正在将 hook.js 添加至 $INJECT_JS_DIR_PATH 文件夹中..."
  99. write_js2file
  100. infos "正在将依赖添加到 $INJECT_JS_DIR_PATH/raven/index.js...\n"
  101. append_require2file
  102. infos "添加 hook.js 成功!"
  103. infos "依赖添加到 $INJECT_JS_PATH/raven/index.js 成功!\n"
  104. infos "正在重新打包 node 文件夹至 node_modules.asar..."
  105. rm $CUR_INJECT_ASAR_PATH
  106. node ./asar_modules/node_modules/@electron/asar/bin/asar.js pack $INJECT_JS_DIR_PATH $CUR_INJECT_ASAR_PATH
  107. infos "打包完成!\n"
  108. warning "###### 正在将 $CUR_INJECT_ASAR_PATH 移动至 $INJECT_JS_DIR_ASAR_PATH ######"
  109. sudo cp $CUR_INJECT_ASAR_PATH $INJECT_JS_DIR_ASAR_PATH
  110. warning "若执行当前脚本后不能正常打开软件的话,则请执行以下命令还原:"
  111. warning "\tcp ./build/backup/node_modules.asar $INJECT_JS_DIR_ASAR_PATH\n"
  112. infos "您的序列号为:"
  113. infos "\tLSGDW2-6M43UN-KHKH2A-D6FDJF"
  114. infos "\tD9KYN9-MCCL2F-59LFPC-NK2CPX\n"
  115. warning "如果激活失败,恐怕您还得安装 rust 环境并使用 license-gen/target/debug/license-gen 生成新的序列号"