解密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.sh
while [[ "$(head _tmp.sh -c 7)" == "bash -c" ]]; do
  bash <(sed 's/bash -c/echo/; s/bash "$@"//' _tmp.sh) > _tmp1.sh
  mv _tmp1.sh _tmp.sh
done
mv _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.sh
bash <(curl https://gitlab.com/crazypeace/tuic-yg-unpack/-/raw/main/unpack.sh) tuic.sh

评论

The Hot3 in Last 30 Days

无服务器 自建短链服务 Url-Shorten-Worker 完整的部署教程

ClouDNS .asia免费域名 托管到CloudFlare开CDN白嫖Websocket WS通道翻墙 / desec.io