Sử dụng SHC để biên dịch script của bạn không bảo vệ họ. Bạn không nhận được bảo mật hơn theo cách này. Mã nhị phân được biên dịch shc giải mã và tải tập lệnh vào bộ nhớ khi bắt đầu. Bạn có thể sau đó, ngay sau khi bạn bắt đầu nhị phân, chỉ cần segfault nó và lấy kịch bản của bạn từ coredump.
Dưới đây là một ví dụ kịch bản ít tên test.sh:
#! /bin/bash
echo "starting script and doing stuff"
sleep 1
echo "finished doing stuff"
Biên dịch nó với SHC:
shc -f test.sh
Bắt đầu nó như là quá trình nền và segfault nó ngay lập tức:
./test.sh.x& (sleep 0.2 && kill -SIGSEGV $!)
ngủ 0,2 sẽ cung cấp cho thời gian đủ nhị phân để khởi động và giải mã tập lệnh gốc. Biến $! chứa pid của quá trình nền cuối cùng bắt đầu, vì vậy chúng ta có thể dễ dàng giết nó với tín hiệu lỗi phân đoạn SIGSEGV (giống như kill -11 $!).
[1] + segmentation fault (core dumped) ./test.sh.x
Bây giờ chúng ta có thể tìm kiếm trên bãi cho kịch bản gốc:
cat core | strings
Chúng ống dữ liệu trong dumpfile đến chuỗi, sau đó sẽ cho chúng ta thấy tất cả các ký tự in trong tập tin và chúng tôi có thể bây giờ xem tập lệnh gốc giữa rác:
...
4.0.37(2)-release
BASH_VERSINFO
BASH_VERSINFO
release
i686-pc-linux-gnu
BASH_EXECUTION_STRING
BASH_EXECUTION_STRING
#! /bin/bash
echo "starting script and doing stuff"
sleep 1
echo "finished doing stuff"
1000
EUID
EUID
1000
...
Nếu tập lệnh là khá lớn, có thể bạn phải điều chỉnh kích thước tệp lõi bằng ulimit. Khá dễ, phải không?
Hy vọng bạn sẽ học bài học của mình và bắt đầu sử dụng hệ thống kiểm soát phiên bản! (git là một trong những tuyệt vời) – Daenyth