- Một trường hợp phân tích và khôi phục cách hoạt động của dongle cổng song song mà trình biên dịch RPG II dùng cho kế toán trong thập niên 1990 yêu cầu
- Phần mềm gốc chạy trong cửa sổ DOS của môi trường Windows 98 và sẽ không hoạt động nếu thiếu dongle
- Sau khi chuyển ảnh đĩa sang trình giả lập để phân tích, phát hiện cùng một routine chống sao chép đã được chèn vào bên trong các tệp thực thi như RPGC.EXE và SEU.EXE
- Qua phân tích assembly, xác nhận routine này luôn trả về một giá trị hằng cố định (7606h), và đã vượt qua bước kiểm tra dongle bằng một bản vá 4 byte
- Nhờ đó, trình biên dịch RPG II của Software West có thể chạy mà không cần dongle, một kết quả có ý nghĩa trong góc độ bảo tồn phần mềm cổ điển
Phần mềm kế toán cổ xưa và phát hiện về dongle
- Phần mềm kế toán dựa trên RPG đã được sử dụng suốt 40 năm vẫn còn đang vận hành trên một PC Windows 98
- RPG là ngôn ngữ dành cho các máy tính tầm trung như IBM System/3, System/32, AS/400, và sau đó được chuyển sang MS-DOS
- Khi chạy, chương trình này yêu cầu một dongle phần cứng chống sao chép ở cổng song song
- Trên dongle vẫn còn mờ logo “Stamford, CT” và “Software Security Inc.”
- Có in chữ “RUNTIME”, và ý nghĩa của nó được làm rõ ở giai đoạn phân tích sau đó
Phân tích ảnh đĩa và cấu trúc trình biên dịch RPG
- Trích xuất ảnh đĩa từ hệ thống Windows 98 và chạy trong trình giả lập
- Tìm thấy hai phiên bản của trình biên dịch RPG II (do Software West Inc. phát triển) cùng với toàn bộ mã nguồn RPG của phần mềm kế toán
- Hệ thống có dạng menu, gồm nhiều mô-đun RPG và các tệp batch DOS
- Chính trình biên dịch thực hiện kiểm tra dongle, và cùng routine bảo vệ đó cũng được chèn vào các tệp thực thi được tạo ra
Reverse engineering routine giao tiếp cổng song song
- Phân tích SEU.EXE bằng trình disassembler Reko
- Ban đầu không thấy lệnh
in/out, nhưng sau đó phát hiện chúng trong một segment khác (0800h)
- Routine này đọc địa chỉ cổng song song từ vùng dữ liệu BIOS, rồi gửi/nhận dữ liệu qua cổng LPT1
- Giá trị kết quả được lưu trong thanh ghi
BX; không có giá trị đầu vào và luôn trả về cùng một kết quả
Suy luận giá trị hằng và bản vá
- Ở cuối routine, xác nhận giá trị
BH được cố định là 76h
- Chỉ còn
BL là chưa rõ, nên đã duyệt brute-force toàn bộ phạm vi 0~255
- Tổ hợp đúng được xác nhận là
BL=06h, tức BX=7606h
- Thay 4 byte đầu của routine bằng
MOV BX,7606h và RETF để vượt qua bước kiểm tra dongle
- Sau đó chương trình chạy ngay lập tức, và có thể áp dụng cùng chỉnh sửa này cho các tệp thực thi khác có cùng routine
Kết quả và ý nghĩa
- Phát hiện cùng một đoạn mã chống sao chép trong mọi thành phần của trình biên dịch RPG II, nên có thể sửa đồng loạt
- Dongle có cấu trúc chỉ đơn giản là trả về một giá trị hằng, nên có thể vô hiệu hóa chỉ với bản vá 4 byte
- Trình biên dịch sau khi chỉnh sửa vẫn hoạt động bình thường mà không cần dongle, và sau khi loại bỏ dữ liệu cá nhân sẽ được công bố như một kho lưu trữ phần mềm mang giá trị lịch sử
- Gần như không còn tài liệu trực tuyến nào về Software West Inc., nên tác giả hy vọng có thể liên hệ thêm với những người đã tạo ra nó
1 bình luận
Ý kiến trên Hacker News
Bảo vệ phần mềm thời kỳ đầu thực sự rất đơn giản
Ngày xưa tôi có đĩa nâng cấp Windows 3.11, và trình cài đặt sẽ thất bại nếu không phát hiện phiên bản trước đó đã được cài
Cách giải quyết chỉ là tạo một file văn bản trống rồi lưu với tên
win.com. Trình cài đặt quét toàn bộ ổ đĩa và chỉ tìm đúng file đóThực ra đĩa nâng cấp đã chứa toàn bộ bộ cài. Thời đó đúng là rất đơn giản
Cuối cùng tôi phải mượn bản 3.x từ một người bạn để cài, và vì nội dung quảng cáo không đúng nên tôi thấy việc đó về mặt đạo đức là chấp nhận được
Có thể xem ảnh sản phẩm liên quan tại liên kết eBay
Tôi phát triển phần mềm cho kỹ thuật xây dựng dân dụng (mes100.com)
Đến giờ vẫn có người dùng thích dongle phần cứng. Họ cảm thấy yên tâm hơn khi có một thiết bị vật lý cầm nắm được
Vì tôi bán giấy phép vĩnh viễn nên khi dongle hỏng thì rất phiền, vì không còn linh kiện thay thế. Tôi không thích giấy phép trên đám mây, nhưng nó lại cho phép tạo ra doanh thu dựa trên thuê bao
Nhưng dù cố gắng thế nào thì bản crack vẫn trôi nổi trên mạng. Tôi cũng không có nguồn lực để xử lý pháp lý, nên việc bảo vệ là bắt buộc
Ngoài ra, một số người đơn giản là thích tính tự chủ khi không phải phụ thuộc vào máy chủ của bên thứ ba
Vì thế mô hình SaaS giống như thảm họa đối với người dùng. Tôi ghét vi phạm bản quyền, nhưng cũng ghét SaaS không kém
Ngày trước crack đơn giản hơn nhiều
Chỉ cần đổi JE hoặc JNE thành JMP là đã có thể vượt qua lớp bảo vệ
Điều cốt lõi là xác định được mã bảo vệ nằm ở đâu và nó hoạt động thế nào
Thứ nhất, nhà phát triển làm việc với đoạn mã đó lâu hơn chúng ta rất nhiều, nên nếu cơ chế bảo vệ quá phức tạp thì sẽ gây khó khăn cho việc sửa lỗi
Thứ hai, hacker mỗi người chỉ cần biết vài mánh là đủ, còn nhà phát triển thì phải chặn được tất cả các mánh đó
Thứ ba, chức năng bảo vệ là việc nhàm chán và không được ghi nhận, nên thường thiếu động lực
Tôi nhập nó vào và kích hoạt được ngay. Sau đó tôi đã mua bản chính thức
Nó dùng cách ký đĩa mềm bằng laser, nhưng ngay cả một cậu thiếu niên biết đọc assembly cũng có thể phá dễ dàng
Thậm chí chỉ cần cào đĩa mềm bằng đầu kim là đã có thể sao chép. Cuối cùng đây là một ví dụ mà marketing đi trước công nghệ
Tôi từng viết mã RPG II vào thập niên 80, và đến thập niên 90 thì giúp chuyển sang môi trường giả lập S/36
Chúng tôi dùng sản phẩm của một công ty tên California Software Products, và nó hoạt động khá tốt, đủ để công ty tồn tại cho đến khi người sáng lập nghỉ hưu
Trước ý kiến “kiểu chống sao chép này chẳng phải quá đơn giản sao?”, tôi nghĩ vào thời đó đây là mức độ kỹ nghệ phù hợp
Với emulator và decompiler thì chỉ vài ngày là xử lý xong, nhưng lúc ấy thậm chí còn chưa có những công cụ đó
90% phần mềm thời đó thực sự đơn giản như vậy. Không phải người ta bỏ sót thứ gì phức tạp hơn
Hồi nhỏ tôi từng crack một trò chơi Ultima
Lý do chỉ là tôi lười phải cho đĩa mềm vào mỗi lần chơi. Mã sẽ tự giải mã và đọc địa chỉ bắt đầu từ một sector cụ thể trên đĩa
Sector đó không thể sao chép bằng các công cụ copy thông thường, nhưng tôi đã giải quyết bằng cách sửa header của file thực thi
Đầu thập niên 90, tôi từng bảo trì một hệ thống gia hạn giấy phép do trụ sở chính của một chuỗi nhượng quyền tự phát triển
Mỗi tháng phải gia hạn bằng đĩa mềm, và trụ sở đôi khi còn tùy ý chặn những chi nhánh mà họ không thích
Cuối cùng nhiều chi nhánh liên kết lại để khởi kiện, và tôi đã làm một trình tạo giấy phép trên DOS để mỗi chi nhánh có thể nhận mã qua điện thoại và tự gia hạn
Sau khi vụ kiện kết thúc, tôi phát hành một bản vá loại bỏ hoàn toàn bước kiểm tra giấy phép. Một ngày nào đó tôi muốn thử chạy lại nó bằng DOSBox
Tôi thấy thú vị khi đọc rằng Windows 95 vẫn còn được dùng trong công việc thực tế
Trái với các xu hướng AI hào nhoáng, ở những mảng nhàm chán của ngành công nghiệp thì thay đổi công nghệ diễn ra rất chậm
Thậm chí vẫn còn những hệ thống chạy bằng trình giả lập PDP-11
Việc phần mềm và phần cứng này vẫn đang được một số doanh nghiệp sử dụng là điều khá ấn tượng
Vì vậy, việc công khai bản crack có thể mang lại rủi ro pháp lý
Các doanh nghiệp sẵn sàng trả rất nhiều tiền chỉ để duy trì những hệ thống cũ, nên kiểu vendor lock-in này vẫn tiếp diễn
Nếu bằng sáng chế hoặc quyền sở hữu trí tuệ vẫn còn hiệu lực, thì nhất định phải kiểm tra trước khi công khai
Chỉ là một dongle phần cứng trả về một con số cố định, đúng là cơ chế bảo vệ quá đơn giản
Nhưng vào thời đó như vậy là đủ. Ngày nay phần mềm doanh nghiệp cũng thường chỉ dùng mức license key tương tự
Cuối cùng thì đó chỉ là phiên bản của thập niên 80 cho ý tưởng “chỉ cần phát tín hiệu rằng có hóa đơn là người ta sẽ trả tiền”