1. Trang chủ
  2. » Tất cả

Công cụ giải mã javascript de4js

40 125 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Công cụ Giải mã JavaScript - de4js
Tác giả Nhà Thành
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành An Toàn Mạng
Thể loại Báo cáo tiểu luận
Định dạng
Số trang 40
Dung lượng 1,33 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • I. Giới thiệu, lịch sử hình thành (8)
    • 1. Javascript (8)
      • 1.1. Javascript là gì? (8)
      • 1.2. Lịch sử hình thành JavaScript (8)
      • 1.3. Cách hoạt động của JavaScript (9)
      • 1.4. Điểm khác biệt giữa các ngôn ngữ lập trình khác và JavaScript là gì? (10)
      • 1.5. Khuyết điểm của JavaScript (10)
      • 1.6. Tại sao phải làm xáo trộn (Obfuscation) mã javascript (11)
    • 2. Các phương pháp để mã hóa code javascript (12)
      • 2.1. Rút gọn code (Minified Code) (13)
      • 2.2. Tối ưu hóa code (Optimized Code) (13)
      • 2.3. Nén code (Packing Code) (13)
      • 2.4. Obfuscated Code (14)
    • 3. Phương pháp giải mã code javascript bị mã hóa (19)
      • 3.1. Giải mã bị xáo trộn (Deobfuscation code) (20)
      • 3.2. Giải nén (Unpacking code) (20)
      • 3.3. Giải mã (Decoding code) (20)
  • II. Hướng dẫn cài đặt và sử dụng DE4JS (21)
    • 1. Công cụ De4js (21)
    • 2. Cài đặt De4js (22)
      • 2.1. Cài đặt trên Kali Linux (22)
      • 2.2. Cài đặt trên BlackArch (25)
      • 2.3. Cài đặt trên Debian, Linux Mint, Ubuntu (26)
      • 2.4. Sử dụng trên online website (26)
    • 3. Cách sử dụng De4js (27)
      • 3.1. Khởi tạo công cụ (27)
      • 3.2. Cách sử dụng (28)
  • III. Bài lab (29)
    • 1. Demo lab 1: Giải mã đoạn mã bị làm rối bằng Javascript Obfuscator (29)
    • 2. Demo lab 2: Giải mã javascript để gỡ bỏ bản quyền chân trang trên một số nền tảng web template (31)
  • IV. Kết luận (39)
  • V. Tài liệu tham khảo (40)

Nội dung

Do đó, để khắc phục và hạn chế các khuyết - nhược điểm này, ngưởi ta sử dụng một số phương pháp như: rút gọn code minify code, đóng gói code packer code hoặc mã hóa code obfuscated code

Giới thiệu, lịch sử hình thành

Javascript

JavaScript là một ngôn ngữ lập trình thông dịch phổ biến, phát triển từ các ý niệm nguyên mẫu và sử dụng rộng rãi cho cả phía người dùng lẫn phía máy chủ như Node.js Được phát triển bởi Brendan Eich tại Netscape, JavaScript ban đầu mang tên Mocha, sau đó đổi thành LiveScript rồi cuối cùng là JavaScript Ngôn ngữ này có cú pháp tương tự Java và C, nhưng gần hơn với ngôn ngữ Self Định dạng tệp mã nguồn JavaScript thường có phần mở rộng là js, giúp phân biệt với các ngôn ngữ lập trình khác.

JavaScript nhanh chóng trở thành ngôn ngữ chính cho phát triển web, cung cấp năng lượng cho gần như tất cả các trang web hiện nay Sự phát triển của các framework JavaScript đa nền tảng như React Native và Ionic cho phép các nhà phát triển xây dựng ứng dụng di động và máy tính để bàn bằng cách sử dụng cơ sở mã JavaScript chung.

Hình 1 Tỉ lệ sử dụng JavaScript

Các công ty trong danh sách Fortune 500 đều sử dụng JavaScript để phát triển ứng dụng của họ, thể hiện rõ vai trò quan trọng của ngôn ngữ này trong lĩnh vực công nghiệp công nghệ Hiện nay, JavaScript đang cung cấp năng lượng cho các ứng dụng quan trọng ở nhiều lĩnh vực khác nhau như ngân hàng di động, thương mại điện tử và dịch vụ phát trực tuyến Nhờ đó, JavaScript trở thành một yếu tố không thể thiếu trong việc nâng cao trải nghiệm người dùng và tối ưu hóa hiệu suất hệ thống.

1.2 Lịch sử hình thành JavaScript

JavaScript bắt đầu ra đời vào năm 1995 tại Netscape Communications nhằm nâng cao trải nghiệm người dùng khi trình duyệt web Các nhà phát triển của Netscape nhận thấy việc thêm một "ngôn ngữ gắn kết" sẽ giúp tăng cường nội dung trên website, và đã mời Brendan Eich nhúng ngôn ngữ Scheme vào dự án Do thời điểm đó Java đang trở thành ngôn ngữ phổ biến và mới mẻ trong lĩnh vực phát triển web, họ đã quyết định làm cho JavaScript gần gũi hơn với cú pháp của Java để dễ dàng tiếp cận Kết quả là JavaScript mang đặc điểm của Scheme, hướng đối tượng của SmallTalk và cú pháp của Java, ban đầu có tên là Mocha vào tháng 5 năm 1995, sau đó đổi thành LiveScript vào tháng 9 cùng năm, và cuối cùng được gọi là JavaScript vào tháng 12 năm 1995.

MA CÔNG THÀNH – B18AT03 TRANG 9

Năm 1996, JavaScript chính thức được gửi đến ECMA International để hoàn thiện thành một chuẩn kỹ thuật Vào tháng 6 năm 1997, đặc tính kỹ thuật chính thức đầu tiên của JavaScript, ECMA-262, đã được phát hành, đánh dấu bước ngoặt quan trọng trong việc tiêu chuẩn hóa ngôn ngữ này Phiên bản mới nhất của JavaScript, ECMAScript 2017, được ra mắt vào tháng 6 năm 2017, mang đến nhiều cập nhật và cải tiến cho ngôn ngữ lập trình này.

1.3 Cách hoạt động của JavaScript

Khi trình duyệt web tải một trang web, trình phân tích cú pháp HTML bắt đầu phân tích mã HTML và tạo cấu trúc DOM Mỗi khi gặp chỉ thị CSS hoặc JavaScript (bao gồm mã inline hoặc tải từ tệp bên ngoài), chúng sẽ được chuyển cho trình phân tích CSS hoặc động cơ JavaScript theo yêu cầu Động cơ JavaScript tải các tệp JavaScript bên ngoài và mã inline nhưng không thực thi ngay lập tức, chờ cho quá trình phân tích HTML và CSS hoàn tất Khi tất cả quá trình này xong, mã JavaScript được thực thi theo thứ tự xuất hiện trên trang, giúp xác định biến, gọi hàm và xử lý sự kiện Các hoạt động này dẫn đến việc DOM được cập nhật và hiển thị ngay lập tức trên trình duyệt, đảm bảo trải nghiệm người dùng liền mạch.

Hình 2 Cách JavaScript làm việc trên trang web

MA CÔNG THÀNH – B18AT03 TRANG 10

1.4 Điểm khác biệt giữa các ngôn ngữ lập trình khác và JavaScript là gì?

JavaScript là một trong những ngôn ngữ lập trình phổ biến nhất nhờ tính linh hoạt vượt trội Nhiều lập trình viên ưu tiên chọn JavaScript làm ngôn ngữ chính của họ, chỉ sử dụng các ngôn ngữ khác khi cần những tính năng đặc biệt Điều này chứng tỏ sức hấp dẫn và khả năng mở rộng của JavaScript trong lĩnh vực lập trình hiện đại.

- Hãy xem qua các ngôn ngữ lập trình phổ biến nhất bên dưới:

Ngôn ngữ lập trình Đặc điểm

JavaScript (JS) giúp tăng tính tương tác cho website bằng cách chạy trực tiếp trên trình duyệt của người dùng Script này thường sử dụng thư viện của bên thứ ba, cho phép thêm nhiều chức năng mới mà không cần phải lập trình từ đầu Nhờ đó, JavaScript nâng cao trải nghiệm người dùng, tối ưu hóa hiệu suất và mở rộng khả năng của website một cách dễ dàng và linh hoạt.

HTML, viết tắt của "Hypertext Markup Language," là ngôn ngữ lập trình phổ biến hàng đầu used để xây dựng các thành phần chính của trang web Các thẻ HTML như

dùng để đánh dấu đoạn văn, giúp cấu trúc nội dung rõ ràng và thân thiện với các công cụ tìm kiếm Việc hiểu và áp dụng đúng các thẻ HTML là bước quan trọng để tối ưu hóa SEO và nâng cao trải nghiệm người dùng trên website.

PHP là ngôn ngữ phía server, khác với JavaScript chạy trên máy client

PHP thường được sử dụng trong các hệ quản trị nội dung như WordPress để xây dựng các trang web động và hiệu quả Bên cạnh đó, PHP còn phổ biến trong lập trình back-end, giúp tạo ra các kênh truyền thông tin giữa máy chủ và database một cách tối ưu Nhờ tính linh hoạt và mạnh mẽ của PHP, các nhà phát triển có thể xây dựng các hệ thống quản lý nội dung và ứng dụng web hiệu quả, đáp ứng nhu cầu của người dùng cuối.

CSS, viết tắt của "Cascading Style Sheets", là công cụ giúp webmaster xác định và định nghĩa các kiểu dáng cho trang web Thay vì phải chỉnh sửa thủ công từng yếu tố trong HTML, CSS cho phép áp dụng styling với tính nhất quán và tiết kiệm thời gian Việc sử dụng CSS giúp tránh lặp lại mã và dễ dàng duy trì, tối ưu hoá trải nghiệm người dùng trên trang web của bạn.

Bảng 1 Bảng so sánh JS với một số ngôn ngữ lập trình phổ biến

Ngôn ngữ lập trình có vai trò quan trọng trong việc xây dựng trang web, với HTML định hình kiến trúc căn nhà, còn CSS giúp trang trí nội thất để tạo nên một không gian đẹp mắt hơn JavaScript thêm yếu tố tương tác sinh động như mở cửa hay bật đèn, mang lại trải nghiệm phong phú cho người dùng Mặc dù có thể xây dựng website mà không cần JavaScript, nhưng điều này có thể khiến trang web trông như các trang web từ những năm 1995, kém sinh động và chưa tối ưu.

Mọi ngôn ngữ lập trình đều có những khuyết điểm, đặc biệt khi phát triển đến mức như JavaScript, nó thu hút sự chú ý của hacker và scammers luôn tìm kiếm các lỗ hổng bảo mật để lợi dụng Một số điểm yếu của JavaScript bao gồm các lỗ hổng bảo mật và lỗi mã nguồn có thể bị khai thác để tấn công hệ thống Nguyên nhân chính là do sự phổ biến và khả năng mở rộng của JavaScript, khiến nó dễ bị tấn công hơn Việc hiểu rõ các hạn chế này giúp các nhà phát triển xây dựng các giải pháp an toàn hơn khi sử dụng ngôn ngữ lập trình này.

❖ Có thể được dùng để thực thi mã độc trên máy tính của người dùng;

❖ Nhiều khi không được hỗ trợ trên mọi trình duyệt;

MA CÔNG THÀNH – B18AT03 TRANG 11

❖ Có thể bị triển khai khác nhau tùy từng thiết bị dẫn đến việc không đồng nhất

1.6 Tại sao phải làm xáo trộn (Obfuscation) mã javascript:

JavaScript là một ngôn ngữ thông dịch yêu cầu trình duyệt có trình thông dịch để đọc, diễn giải và thực thi mã Điều này cho phép người dùng dễ dàng sử dụng công cụ gỡ lỗi trình duyệt để xem, đọc hoặc chỉnh sửa mã JavaScript một cách thuận tiện, giúp phát hiện và khắc phục lỗi hiệu quả.

Trong ví dụ dưới đây, có thể dễ dàng nhận thấy ai đó có thể tiếp cận vào logic mã đằng sau bàn phím ảo, nơi khách hàng ngân hàng nhập mật khẩu của họ, gây ra mối đe dọa về an ninh thông tin và quyền riêng tư khách hàng.

Hình 3 Ví dụ không dùng obfuscation

Các phương pháp để mã hóa code javascript

- Khi download các bộ thư viện trên Internet (đặc biệt là thư viện Jquery,

Trong lập trình JavaScript, đôi khi chúng ta sẽ nhận được những file nhỏ với nội dung bị minify, khiến cho mã nguồn trở nên khó hiểu và không rõ nghĩa Đây chính là kết quả của các kỹ thuật Obfuscated code, nhằm làm khó đọc và phân tích mã nguồn nhằm bảo vệ hoặc che giấu nội dung thực sự của phần mềm.

JavaScript obfuscation là quá trình biến đổi mã JavaScript đơn giản thành một phiên bản gần như không thể đọc hiểu bằng con người và rất khó bị dịch ngược Công nghệ này giúp bảo vệ mã nguồn khỏi việc bị sao chép hoặc phân tích trái phép, đồng thời tăng cường khả năng bảo mật cho các ứng dụng web Việc sử dụng JavaScript obfuscation là một phương pháp hiệu quả để làm khó các hacker và kẻ xâm nhập, đảm bảo an toàn cho dữ liệu và hệ thống của bạn.

Hình 4 Obfuscation đoạn mã JavaScript

- Môt số phương pháp phổ biến để mã hóa code javascript:

• Rút gọn code (Minified Code)

• Tối ưu hóa code (Optimized Code)

• Xáo trộn nội dung code (Obfuscated Code)

MA CÔNG THÀNH – B18AT03 TRANG 13

2.1 Rút gọn code (Minified Code):

Việc triển khai các tệp JavaScript lớn, có kích thước từ vài KB trở lên, trực tiếp trên website sẽ gây ảnh hưởng tiêu cực đến hiệu quả về mặt băng thông Do đó, tối ưu hóa và chia nhỏ các tệp JavaScript là cần thiết để đảm bảo website chạy mượt mà và tiết kiệm tài nguyên mạng.

Trong bài viết này, chúng tôi nhấn mạnh rằng mã Javascript thường chứa nhiều ký tự không cần thiết như khoảng trắng, ký tự xuống dòng và comment, những yếu tố này chỉ làm tăng kích thước file và ảnh hưởng đến hiệu suất tải trang Do đó, việc tối ưu code bằng cách loại bỏ những ký tự không cần thiết là rất quan trọng để giảm thời gian tải trang và nâng cao trải nghiệm người dùng Việc nén và thu gọn mã Javascript giúp giảm dung lượng file, giúp website hoạt động mượt mà hơn trên các trình duyệt khác nhau.

- Nhu cầu đó dẫn đến khái niệm Minify hay mình gọi là rút gọn code

Minify là quá trình tự động loại bỏ các ký tự không cần thiết và giảm kích thước файл, giúp kích thước file giảm khoảng 50-60% so với ban đầu, tối ưu hóa cho triển khai thực tế Nhiều thư viện JavaScript và plugin cung cấp cả phiên bản đầy đủ và phiên bản đã được minify, trong đó phiên bản min là phiên bản đã qua quá trình nén nhỏ gọn, giúp tăng hiệu suất tải trang và giảm thiểu dung lượng lưu trữ.

- Và phiên bản Min thường chỉ có 1 line

- Dưới đây là 1 ví dụ cho thấy 1 đoạn code đã được minify function doSomething(b,a){return b+a} alert(344,999)

Có nhiều phương pháp để minify code, bao gồm cả làm thủ công hoặc sử dụng tự động Để minify tự động, có nhiều thư viện và phần mềm nổi bật như Minify (PHP5), JSMIN (các ngôn ngữ như C#, Java, JavaScript, Perl, PHP, Python, OCAML, Ruby), YUI Compressor của Yahoo (Java), Dojo ShrinkSafe (Java), và Packer của Dean Edwards (JavaScript, NET, PHP, Perl), giúp tối ưu hóa mã nguồn một cách nhanh chóng và hiệu quả.

2.2 Tối ưu hóa code (Optimized Code):

Trình tối ưu hóa mã chủ yếu nhằm nâng cao hiệu suất của mã, bao gồm tốc độ thực thi và sử dụng bộ nhớ của ứng dụng Tuy nhiên, đôi khi quá trình tối ưu hóa có thể khiến mã trở nên khó đọc hơn, gây khó khăn trong việc bảo trì và hiểu rõ logic của chương trình Mặc dù giúp cải thiện hiệu suất, nhưng tối ưu hóa không cung cấp sự bảo vệ chống lại các lỗ hổng bảo mật hoặc lỗi mã nguồn.

- Trình nén và đóng gói mã giảm kích thước mã bằng cách sử dụng kỹ thuật mã hóa và đóng gói nhưng chúng cũng không bảo vệ mã nguồn

Khi nói về minify, thường đi kèm với kỹ thuật Javascript Packer, một phương pháp rút gọn code theo phong cách khác Kỹ thuật này sử dụng hàm eval() để thực thi mã, khiến đoạn code thay đổi về thứ tự và ký tự, giúp làm giảm kích thước mã nguồn nhưng đồng thời làm cho code trở nên khó đọc hơn.

- Không khuyến khích sử dụng kỹ thuật packer để làm Minify code

MA CÔNG THÀNH – B18AT03 TRANG 14

- Obfuscate là 1 kỹ thuật trong nhóm minify như cũng được tách riêng ra để nói bởi mục đích và tính chất của nó

- Obfuscate nói một cách dễ hiểu là “mã hóa giả” nội dung code Kỹ thuật này áp dụng cho nhiều ngôn ngữ chứ không phải chỉ riêng cho Javascript

Trong các trường hợp triển khai mã nguồn ra bên ngoài, việc chia sẻ source là điều không thể tránh khỏi Áp dụng kỹ thuật Obfuscate giúp đổi tên các hàm và biến thành các ký tự đơn giản như a(), b(), var c…, làm phần mềm khó hiểu và khó Reverse Engineering, ngay cả khi người khác có access vào mã nguồn của bạn Tuy nhiên, cần lưu ý rằng kỹ thuật này có thể làm thay đổi cấu trúc mã nguồn, khác với Minify chỉ đơn thuần rút gọn mã.

Quá trình obfuscate không làm thay đổi luồng của mã nguồn, nhưng nếu không thực hiện cẩn thận, có thể khiến đoạn JavaScript sau khi obfuscate trở nên vô dụng Việc này đòi hỏi sự cẩn trọng để đảm bảo mã vẫn hoạt động đúng chức năng Nếu lo lắng về khả năng gặp vấn đề trong quá trình obfuscate, bạn có thể yên tâm sử dụng phương pháp Minify để giảm thiểu rủi ro Minify là một giải pháp an toàn, giúp tối ưu mã nguồn mà không ảnh hưởng đến hoạt động của trang web.

Hiện nay, có nhiều phần mềm hỗ trợ obfuscate JavaScript để bảo vệ mã nguồn, trong đó Jasob:: JavaScript Obfuscator được đánh giá là tốt nhất Sử dụng phần mềm này giúp tăng độ phức tạp của mã JavaScript so với các phương pháp Minify, nâng cao khả năng bảo mật và tránh bị hiểu rõ mã nguồn.

JavaScript (JS) obfuscation là kỹ thuật chuyển đổi mã JavaScript nhằm che khuất nguồn gốc và nội dung của mã, giúp tránh bị phát hiện bởi máy quét tự động và gây khó khăn trong việc phân tích mã Phương pháp này được sử dụng rộng rãi không chỉ trong mã lành tính để bảo vệ bản quyền, nén mã, tối ưu hóa hiệu suất và ngăn chặn kỹ thuật đảo ngược mã, mà còn bị các hacker lợi dụng để che giấu mã độc hại Do đó, việc nhận diện mã JS obfuscated không đồng nghĩa với việc đó là mã độc, trừ khi chứa các thành phần gây nhiễu rõ ràng, vì kỹ thuật này giúp bảo vệ mã nguồn đồng thời mở ra khả năng mã độc ngụy trang tinh vi.

Obfuscation đang trở nên phổ biến trong cả mã JavaScript lành tính và độc hại, nhằm tạo ra các đoạn mã khó phát hiện và không thể phân tích dễ dàng Các kỹ thuật này gây cản trở trong việc hiểu và phân tích mã nguồn JavaScript, làm giảm khả năng bảo mật và kiểm soát mã độc Việc sử dụng obfuscation ngày càng phổ biến trong các chiến dịch mã độc cũng như trong phát triển phần mềm nhằm bảo vệ mã nguồn khỏi việc bị truy cập trái phép Do đó, hiểu rõ về các kỹ thuật obfuscation trong JavaScript là yếu tố quan trọng để nâng cao khả năng phòng ngừa và phát hiện các mối đe dọa an ninh mạng.

Đây là một kỹ thuật giúp các developer mới trả lời câu hỏi phổ biến: “Làm sao để che giấu source code của mình?” Ví dụ dưới đây minh họa một thuật toán được sử dụng để giới thiệu sản phẩm cho khách hàng trên trang web thương mại điện tử Thuật toán này tạo ra danh sách đề xuất sản phẩm dựa trên lịch sử mua hàng trước đó của khách hàng, giúp bảo vệ mã nguồn hiệu quả hơn.

MA CÔNG THÀNH – B18AT03 TRANG 15

Đây là một đoạn mã có vẻ bình thường, nhưng nếu xem xét kỹ, nó chính là một thuật toán độc quyền do công ty phát triển Khi một đối thủ cạnh tranh truy cập vào trang web của họ, họ có thể dễ dàng phân tích mã này để hiểu rõ các hoạt động bên trong Điều này tạo ra rủi ro lớn về việc xâm phạm bản quyền hoặc sử dụng các thuật toán độc quyền một cách trái phép Vì vậy, việc bảo vệ mã nguồn và các thuật toán độc quyền là vô cùng quan trọng để duy trì lợi thế cạnh tranh trên thị trường.

Phương pháp giải mã code javascript bị mã hóa

Trong phần demo lab của công cụ De4js, trình tự các bước giải mã cụ thể sẽ được hướng dẫn rõ ràng Dưới đây là những phương pháp phổ biến để giải mã mã JavaScript đã bị mã hóa, giúp người dùng hiểu và xử lý tốt hơn các đoạn mã khó đọc, tối ưu hóa quá trình phân tích và phân loại mã nguồn.

MA CÔNG THÀNH – B18AT03 TRANG 20

Hình 9 Luồng giải mã đoạn code bị làm rối

3.1 Giải mã bị xáo trộn (Deobfuscation code):

- Deobfuscation là quá trình phân tích và định dạng một mã JS bị xáo trộn để làm cho nó có thể đọc lại được

Mã JavaScript (JS) thường được đóng gói hoặc mã hóa nhằm che giấu các hành vi độc hại, gây khó khăn cho quá trình phân tích tĩnh để phát hiện mối đe dọa Ngoài ra, kỹ thuật này cũng được sử dụng trong các mã JS lành mạnh nhằm mục đích nén mã và tăng cường bảo mật Các công cụ đóng gói mã JS rất đa dạng và phổ biến hơn trong các hành vi của kẻ tấn công (malicious actors) nhằm tránh bị phát hiện Chúng thường bao bọc toàn bộ mã bằng cách sử dụng hàm eval() nhận vào một chuỗi và cố gắng thực thi nó như mã JS trong thời gian chạy, khiến việc phân tích trở nên khó khăn hơn.

Phương pháp giải mã dữ liệu mã hóa, chẳng hạn như Base64 và RC4, là kỹ thuật quan trọng giúp chuyển đổi các luồng dữ liệu bị mã hóa về dạng dễ đọc hiểu Ngoài ra, việc phá mã các phương pháp xáo trộn mã (obfuscation code) cũng đóng vai trò thiết yếu trong việc phân tích và hiểu các đoạn mã bị che giấu hoặc bảo vệ nhằm đảm bảo tính bảo mật thông tin.

MA CÔNG THÀNH – B18AT03 TRANG 21

Hướng dẫn cài đặt và sử dụng DE4JS

Công cụ De4js

➢ De4js là một trình giải mã bị xáo trộn (deobfuscator) và giải nén (unpacker) mã nguồn javascript được viết bởi tác giả Thành Thân Thiện

De4js là công cụ nổi bật với khả năng hoạt động ngoại tuyến, giúp mã nguồn trở nên dễ đọc và dễ hiểu hơn bằng cách làm nổi bật cú pháp, đồng thời sắp xếp lại mã bị xáo trộn để dễ đọc hơn Công cụ này thường được sử dụng để giải mã (de-obfuscate) các mã bị xáo trộn bằng nhiều công cụ, dịch vụ và phương pháp khác nhau, hỗ trợ quá trình phân tích và duy trì mã nguồn hiệu quả hơn.

▪ Eval (được sử dụng trong Packer, WiseLoop)

▪ Array (được sử dụng trong Javascript Obfuscator, Free JS Obfuscator)

▪ Кодирование URL (được sử dụng trong bookmarklet)

➢ Trang chủ: https://github.com/lelinhtinh/de4js

➢ Công cụ De4js chạy như một máy chủ nhỏ mà bạn có thể kết nối với trình duyệt web Tức là, chương trình có giao diện web

MA CÔNG THÀNH – B18AT03 TRANG 22

Cài đặt De4js

2.1 Cài đặt trên Kali Linux

- Cài đặt các gói bắt buộc:

2 sudo apt install npm ruby-dev zlib1g-dev sudo gem install bundler

Hình 10 Cài đặt các gói bắt buộc 1

Hình 11 Cài đặt các gói bắt buộc 2

MA CÔNG THÀNH – B18AT03 TRANG 23

- Lấy mã nguồn và cài đặt các phần phụ thuộc:

3 git clone https://github.com/lelinhtinh/de4js cd de4js bundle install

Hình 12 Lấy mã nguồn de4js và cài các thư viện phụ thuộc

1 sudo npm install workbox-cli global

MA CÔNG THÀNH – B18AT03 TRANG 24

Hình 13 Cài đặt workbox-cli

- Hoặc với đầu ra sử dụng thời gian thực:

Hình 14 Chạy máy chủ web de4js

- De4js hiện đã được chạy trong trình duyệt web tại: http://localhost:4000/de4js/

MA CÔNG THÀNH – B18AT03 TRANG 25

Hình 15 Website local của de4js

- Cài đặt các gói bắt buộc:

2 sudo pacman -S npm ruby zlib sudo gem install bundler

- Lấy mã nguồn và cài đặt các phần phụ thuộc:

3 git clone https://github.com/lelinhtinh/de4js cd de4js bundle install

1 sudo npm install workbox-cli global

MA CÔNG THÀNH – B18AT03 TRANG 26

- Hoặc với đầu ra sử dụng thời gian thực:

- De4js hiện đã được chạy trong trình duyệt web tại: http://localhost:4000/de4js/

2.3 Cài đặt trên Debian, Linux Mint, Ubuntu

- Cài đặt các gói bắt buộc:

3 sudo apt update sudo apt install git npm ruby-dev zlib1g-dev sudo gem install bundler

- Lấy mã nguồn và cài đặt các phần phụ thuộc:

3 git clone https://github.com/lelinhtinh/de4js cd de4js bundle install

1 sudo npm install workbox-cli global

- Hoặc với đầu ra sử dụng thời gian thực:

- De4js hiện đã được chạy trong trình duyệt web tại: http://localhost:4000/de4js/

2.4 Sử dụng trên online website

- De4js có thể được sử dụng online trên trang web: https://lelinhtinh.github.io/de4js/

MA CÔNG THÀNH – B18AT03 TRANG 27

Hình 16 Trang web de4js online

Cách sử dụng De4js

- Đi tới thư mục có chương trình:

- Trong trình duyệt web, mở địa chỉ http://127.0.0.1:4000/de4js/

Hình 17 Khởi tạo công cụ de4js

MA CÔNG THÀNH – B18AT03 TRANG 28

- Trong giao diện website, chọn một trong các cách sau để nhập vào đoạn mã bi xáo trộn (obfuscated source code):

• String – chèn mã vào cửa sổ giao diện web

Hình 18 Nhập đoạn mã vào form

• Local File – chọn một tệp cục bộ trên máy tính

Hình 19 Nhập đoạn mã từ file

• Remote File – chỉ định địa chỉ URL của một tệp từ xa

Hình 20 Nhập đoạn mã từ URL

- Ta có thể xác định cách đoạn mã Javascript được giải mã thông các lựa trọn sau

(mỗi loại tương ứng với cách đoạn mã đầu vào được mã hóa):

Hình 21 Các lựa chọn để giải mã

MA CÔNG THÀNH – B18AT03 TRANG 29

Bạn có thể sử dụng tùy chọn “Auto Decode” để de4js tự động nhận diện phương pháp xáo trộn phù hợp với đoạn mã JavaScript đầu vào, giúp quá trình giải mã trở nên dễ dàng hơn Sau khi giải mã thành công, đoạn mã sẽ được hiển thị rõ ràng trong cửa sổ bên dưới để bạn dễ dàng phân tích và xử lý.

- Các tùy chọn bổ sung mà ta có thể bật hoặc tắt:

Hình 22 Các tùy chọn bổ sung

• Line numbers – hiện thị số thự tự dòng

• Format Code – định dạng lại đoạn mã và highlight cú pháp

• Unescape strings – chuyển các xâu ký tự từ dạng chuỗi thoát về dạng thông thường

• Recover object-path – khôi phục đường dẫn đối tượng

• Execute expression – thực hiện số học và các phép toán khác trên biểu thức

• Merge strings - nối các chuỗi

• Remove grouping – Xóa gộp nhóm

Bài lab

Demo lab 1: Giải mã đoạn mã bị làm rối bằng Javascript Obfuscator

- Kịch bản: Ta muốn giải mã một đoạn mã đã được làm rối bằng Javascript Obfuscator thành đoạn mã có thể đọc hiểu được

- Đoạn mã Javascript trước khi được đưa vào làm rối bằng JS Obfuscator:

MA CÔNG THÀNH – B18AT03 TRANG 30

Hình 23 Lab1 - Đoạn mã JS bình thường

- Đoạn mã rối đầu vào:

Hình 24 Lab 1 - Đoạn mã đầu vào bị làm rối

MA CÔNG THÀNH – B18AT03 TRANG 31

- Sử dụng De4js để giải mã:

• paste đoạn mã muốn giải mã vào khung cửa cửa số web

• chọn nút “Auto Decode” trên giao diện web

Hình 25 Lab 1 - Giải mã bằng De4js

• Kết quả sau khi giải mã trả về đúng logic với đoạn mã trước khi bị obfuscator và có thể đọc hiểu được nội dung

• De4js xác định được chính xác loại làm rối (obfuscated) được sử dụng - ở đây chính là JS Obfuscator

Demo lab 2: Giải mã javascript để gỡ bỏ bản quyền chân trang trên một số nền tảng web template

- Kịch bản: Trên thị trường hiện nay, các nhà cung cấp template blogger đẹp như

Nhiều mẫu blog như Templateify, Sora Templates, Odd themes, Bloggertheme9 đều cung cấp phiên bản miễn phí và trả phí, trong đó bản free thường mã hóa JavaScript và giữ lại bản quyền chân trang Việc không xóa bỏ bản quyền chân trang khi sử dụng bản free đồng nghĩa bạn đang tạo backlink cho nhà phát triển, điều này có thể gây khó chịu Để dễ dàng tùy chỉnh và xóa bỏ bản quyền, cần phải giải mã JavaScript, giúp việc chỉnh sửa trở nên thuận tiện hơn Tuy nhiên, việc gom nhiều đoạn mã JavaScript mã hóa lại gây ra tình trạng lag, làm trình duyệt chạy chậm và khó chịu khi chỉnh sửa.

MA CÔNG THÀNH – B18AT03 TRANG 32

Bạn có thể tạo một blog miễn phí trên nền tảng Blogspot với giao diện đẹp bằng cách sử dụng theme Paperify từ Templateify Sau khi hoàn tất quá trình tạo blog, bạn sẽ sở hữu một website có chân trang bản quyền rõ ràng như hình mẫu đã cung cấp.

Hình 26 Lab 2 - Trang web với bản quyền chân trang

MA CÔNG THÀNH – B18AT03 TRANG 33

Nhấn tổ hợp phím Ctrl + U để mở mã nguồn của trang web, giúp bạn dễ dàng truy cập và xem toàn bộ mã HTML và JavaScript Khi cuộn xuống dưới, bạn sẽ thấy đoạn mã JavaScript được mã hóa, chứa thông tin liên quan đến bản quyền chân trang của Templateify Việc kiểm tra mã nguồn giúp xác định các yếu tố bảo vệ bản quyền và mã hóa của trang web một cách hiệu quả.

Hình 27 Lab 2 - Mã nguồn của trang web bị gắn bản quyền

- Copy và paste phần đánh dâu trong ảnh vào công cụ De4js:

MA CÔNG THÀNH – B18AT03 TRANG 34

Hình 28 Lab2 - Nhập đoạn mã bị mã hóa vào de4js

- Ấn chọn nút “Auto Decode”, thu được kết quả:

Hình 29 Lab 2 - Kết quả giải mã của de4js

MA CÔNG THÀNH – B18AT03 TRANG 35

- Sau đó ta sẽ copy đoạn code đã được giải mã và tiếp theo sẽ vào trang JavaScript

Minifier để minify đoạn code cho dễ đọc:

Hình 30 Lab 2 - Rút gọn lại đoạn mã vừa được giải mã

- Tiếp đến ta sẽ copy đoạn code đã được minified và dán vào trang web để format lại định dạng cho đoạn code javascript:

Hình 31 Lab 2 - Định dạng lại đoạn code

MA CÔNG THÀNH – B18AT03 TRANG 36

- Copy toàn bộ đoạn mã đã được format, vào phần chính sửa HTML theme trong Blogspot

Hình 32 Lab 2 - Chỉnh sửa HTML của template theme

- Sau đó ta sẽ paste thay thế phần code javascript dưới đây:

Hình 33 Lab 2 - Đoạn code mã hóa cần được thay thế

MA CÔNG THÀNH – B18AT03 TRANG 37

- Ta sẽ thu được kết quả như sau:

Hình 34 Lab 2 - Đoạn mã được giải mã thay thế đoạn mã bị mã hóa cũ

Chúng ta đã hoàn thành bước mã hóa đoạn code bị rối Tiếp theo, cần tìm phần mã JavaScript xử lý chức năng phân trang bản quyền Cuối cùng, sẽ tiến hành xóa đoạn mã JavaScript đó để đảm bảo website hoạt động tối ưu và an toàn hơn.

Hình 35 Lab 2 - Xóa đoạn mã JS chứa bản quyền chân trang

Sau khi xóa xong, bạn cần ấn lưu lại để hoàn tất quá trình gỡ bỏ bản quyền chân trang trên theme miễn phí của Templateify Đây là bước quan trọng giúp bạn tùy chỉnh chân trang theo ý muốn mà không bị chuyển hướng về trang chủ của Templateify Việc này mở ra khả năng cá nhân hóa giao diện website, nâng cao trải nghiệm người dùng và tối ưu hóa SEO cho website của bạn.

MA CÔNG THÀNH – B18AT03 TRANG 38

Hình 36 Lab 2 - Xóa thành công bản quyền chân trang

MA CÔNG THÀNH – B18AT03 TRANG 39

Ngày đăng: 26/02/2023, 15:07

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[3] "Obfuscated code trong lập trình," [Online]. Available: https://viblo.asia/p/obfuscated-code-trong-lap-trinh-XL6lANQg5ek. [Accessed 21 12 21] Sách, tạp chí
Tiêu đề: Obfuscated code trong lập trình
[4] "Javascript Obfuscation the definitive guide," [Online]. Available: https://blog.jscrambler.com/javascript-obfuscation-the-definitive-guide. [Accessed 21 12 2021] Sách, tạp chí
Tiêu đề: Javascript Obfuscation the definitive guide
[5] "De4js - Penetration Testing Tools," [Online]. Available: https://en.kali.tools/?p=1372. [Accessed 21 12 2021] Sách, tạp chí
Tiêu đề: De4js - Penetration Testing Tools
Năm: 2021
[1] "Javascript là gì," [Online]. Available: https://www.hostinger.vn/huong-dan/javascript-la-gi. [Accessed 21 12 2021] Link
[2] "Tìm hiểu về minified và obfuscated code," [Online]. Available: http://soaptek.blogspot.com/2013/01/tim-hieu-ve-minified-obfuscated-code.html. [Accessed 21 12 2021] Link

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w