解密rwkgyg-CFwarp脚本 原理与实践
wget -N https://gitlab.com/rwkgyg/CFwarp/raw/main/CFwarp.sh
看第一眼, 就是上次的加密方法.
用上次的方法解密,
bash <(curl https://gitlab.com/crazypeace/tuic-yg-unpack/-/raw/main/unpack.sh) CFwarp.sh
发现脚本为分2部分.
前面部分是安装 bzip2, 后面部分是下载这个脚本并执行
wget -qN https://gitlab.com/rwkgyg/CFwarp/raw/main/1CFwarp.sh
那么就是说, 这个 1CFwarp.sh 才是本体.
下载了打开看一看.
这个 1CFwarp.sh 是用 bz2-shell 项目"加密"的.
原理是用bzip2把原脚本进行压缩, 在执行时再解压缩.
脚本分为2部分, 前面部分是通用的解压流程, 后面部分是被bzip2压缩过的数据.
经过阅读代码, 可以发现, 第67行是为解压后的脚本添加可执行权限, 第69行是执行解压后的脚本.
那么, 我们的思路就是, 把这个"解压后的脚本"拷贝出来就好了呀.在第67行添加
cp "$bztmp" /tmp/CFwarp-unpack.sh
注意, bash把两个语句写在同一行, 用 ; 号分隔
当然, 你可以把用于实际执行的第69行注释掉, 这样就只解密不执行了.好了, 我们执行一下 1CFwarp.sh 看看.嗯, 看到了 /tmp/CFwarp-unpack.sh 文件, 内容就是"解密"后的原始脚本呀.
把整个过程用脚本表达, 就是这样:
bash <(sed '69s@^@#@; 67s@$@\; cp "$bztmp" /tmp/_tmp.sh@' ${1})
mv /tmp/_tmp.sh ${1}
这其中, 使用了单引号' 字符串, 这样其中$的表达就不会被当作变量, 而是原样; 而且 使用了@作为sed的分隔符, 因为考虑到需要用到文件路径的/, 还有注释符号#.
并且, 这其中有一个; 为了不被当作sed多个语句并列的意义, 需要用\转义
把这样的脚本保存为 unpack.sh
然后执行
bash unpack.sh 1CFwarp.sh
发现报错, bzip2 无法解压.
想了一想. 有可能是因为二进制文件内容的原因. 查了一圈, sed和perl都是处理文本的, head tail cat 可以处理二进制.于是先用head和tail把前后两部分 分开, 再用sed处理前半部分, 然后再合起来用bash执行.
脚本修改为
head -n 74 ${1} | sed '69s@^@#@' | sed '67s@$@\; cp "$bztmp" /tmp/_tmp.sh@' > _part1tail -n +75 ${1} > _part2cat _part1 _part2 > _mixbash _mixmv /tmp/_tmp.sh ${1}
测试正常了.
======
传到了Gitlab上.
https://gitlab.com/crazypeace/cfwarp-unpack
用法
wget -qN https://gitlab.com/rwkgyg/CFwarp/raw/main/1CFwarp.shbash <(curl https://gitlab.com/crazypeace/cfwarp-unpack/-/raw/main/unpack.sh) 1CFwarp.sh
评论
发表评论