Làm cách nào tôi có thể mã hóa hoặc hiển thị tập lệnh shell của mình không thể đọc được?


9

Làm cách nào tôi có thể mã hóa hoặc xáo trộn tập lệnh shell của mình để nó không thể đọc được bằng mắt thường? Một trong hai phương pháp sẽ được chấp nhận, vui lòng cung cấp các bước cụ thể.


Theo tôi, shc có một số thiếu sót: Tôi đã có một dự án đang diễn ra trên github (obash) nơi tôi cố gắng giải quyết những vấn đề này. Bạn có thể muốn xem nếu nó phù hợp với bạn hơn thì shc.
louigi600

Câu trả lời:


11

SHC

Bạn có thể thử các bước được nêu trên trang web này, có tiêu đề: Cách mã hóa Tập lệnh Bash Shell của bạn trên Linux bằng SHC . Bài viết này thảo luận về việc sử dụng một công cụ có tên SHC - Shell script Compiler .

Tài nguyên URL

Đây là một tệp thực thi mà bạn sẽ phải xây dựng bằng gcc / g ++.

Sử dụng

$ ./shc -f random.sh

Khi bạn chạy tập lệnh shell của mình, random.shsẽ được chuyển đổi thành tệp này:

-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x

Đây có phải là hoàn hảo?

Không có phân tích tốt về phương pháp được sử dụng bởi công cụ SHC cho thấy rằng nó không quá mạnh và có thể bị phá vỡ nếu bạn biết bạn đang làm gì. Bài viết đã được đăng trên trang web linuxjournal.com, có tiêu đề: Paranoid Penguin - Hạn chế của shc, Tiện ích mã hóa Shell .

LƯU Ý: Các lớp công cụ này có thể được mô tả tốt hơn dưới dạng obfuscators.


@sim Cảm ơn. Có cách nào để giải mã tập lệnh đó không ???
Ram

@Ram - vâng, điều này không có nghĩa là hoàn hảo. Bạn đang cố gắng che giấu điều gì? Thông tin người dùng / mật khẩu hoặc chỉ là cách tập lệnh hoạt động?
slm

@sim tôi đang cố gắng che giấu kịch bản hoạt động như thế nào?
Ram

@Ram - OK có lẽ nó ổn vì điều đó, tôi không khuyên bạn nên thử ẩn mật khẩu. Khi tôi dùng thử ứng dụng này, nó hoạt động hơi kỳ lạ trên máy tính của tôi. Tôi đã thử nó, nhưng các tệp thực thi kết quả đã khởi chạy như thể chúng được làm nền và tôi phải thực hiện lệnh fgđể đưa nó vào khu vực trước và sau đó nó hoạt động tốt. Tôi vẫn đang tìm giải pháp thay thế.
slm

9
Mặc dù tên, SHC không mã hóa tập lệnh theo bất kỳ cách có ý nghĩa. Mã hóa ngụ ý rằng nó được giải mã trước khi sử dụng. Nếu tập lệnh có thể được thực thi, nó phải được giải mã trước và có thể được trích xuất tại thời điểm đó. Chuyển đổi một chương trình để làm cho nó khó hiểu hơn trong khi không thay đổi hành vi của nó được gọi là obfuscation. Nó rất rất rất hiếm khi đáng giá, và đối với một kịch bản shell, đó là sự đánh giá quá cao về tính hữu dụng của nó.
Gilles 'SO- ngừng trở nên xấu xa'

29

Nếu bạn muốn mã hóa tập lệnh shell, hãy sử dụng GPG . Bất cứ ai muốn chạy tập lệnh của bạn tất nhiên sẽ phải giải mã nó trước.

Nếu bạn muốn ai đó có thể chạy tập lệnh nhưng không đọc được tập lệnh thì đó là một vấn đề hoàn toàn khác không liên quan đến mã hóa. Nó được gọi là obfuscation .

Nếu bạn có mật khẩu hoặc thông tin bí mật khác trong tập lệnh đó, sẽ không có thông tin giấu giếm nào che giấu nó. Sớm hay muộn tập lệnh sẽ sử dụng mật khẩu để làm một cái gì đó và tại thời điểm đó, mật khẩu sẽ xuất hiện rõ ràng cho bất cứ ai tìm kiếm nó.

Nếu bạn muốn ẩn cách kịch bản của bạn hoạt động vì bạn sợ ai đó sẽ sao chép nó, hãy quên nó đi. Không ai quan tâm.

Nếu bạn muốn ẩn tập lệnh của mình vì bạn xấu hổ về chất lượng của nó, hãy sửa nó.

Nếu bạn muốn ẩn cách tập lệnh của bạn hoạt động vì bạn muốn ẩn những gì nó làm, thì không thể thực hiện được. Ai đó có thể nhìn vào kịch bản của bạn trong khi nó được thực thi và xem nó đang làm gì.

Nếu bạn đã đọc đến đó mà vẫn muốn mã hóa lại mã script của bạn, bạn đang hiểu nhầm điều gì đó quan trọng. Đừng gửi tập lệnh của bạn cho bất kỳ ai hoặc gửi tập lệnh đó bằng văn bản thuần túy.


4
+1 cho 'không ai quan tâm'. ngoại trừ một số người quan tâm - tôi sẽ xem xét một kịch bản shell bị che khuất và nghĩ rằng "không có cách nào tôi sẽ chạy nó trên hệ thống của mình".
cas

1
Xin lỗi, mọi người quan tâm và nó rất quan trọng. Bạn có một quan điểm và một quan điểm thay thế tồn tại. Cả hai sẽ có người nhận nó. Trong khi đó, câu trả lời dưới đây hoạt động tốt cho tôi để bắt đầu. Hầu hết thời gian chúng tôi muốn bảo vệ khỏi các tin tặc / người dùng thông thường. Hiểu rõ rằng các tin tặc xác định sẽ phá vỡ mọi thứ.
Anil

@anil Bạn chỉ bảo vệ chống lại những người không đủ thông minh hoặc có năng lực để làm bất cứ điều gì với mã nguồn. Nó có thể làm cho bạn cảm thấy tốt hơn, nhưng nó không làm cho bạn an toàn hơn.
Gilles 'SO- ngừng trở nên xấu xa'

@gilles có lẽ tôi đọc nhầm bạn. Tôi thực sự đang cố gắng bảo vệ chống lại những người có thẩm quyền làm điều gì đó với mã nguồn nếu họ có nó (mã nguồn = nội dung của tập lệnh). Chỉ những người này có thể không biết cách hack một tập tin được mã hóa mà không gặp nhiều rắc rối để tìm ra cách. Chống lại quyết tâm thực sự _ Tôi đồng ý không có phòng thủ thực sự tốt.
anil

11

Có được điều này trong khi tìm kiếm trên internet, lịch sự Claudio P.

  1. Viết kịch bản của bạn (script-base.sh)

    #!/bin/sh 
    echo "Hello World" 
  2. Mã hóa tập lệnh của bạn (cung cấp mật khẩu):

    openssl enc -e -aes-256-cbc -a -in script-base.sh > script-enc 
  3. Viết de Wrapper (script-final.sh):

    #!/bin/sh 
    openssl enc -d -aes-256-cbc -a -in script-enc | sh - 
  4. Chạy "script-final.sh", nhập mật khẩu và tập lệnh sẽ chạy mà không cần viết tập lệnh văn bản đơn giản trên đĩa.


1

Về cơ bản, bạn có thể làm xáo trộn nhưng không biên dịch tập lệnh của bạn. Lý do đơn giản là các tập lệnh shell được giải thích các lệnh riêng lẻ cần được thực thi từng cái một bởi hệ thống bạn có thể thấy các lệnh đó khi chúng được thực thi lần lượt bởi hệ thống với sh -xcờ (và có lẽ cả -v cờ)

Đối với hầu hết các lập trình viên sẽ đủ để hiểu những gì đang xảy ra.

Bạn có thể làm xáo trộn các biến và luồng chung nếu bạn muốn, nhưng bạn không thể làm xáo trộn các lệnh vô định được thực thi bởi chương trình của bạn - mà đối với các tập lệnh shell thường là tất cả chúng.

Giải pháp đơn giản nhất có lẽ là viết lại tập lệnh shell bằng ngôn ngữ được biên dịch như C.


1
Ngay cả một nhị phân được biên dịch cũng có thể được tháo rời và thiết kế ngược nếu một trong hai được xác định đủ.
Joseph R.

3
Tất cả mọi thứ thực thi có thể được thiết kế ngược. Yêu cầu ở đây là nó không thể đọc được bằng mắt thường
Thorbjørn Ravn Andersen

Tôi biết. Tôi chỉ để lại một ghi chú cho độc giả tương lai.
Joseph R.

-2

hãy thử gửi tập lệnh của bạn đến trang web này nếu bạn muốn ẩn tập lệnh đó khỏi chế độ xem công khai.

trong khi nhiều người có thể không đồng ý với ý tưởng mã hóa hoặc làm xáo trộn mã nguồn của tập lệnh được viết bằng ngôn ngữ diễn giải, tôi hiểu tại sao mọi người muốn làm điều này.

như một người đã đánh cắp tác phẩm của mình nhiều lần, tôi chỉ đơn giản là không quan tâm nếu "obfuscation" hay "mã hóa" là một điều cấm kỵ. miễn là tập lệnh của tôi được bảo vệ và nó hoạt động như trước khi mã hóa, tôi khá hài lòng. tôi sẽ không bao giờ cho phép người khác lấy ý tưởng của mình và chạy theo nó. và không, viết kịch bản của tôi bằng ngôn ngữ được biên dịch không phải là bất kỳ tùy chọn nào. Tôi không biết làm thế nào để.

Dù sao, nếu bạn không muốn sử dụng trang web được đề cập ở trên, hãy thử phiên bản mới nhất của shc. Tôi tin rằng họ đã cập nhật nó trong github để giải quyết nhiều vấn đề bảo mật mà những người khác đã đề cập. nhập thông tin sau vào google " shc github " và bạn sẽ thấy một loạt các tùy chọn có sẵn mà bạn có thể thử.

chúc may mắn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.