Trở về
Tham gia nhóm m Autoit đ đưc hưng dn và gii đáp trc tiếp : http://fb.com/groups/autoitscript
Tin tức công nghệ  -  Thủ thuật lập trình

Friday, October 11, 2013

Bảo vệ, che giấu, phòng chống dịch ngược mã nguồn Autoit


Toàn màn hìnhIn bài viết

 

I. Giới thiệu những thuật ngữ cần biết:

Compiler : là trình biên dịch , có nhiệm vụ chuyển mã nguồn (source code) của các ngôn ngữ lập trình thành mã máy (machine code) hoặc java byte code (đối với ngôn ngữ java) để thực thi với phần mở rộng của tập tin thực thi là *.exe, *.jar ...

Decompiler : ngược lại với compiler , decompiler là thuật ngữ chỉ các công cụ có khả năng dịch ngược từ mã máy sang mã nguồn hoặc mã assembly, decompiler là công cụ không thể thiếu đối với Cracker.

Debug : là kỹ thuật chuẩn đoán lỗi trong quá trình thực thi và biên dịch chương trình, phiên bản Autoit mới nhất có khả năng chặn debug từ các trình decompiler như obly debug , assembly debug ...

Cruncher: Kỹ thuật cắt tỉa và lọai bỏ dư thừa trong mã nguồn
Rất đơn giản, khi bạn viết mã, có rất nhiều thứ dư thừa (nhưng cực kỳ hữu ích) như: các lời giải thích (comment), các khoảng trắng, các đọan mã được tinh chỉnh giống như một đọan văn được trình bày cẩn thận. Để làm gì? Để bạn dễ đọc, dễ viết mã hơn. Nhưng khi dịch mã (cả thông dịch lẫn biên dịch) chúng là những ký tự vô nghĩa đối với chương trình dịch và chương trình dịch sẽ tự động lọai bỏ sự dư thừa đó. Nếu bạn lọai bỏ chúng trước rồi cho dịch mã thì trình dịch sẽ đỡ tốn thời gian làm công việc đó và tất nhiên sẽ chạy nhanh hơn.

Obfuscator: Kỹ thuật làm rối mã
Kỹ thuật này giống như mã hóa source code dạng thô sơ vậy. Mục đích là để bảo vệ mã nguồn và tránh bị người khác "vô tình dùng mất mà chẳng biết làm cách nào". Kỹ thuật này thay đổi tên hàm, tên lớp, tên biến, ... hoặc chia nhỏ mã nguồn thành các đọan rất khó đọc để người khác không thể đọc được. Sẽ không có bất cứ lời giải thích nào trong mã nguồn sau khi đã thay đổi. Nhưng có một số thứ không thay đổi: các từ khóa (keyword) và cấu trúc lệnh của ngôn ngữ lập trình. Obfuscator biến mã nguồn của bạn trở thành một "ma trận" chuỗi và số, khá an toàn trước những chuyên viên "đánh cắp mã nguồn & thay đổi bản quyền".

Packer: là công cụ nén - bảo vệ tập tin thực thi . Packer được sử dụng để đóng gói mã nguồn Autoit là UPX. Packer không có khả năng bảo vệ mã nguồn Autoit mà chỉ có khả năng đóng gói và che giấu tập tin thực thi chương trình. Vì bản chất của packer mà một số trình AntiVirus sẽ nhận nhầm tập tin được pack là trojan (horse,pack ...)

Unpacker: ngược lại với packer, unpacker là công cụ giải nén, trích xuất tập tin thực thi từ packed file.


II.Một số công cụ dịch ngược mã nguồn Autoit :

  • myAutToExe2.12

  • Exe2Aut

  • OllyDbg



III.Điểm qua một số phương pháp bảo vệ mã nguồn Autoit:

1. Sử dụng Packer:

    Một số Packer và link download :


Name Latest stable Software license x86-64 support
.netshrink 2.5 (December 4, 2012 (2012-12-04))[1] Proprietary Yes
Armadillo Packer 8.60 (July 6, 2011 (2011-07-06)) Proprietary Yes
ASPack 2.29 (August 3, 2011 (2011-08-03)) Proprietary ?
ASPR (ASProtect) 1.64 (September 1, 2011 (2011-09-01)) Proprietary ?
BoxedApp Packer 2.2 (June 16, 2009 (2009-06-16))[2] Proprietary Yes
CExe 1.0b (July 20, 2001 (2001-07-20)) GPL No
dotBundle 1.3 (April 4, 2013 (2013-04-04))[3] Proprietary Yes
Enigma Protector 3.80 (August 2, 2012 (2012-08-02))[4] Proprietary Yes
EXE Bundle 3.11 (January 7, 2011 (2011-01-07))[5] Proprietary ?
EXE Stealth 4.14 (June 29, 2011 (2011-06-29))[6] Proprietary ?
eXPressor 1.8.0.1 (January 14, 2010 (2010-01-14)) Proprietary ?
FSG 2.0 (Unknown) Freeware No
kkrunchy src 0.23a4 (Unknown) BSD No
MEW 1.1 (Unknown) Freeware No
MPRESS 2.19 (January 2, 2012 (2012-01-02)) Freeware Yes
Obsidium 1.4.6 (July 18, 2012 (2012-07-18))[7] Proprietary Yes
PELock 1.0.694 (January 23, 2012 (2012-01-23))[8] Proprietary No
PESpin 1.33 (May 3, 2011 (2011-05-03)) Freeware Yes
RLPack Basic 1.21 (October 31, 2008 (2008-10-31)) GPL No
Smart Packer Pro 1.9.2 (July 14, 2013 (2013-07-14)) Proprietary Yes
Themida 2.2.1.0 (July 25, 2012 (2012-07-25)) Proprietary ?
UPX 3.09 (February 18, 2013 (2013-02-18)) GPL No
VMProtect 2.1 (September 26, 2011 (2011-09-26)) Proprietary Yes
XComp/XPack 0.98 (February 18, 2007 (2007-02-18)) Freeware No


Và một số packer khác :




Nhược điểm khi sử dụng Packer : rất dễ bị các trình Antivirus nhận nhầm và tiêu diệt, khả năng bảo vệ thấp, chỉ qua mặt được một số ít người dùng và hầu như không thể qua mặt được các decoder căn bản.

2. Sử dụng Obfuscator mặc định của Autoit

Obfuscator này được tích hợp sẵn trong gói Scite4Autoit, các bạn tải từ trang chủ SCITE.

Ưu điểm : Bảo vệ code khá tốt, tránh được tình trang ăn cắp bản quyền hay thay đổi nội dung mã nguồn
Nhược điểm : Giới hạn số dòng trong mã nguồn và không hỗ trợ tiếng việt.

3. Kết hợp Autoit với các ngôn ngữ lập trình khác :

Các bạn có thể "nhúng" Autoit vào các ngôn ngữ lập trình khác khó bị decode hơn (C#,C++,java...) thông qua thư viện liên kết động AutoItX3.dll

Ưu điểm : Khá an toàn

Nhược điểm : khá phức tạp, số tập lệnh hỗ trợ rất ít (hầu hết chỉ là những lệnh về windows, mouse và keyboard), không hỗ trợ UDF ...

Ngoài các phương pháp trên, mình sẽ giới thiệu phần mềm Autoit Shadow Obfuscator và Unicode Obfuscator Parser do mình tự viết dùng để obfuscate mà nguồn và hợp thức hóa các ký tự tiếng việt để sử dụng với Obfuscator mặc định

IV. Giới thiệu  Autoit Shadow Obfuscator và Unicode Obfuscator Parser :

1.Autoit Shadow Obfuscator :

Giao diện chương trình (nền DOS) :



Chương trình này sử dụng thuật toán mã hóa riêng chứ không sử dụng obfuscator mặc định của Autoit nên tất nhiên sẽ phát sinh một số lỗi không mong muốn, mình sẽ khắc phục và chỉnh sửa sau :D
Các bạn nhập đường dẫn tập tin au3 vào khung chương trình hoặc kéo thả mã nguồn au3 vào tập tin exe của chương trình để hoàn tất mã hóa :D.

Autoit Shadow Obfuscator


2. Unicode Obfuscator Parser

Giao diện chương trình (GUI) :




Chương trình này sử dụng Obfuscator mặc định nên sẽ không phát sinh lỗi nào, nhưng sẽ bị giới hạn số dòng trong mã nguồn :D
Các bạn kéo thả mã nguồn au3 vào GUI của chương trình để hoàn tất mã hóa :D.

Unicode Obfuscator Parser



Ở bài sau mình sẽ hướng dẫn các bạn cách bảo vệ mã nguồn .NET (C#,VB) : http://yagarai.blogspot.com/2014/01/phong-chong-dich-nguoc-ma-nguon-net-cvb.html

Chào thân ái! ^^