解密tuic-yg脚本 原理与实践
wget -N https://gitlab.com/rwkgyg/tuic-yg/raw/main/tuic.sh
下载一看, 第一眼感觉像是乱码.
结构上是这样.
1. 设置一堆变量.
2. eval "一堆变量连接在一起"
所以, 第2部分是脚本的本体.
我们把eval改成echo, 就不会执行, 而是输出.
用sed实现这个替换操作, 再执行脚本, 结果放到 1.sh
bash <(sed 's/eval/echo/' tuic.sh) > 1.sh
看看 1.sh 里面是啥.
原来是这样的结构:
先base64 -d转换一下, 再丢给bash -c跑起来, 然后bash "$@"把后面的参数塞进来.
我们把bash -c改为echo, 就不会执行, 而是输出.
用sed实现这个替换操作, 再执行脚本, 结果放到 2.sh
bash <(sed 's/bash -c/echo/; s/bash "$@"//' 1.sh) > 2.sh
再看看 2.sh, 会发现还是一样的结构.
那就继续用同样的方法, 每次都看一眼结果. 直到看到脚本源码.
bash <(sed 's/bash -c/echo/; s/bash "$@"//' 2.sh) > 3.sh
bash <(sed 's/bash -c/echo/; s/bash "$@"//' 3.sh) > 4.sh
bash <(sed 's/bash -c/echo/; s/bash "$@"//' 4.sh) > 5.sh
把整个过程用脚本表达, 就是这样:
bash <(sed 's/eval/echo/' ${1}) > _tmp.shwhile [[ "$(head _tmp.sh -c 7)" == "bash -c" ]]; dobash <(sed 's/bash -c/echo/; s/bash "$@"//' _tmp.sh) > _tmp1.shmv _tmp1.sh _tmp.shdonemv _tmp.sh ${1}
保存为比如 unpack.sh
用法就是这样:
wget -N https://gitlab.com/rwkgyg/tuic-yg/raw/main/tuic.sh
./unpack.sh tuic.sh
传到了GitLab上.
https://gitlab.com/crazypeace/tuic-yg-unpack
用法
wget -N https://gitlab.com/rwkgyg/tuic-yg/raw/main/tuic.shbash <(curl https://gitlab.com/crazypeace/tuic-yg-unpack/-/raw/main/unpack.sh) tuic.sh
评论
发表评论