Menu
Đăng ký
Truyện
← Trước Sau →
Truyen.Free

(Đã dịch) Siêu Não Hắc Khách (Hacker) - Chương 139: Tràn Bộ Nhớ Đệm

Ngày hôm sau, tại căn tin trường học.

Ba người SAM lại tụ tập cùng nhau dùng bữa.

Vết thương trên mặt Arthur và Matthew nếu không để ý kỹ thì khó mà nhận ra, sưng tấy cũng đã biến mất hoàn toàn, cả hai không ngớt lời khen ngợi "Vân Nam bạch dược".

Trên bàn của họ đặt ba chiếc máy tính TI-82, vừa ăn cơm, vừa thỉnh thoảng liếc nhìn máy tính, đôi khi còn nhìn nhau cười, vẻ mặt tuy mệt mỏi nhưng lại lộ rõ vẻ hưng phấn và tự hào.

Ba chiếc máy tính này, chính là ba chiếc đã được bẻ khóa thành công!

Sau khi ăn xong, Matthew lập tức cầm lấy chiếc máy tính của mình, xóa xóa sửa sửa vài cái, xem mục lục, sau đó chạy một chương trình trong đó, toàn bộ màn hình tinh thể lỏng lập tức đổi mới, chỉ thấy một vạch đen nhỏ dài bắt đầu chậm rãi di chuyển từ phải sang trái, Matthew đưa máy tính cho người bên cạnh, tiếp tục chơi.

Ngày hôm qua, thậm chí có người trực tiếp đăng sơ đồ mạch điện của máy tính TI-82 lên diễn đàn, nên những tài liệu gửi qua bưu điện thực tế không còn nhiều ý nghĩa. Người đó là kỹ sư của công ty Đức Châu, anh ta trả lời nhiều câu hỏi của người dùng và nói hoan nghênh mọi người đưa ra đề xuất cải tiến, anh ta sẽ phản hồi lại với công ty.

Vì sớm có bản vẽ, việc bẻ khóa trở nên dễ dàng hơn nhiều, ba người hưng phấn đến mức không buồn ngủ, họ đưa ra một quyết định quan trọng, đó là nhất định phải bẻ khóa xong chiếc máy tính này trước khi vũ hội Trở Về Trường bắt đầu.

Họ phân công công việc, Matthew và Arthur phụ trách thiết kế một phần mềm hoặc trò chơi thật hấp dẫn, còn Lâm Hồng phụ trách bẻ khóa máy tính, sau khi bẻ khóa xong, sẽ cài vào máy tính, mang đến cho mọi người một kinh hỉ lớn.

Nhờ có những bài viết trên diễn đàn làm nền tảng, Lâm Hồng đã nắm chắc phần thắng trong việc bẻ khóa máy tính, cuối cùng anh lấy ra thùng dụng cụ của Arthur, mở máy tính ra, so sánh với sơ đồ mạch điện, cẩn thận nghiên cứu cấu trúc phần cứng của máy tính.

Cuối cùng, Lâm Hồng xác định rằng không cần phải sửa chữa phần cứng, mà chỉ cần sử dụng phần mềm để bẻ khóa những xiềng xích từ các cố kiện.

Điều này là do trên diễn đàn có một bài viết, một người dùng mô tả rằng anh ta phát hiện ra một hiện tượng, theo thứ tự bấm một số phím, có thể khiến máy tính tiến vào một chế độ đặc biệt - "DEBUG-N". Tuy nhiên, bài viết đó nhanh chóng bị các bài viết khác che lấp, chỉ có rất ít người chú ý đến phản hồi của anh ta.

Vì Lâm Hồng cần bẻ khóa máy tính, nên anh rất chú ý đến phản hồi của mọi người. Anh rất coi trọng bài viết này, dùng máy tính của mình thao tác theo trình tự mà đối phương mô tả, sau đó kết nối máy tính với một loạt thiết bị kiểm tra, kết quả kinh hỉ phát hiện, chế độ này dường như được các kỹ sư của công ty Đức Châu sử dụng trong quá trình sản xuất để điều chỉnh thử, trong chế độ này, người dùng có quyền thao tác lớn hơn đối với máy tính.

Đây tuyệt đối là một tin tốt, vốn dĩ Lâm Hồng còn tưởng rằng cần phải cải biến phần cứng, giờ đã có thể vào chế độ này, anh hoàn toàn có thể trực tiếp không cần đụng đến phần cứng, chỉ cần thông qua lỗ hổng của phần mềm là có thể trực tiếp bẻ khóa chiếc máy tính này.

Trải qua một đêm chiến đấu, Lâm Hồng cuối cùng đã thành công.

Anh đã tìm ra lỗi tràn bộ nhớ đệm, từ đó thành công viết lại toàn bộ mã, đột phá sự hạn chế về quyền hạn thao tác của người dùng đối với không gian của hệ thống cố kiện.

Trong quá trình vận hành, chương trình sẽ phân phối một không gian bộ nhớ để lưu trữ tạm thời dữ liệu, không gian này gọi là bộ nhớ đệm.

Khu vực này có thể xóa và sửa dữ liệu, mức độ bảo mật cũng thấp. Ngay bên ngoài khu bộ nhớ đệm là khu bộ nhớ lưu trữ những dữ liệu quan trọng của hệ thống, một khi những dữ liệu đó bị sửa đổi, toàn bộ hệ thống sẽ sụp đổ, đương nhiên, cũng có thể xuất hiện một kết quả không tưởng tượng được.

Vì vậy, những khu vực dữ liệu nội hạch của hệ thống này bị hạn chế và bảo vệ nghiêm ngặt, người dùng không thể thao tác.

Lỗi này xảy ra khi chương trình nhận dữ liệu người dùng nhập vào và lưu vào bộ nhớ đệm. Đáng lẽ ra, lập trình viên của công ty Đức Châu khi biên dịch phần mềm phải sử dụng hàm để đếm chiều dài dữ liệu vào, để khi số ô nhớ mà lập trình viên dành cho khách hàng nhập vào đã đầy thì phải dừng ngay việc nhập thêm vào, nếu không sẽ tràn.

Nhưng Lâm Hồng tìm thấy một đoạn mã nhập dữ liệu vào buffer (bộ nhớ đệm) và thấy rằng các lập trình viên kia khi biên soạn đã không cẩn thận, quên sử dụng hàm kiểm tra độ dài đối với dữ liệu nhập vào, vì vậy Lâm Hồng cứ nhập dữ liệu vào, mặc kệ cho bộ nhớ đệm đầy, nên xảy ra hiện tượng tràn bộ nhớ đệm.

Tràn bộ nhớ đệm có nghĩa là đưa dữ liệu vào quá nhiều dẫn đến tràn khoảng không gian bộ nhớ được quyền sử dụng, dữ liệu trong khoảng không gian đó tràn ra các khu vực khác ở bộ nhớ đệm, ghi đè lên dữ liệu ở các khu khác, nếu những dữ liệu bị ghi đè là rất quan trọng đối với hệ thống thì sẽ gây ra hậu quả không tưởng tượng được, thường là gây sụp đổ cả chương trình, tạo ra một BUG, nhưng nếu những dữ liệu được nhập vào đã được thiết kế, thì nó không còn là BUG nữa, mà đã trở thành một lỗ hổng cho hacker lợi dụng.

Ví dụ: A là một bộ nhớ đệm để người dùng nhập vào một chuỗi ký tự dài 8 bytes, và B là bộ nhớ đệm lưu trữ một số nguyên dài 2 bytes.

Đáng lẽ ra, lập trình viên phải sử dụng một hàm nào đó để hạn chế độ dài của A nhập vào chỉ bé hơn hoặc bằng 7, vì sau cần có một byte giá trị 0 để đánh dấu kết thúc chuỗi, nhưng lập trình viên quên mất, nên người dùng nhập bao nhiêu cũng được. Ví dụ, người dùng nhập “excessive” 9 ký tự thì nó sẽ ghi vào và mất 9 bytes lưu 9 ký tự và 1 byte lưu số 0.

Như vậy thì mặc dù lập trình viên không có chủ ý muốn thay đổi B, nhưng thực sự là B vẫn bị thay đổi, trong trường hợp này, nếu trên một hệ thống sử dụng bảng mã ASCII thì e0 sẽ thành 25856 từ 03 đổi thành 25856, chỉ nhìn số cũng hiểu hậu quả nghiêm trọng thế nào nếu B là một phần quan trọng của phần mềm.

Lâm Hồng đã tỉ mỉ thiết kế một phần mềm nhỏ, sau đó biên dịch thành ngôn ngữ máy, tính toán chính xác chiều dài của những dữ liệu này, khi đạt đến một độ dài nhất định, anh đưa những đoạn code đã được viết sẵn vào để những đoạn code này tràn ra, ghi đè vào phần bộ nhớ đệm bên ngoài, như vậy cố kiện vận hành đến chỗ đó thì sẽ chạy chương trình của anh.

Ví dụ:

Mã: void function(char*str){ char buffer[8]; strcpy(buffer,str); } Giả sử tìm được đoạn code như thế này.

B là phần code quan trọng của chương trình, nó được bảo vệ, người dùng không được tiếp cận.

Câu lệnh char buffer[8]; đã thành công đăng ký nhận lấy 8 bytes trong bộ nhớ đệm, strcpy(buffer,str); đem một chuỗi str nhập trực tiếp vào buffer (bộ nhớ đệm), nhưng ở đây lập trình viên không có hàm hạn chế chiều dài chuỗi str, nên hacker có thể nhập vào đủ 8 bytes bằng 8 ký tự ba láp gì đó, rồi từ ký tự 9 bắt đầu nhập code đã được chuyển về ngôn ngữ máy, ghi đè vào B, thì khi chương trình thực thi, nó sẽ thực thi B mà đáng lẽ hacker không được phép sửa đổi thì đã sửa đổi được rồi.

Vì vậy, thành lũy nghiêm mật này đã bị Lâm Hồng thành công phá được.

Quá trình này, nói thì có vẻ đơn giản, nhưng thực tế lại trải qua vô số lần thử nghiệm của Lâm Hồng mới tìm ra, để tính toán chính xác chiều dài, anh đã nhập dữ liệu ít nhất 50 lần, mới có thể khiến chương trình của mình có thể thuận lợi tiếp quản quá trình vận hành của cố kiện, thời gian và công sức bỏ ra không thể diễn tả hết bằng vài câu.

Sau khi thành công bẻ khóa, Lâm Hồng hưng phấn đến mức quên rằng người khác không như mình, căn bản không cần ngủ, lập tức gõ cửa phòng Arthur, may mắn là họ vừa mới nằm ngủ không lâu, nghe thấy anh nhanh như vậy đã bẻ khóa được máy tính, hai người vốn đã ngủ gật, mắt mở không ra, lập tức tinh thần chấn động, ném buồn ngủ lên tận chín tầng mây.

Họ lập tức muốn xem thành quả, nhưng một nan đề khác lại đến - không có phần mềm thích hợp để chạy.

Trước đó, hai người đã thảo luận rất lâu, nhưng vẫn không thể xác định phần mềm đầu tiên nên viết chức năng gì. Arthur có khuynh hướng làm một phần mềm thực dụng, ví dụ như có thể hỗ trợ học sinh trong trường học tập, còn Matthew thì có khuynh hướng biên soạn một trò chơi thú vị.

Ý kiến của hai người không thống nhất được, thời gian trôi qua trong những cuộc tranh luận không ngừng, kết quả là không làm được gì cả.

Bây giờ máy móc đã có, lại không có phần mềm thích hợp, thật là phiền muộn.

Đúng lúc này, Matthew đề nghị, trước tiên biên soạn một trò chơi tương đối đơn giản để chạy thử, rồi tính sau, đã nhận được sự nhất trí tán thành của Lâm Hồng và Arthur.

Ba người bàn bạc một chút, cuối cùng quyết định cài trò chơi Xếp Gạch vào máy tính.

Xếp Gạch (Tetris) là một trò chơi kinh điển do một nhà khoa học Soviet tạo ra, nó nhìn có vẻ đơn giản nhưng lại biến hóa vô cùng, khiến người ta nghiện. Năm 1988, sau khi được đưa ra thị trường ở Mỹ, nó đã đạt được thành công thương mại cực lớn, được tất cả mọi người, từ già trẻ gái trai, yêu thích, trở thành một trò chơi đại chúng cực kỳ kinh điển, không có trò chơi nào có thể so sánh được với nó.

Arthur trước đây khi học lập trình đã từng độc lập viết trò chơi này, nên việc viết ra không khó.

Vì vậy, họ lại chuyển sang phòng của Lâm Hồng, vì phòng máy tính của anh có thể mô phỏng môi trường vận hành của Z80CPU, Arthur sau khi biên soạn xong chương trình, sẽ biên dịch và truyền vào máy tính.

Mấy lần chạy đầu tiên đều có vấn đề, nhưng đây là tình huống rất bình thường, cài vào một loại máy khác, nếu có thể thành công ngay từ lần đầu tiên thì quá khoa trương, dù là lập trình viên giỏi đến đâu, đôi khi cũng sẽ phạm một vài sai lầm cấp thấp, ví dụ như ghi sai tên, quên ghi chi nhánh, đây là tình huống rất bình thường. Chỉ cần căn cứ vào đó để điều chỉnh, sửa chữa có mục tiêu là được.

Biên tập phần mềm là như vậy, điều chỉnh thử, chạy, lại điều chỉnh thử...

Không ngừng đấu tranh với các loại sai lầm và BUG, cuối cùng cũng thuận lợi thông qua!

Sau khi trải qua vài chục lần không ngừng qua lại điều chỉnh thử và truyền chương trình, trò chơi của Arthur cuối cùng cũng thuận lợi vận hành trên TI-82!

Matthew lập tức đoạt lấy máy tính, rồi bắt đầu chơi.

Chơi trò Xếp Gạch này chỉ cần nhiều nhất năm phím là được, ba phím để di chuyển, một phím để lật gạch, một phím tăng tốc độ rơi của gạch. Mà máy tính có mười mấy phím, vậy là quá đủ rồi.

Matthew chơi một lúc thì phát hiện, vì màn hình máy tính quá thấp, nên rất nhanh đã game over.

Vì vậy, anh đưa ra ý kiến cải tiến, xoay cách hiển thị ra màn hình 90 độ như vậy sẽ dài hơn.

Vì vậy, Arthur lại bắt đầu sửa chữa chương trình gốc...

Trong cả quá trình, Lâm Hồng đều không nhúng tay vào, anh chỉ đứng bên cạnh quan sát Arthur biên soạn phần mềm.

Chương trình này của Arthur chỉ dùng ngôn ngữ C để biên soạn, Lâm Hồng đến Mỹ mới bắt đầu tiếp xúc với ngôn ngữ lập trình này, dùng chưa quen, hôm nay chứng kiến Arthur không ngừng sửa chữa điều chỉnh thử, cũng đã học được không ít thứ.

Anh phát hiện, khi Arthur biên soạn phần mềm, có một vài thói quen lập trình nhỏ đáng để tham khảo và học tập, ví dụ như chú thích ở những chỗ mấu chốt, thụt vào đầu dòng để tăng tính dễ đọc...

Đến gần năm giờ sáng, họ rút cuộc hoàn thành bản trò chơi này.

Giờ phút này, ngoại trừ Lâm Hồng, Arthur và Matthew đều mệt mỏi không chịu nổi, trực tiếp ngã xuống giường ngủ say.

Sáng sớm hôm đó, Arthur và Matthew đều không thể đi luyện công buổi sáng, chỉ có Lâm Hồng một mình.

Vận mệnh trêu ngươi, ai biết được ngày sau sẽ ra sao. Dịch độc quyền tại truyen.free

Trước Sau
Nghe truyện
Nữ
Nam

Cài đặt đọc truyện

Màu nền:
Cỡ chữ:
Giãn dòng:
Font chữ:
Ẩn header khi đọc
Vuốt chuyển chương

Danh sách chương

Truyen.Free