Bí mật trong các phần mềm

5 697 0
Bí mật trong các phần mềm

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

Thông tin tài liệu

Bí mật trong các phần mềm

mật ẩn dấu trong các phần mềmĐinh Mạnh ĐạtBạncó bao giờ tự hỏi về tác giả của một phần mềm là ai, phần mềm ấyđược viết như thế nào hay bằng ngôn ngữ gì không?Nói chung trên cáctài liệu hay các phương tiện thông tin công khai thì một phần mềm chỉđược biết đến như là sản phẩm của cả một công ty chứ không có tácgiả cụ thể, chẳng hạn Ms Windows của MicroSoft, Delphi của Borland .đặc biệt là các phần mềm tuyệt đối không công bố đã được viếtbằng ngôn ngữ hay công cụ lập trình gì (ngoại trừ Windows và Linux nổitiếng đưược biết là viết bằng ngôn ngữ C). Tôivà các bạn của tôi thường có những cuộc tranh luận, bình luận về cácvấn đề Tin học (mặc dù còn là 'ếch ngồi đáy giếng'!) vànhiều lần đã đề cập đến vấn đề đó. Tôi còn nhớ rõ chúng tôiđã thán phục bộ Ms Office như thế nào, đã yêu thích và cố bắt chướcmôi trường tích hợp (IDE - môi trường để soạn thảo, gỡ rối, biêndịch…) của Turbo Pascal 7.0 (TP70) mà không thể được… Và chúng tôi'ước' chỉ cần biết đưược tên thôi của ngôn ngữ lập trìnhhay người đã tạo ra sản phẩm ấy để thoả lòng hâm mộ. Thời giantrôi qua, dù bằng nhiều phương tiện chúng tôi vẫn chưa biếtđược… Tình cờ một lần sử dụng Disk Editor (diskedit.exe) trong NU tôi đã reo lên vì thấy được mộtđiều mật. Có lẽ có người đã thấy điều này như tôi… Ngaytrong tệp chạy turbo.exe của TP70 có chứa tên của 51 người đã làm TP70,mặc dù chúng ở một vùng 'lạ' của tệp và được ghi theoquy cách không bình thường. Chương trình Pascal sau đọc turbo.exevà ghi ra tên của họ:uses crt;var f: file of char;x:char; i: longint;BEGINclrscr;writeln(’Authors of Turbo Pascal 7.0:’);writeln(’----------------------------’);assign(f,’turbo.exe’);reset(f);seek(f,393850);for i:=1 to 679 dobeginread(f,x);if(x=’ ’) or (x=’.’) or ((’a’<=x) and (x<=’z’)) or ((’A’<=x) and (x<=’Z’)) then write(x) else write(’,’);end;close(f);readln;END. Họgồm có: Alex Shtaygrud, Allen Bauer, Anders Hejlsberg, Catherine Mone, CharlesJazdzewski, Charlie Calvert, Christophe Job, Daev Roehr, Dan Rosenberg, DannyThorpe, Darcy Wright, Dave Scofield, David Intersimone, Eli Boling, FedericoRomano, Gabor Ligeti, Gary Whizin, Hank Cox, Joanne Bealy, Joe Chou, John Wong,Jon Howell, Julie Gray, Laura Grenyo, Liam Friedland, Liang, Jye Chang, LindaJeffries, Lucy Poindexter, Lynn Flink, Marcus Ervin III, Mark Edington, MatthewLeahy, Michelle M. Manning, Mike Weisert, Nancy Wood, Pat Williams, Paul Gross,PhilippeKahn, Ramin Halviatti, Richard Nelson, Rick Schell, Robert Warren, S. JeyaRajan, Sidney Markowitz, Takashi Tamasu, Tamra Selfridge, Tođ Mandeville, TuocLuong, Zack Urlocker Tôiđã xem tất cả mọi nơi trong IDE của TP70 nhưng không chỗ nào có liênquan đến những cái tên này. Có lẽ các lập trình viên viết TP70 đãtạo một 'Quả trứng phục sinh' về các tác giả của TP70 (chẳnghạn một tổ hợp phím phức tạp nào đó để hiện các tác giả mà chỉhọ biết và không công bố). Điều này không có trong các phiên bảntrước của TP. Chúngtôi bất ngờ với số lượng lớn các lập trình viên như vậy để làmmột phần mềm trên DOS, trong đó có Philippe Kahn - một nhân vật nổitiếng là tác giả của Turbo Pascal (ISM đã có một bài giới thiệu vềông). Có lẽ không có ai quan trọng hơn ai nên tên các lập trình viênđược xếp theo thứ tự Aphabet! Phảinói giao diện, cách làm việc của TP70 rất hoàn hảo, khá giống vớiTurbo C++ 3.0 (TC30) cũng là phiên bản trên DOS ra đời cùng lúc vớiTP70. Mở tệp tc.exe đọc tôi càngbất ngờ với số lượng 75 lập trình viên (!), trong đó có rất nhiềungười đã viết TP70 và hình như có người Việt Nam, họ gồm có: (Trongtệp tc.exe, trưước các tên nàycòn có đoạn' Turbo C++ teammembers:') Don Ahn, Mark Alexander, BobArnson, James Bach, Pete Becker, Latesh Bhatia, Eli Boling, Keimpe Bronkhorst,Lee Cantey, Garnet Chaney, Liang-Jye Chang, David Ching, Bonnie Cohen, Hank Cox,Michael Cuff, Charles Dickerson, Steve Drake, David Draper, Peter Eden, GregEllison, Judy Fitzgerald, Lynn Flink, Lars Frid-Nielsen, Paul Fussell, CarolGeary, Bret Gillis, Julie Gray, Laura Grenyo, Paul Gross, Arthur Guo, CraigHansen-Sturm, John Ho, Dan Horn, Jon Howell, David Intersimone, Dana Jeffries,Linda Jeffries, S. JeyaRajan, Philippe Kahn, Spencer Kimball, PeterKukol, Alex Lane, G bor Ligeti, Sin Lew, Linda Lowther, Scott Lund, SusanMarfield, Sidney Markowitz, K.A. McCord, Mike Malone, Marina Michaels, KathyMoney, Sekaran Nanja, Rob Pearson, Dirk Pellett, Matt Pietrek, Loan Pham,Christine Phan, Brian Russel, Phil Rose, Robin Rosenberg, Jeff Stock, RickSchell, Tamra Selfridge, Tayloe Stansbury, Eric Swenson, Tamah Swenson, DavidTaylor, Abel Torres, Bruce Tribbensee, Eugene Wang, Mike Weisert, Pat Williams,Nancy Wood, Chopin YenChươngtrình Pascal đọc tc.exe hiện tên như sau:uses crt;var f: file of char;x: char; i: longint;BEGINclrscr;writeln(’Authors of Turbo C++ 3.0:’); writeln(’-------------------------’);assign(f,’tc.exe’);reset(f);seek(f,554011);for i:=1 to 972 dobeginread(f,x);if x=’~’ then write(’, ')else write(x);end;close(f);END.Haichương trình đọc turbo.exe và tc.exe tôiđã viết bằng cách dùng Disk Editor xem 2 tệp đó và ghi nhớ các vịtrí đặc biệt chứa các tên, sau đó tinh chỉnh các tên một chút nhưtrong chương trình. Bạn cũng có thể làm như vậy để xem (hay dùngNC Editor − ncedit.exe cũng được) nhưng hết sức cẩn thận với DiskEditor (an toàn là luôn chọn NO khi bị hỏi − tất nhiên là chọn YES nếuhỏi có Exit không!) Từý tưởng này tôi đã cố nghiên cứu kỹ hơn trong các file EXE, xemtrong những 'hộp đen' ấy có gì mật không, rất thú vị tôiđã phát hiện ra rằng: Khi một phần mềm viết bằng một công cụ lậptrình (CCLT) nào đó (chẳng hạn Ms Visual C++, Turbo Pascal, ) thì chươngtrình EXE dịch ra đều chứa một đoạn mã đặc biệt nào đó của CCLTđã dùng (như thể là dấu vết của CCLT!). Có thể chỉ đơn giản làmột dòng chữ như MicroSoft Visual C++ hay Borland International Bạn thửmở một số chương trình EXE do chính mình viết bằng các CCLT khácnhau xem, mở thử cả các chương trình EXE khác nữa để thấy các đoạnvăn bản đặc biệt. Các CCLT trên Windows (RAD) mục biên dịch chươngtrình ra file EXE thường nằm trong menu File, Build hoặc Project,trong TP bạn chọn menu CompileDestinationđể chuyển kết quả dịch từ Memory thành Disk rồi biên dịch, còn trongTC mỗi lần dịch tự động tạo file EXE trong thư mục quy định trongmenu OptionsDirectories bạn nênđặt riêng một thư mục chẳng hạn C:TCEXEOUT. Theo tôi thấy thì đa sốcác game trên Windows được viết bằng Visual C++, chẳng hạn trong Hercule.exe, Empires.exe, Dune2000.exe có đoạn 'Microsoft VisualC++', trong War2.exe có'WATCOM C/C++32 Run-Time system' (toàn các game nổi tiếng!), trong iq.exe có đoạn'Turbo-C', trong sthsvcd.exe(HeroSoft) cũng có đoạn 'Microsoft Visual C++' v.v Tôikhông thích viết một phần mềm bằng TP vì nó luôn cho vào file EXE đoạn'Portions Copyright (c) 1983,92 Borland' cho dù chương trình chỉcó 'Begin End.'. ở TC cũng tương tự, có đoạn 'Borland C++'. Hầu như phần mềmnào cũng có một đoạn văn bản đặc biệt cho phép chúng ta đoánđược CCLT đã viết ra nó. Tuy nhiên ngoại trừ chính các trình biêndịch, các CCLT, các phần mềm của các hãng viết trình biên dịch nhưMicrosoft, Borland Có lẽ các công ty này chủ động đưa các đoạnđặc biệt này vào phần mềm dùng công cụ của họ nhưng các phần mềmcủa chính họ thì không bị như vậy, theo tôi họ đã dùng một bộCCLT cho riêng họ! Mộtsố trò chơi thường để các Cheat Code hay mật gì đó ở cuốifile EXE, KS Dương Thiên Tứ đã dành cả một chương trong cuốn sáchbí mật về games máy tính của mình để nói về vấn đề đó, bạn nêntham khảo cuốn sách hay này. Đây cũng là những mật trong file EXEnhưng là do chính người viết làm nó chứ không phải do CCLT. Nhữngfile này có thể bị các chương trình AntiVirus cảnh báo vì kích thướckhác kích thước thực sự của file EXE (Header của file EXE cho biết kích thướcthực sự đó). Chương trình Pascal sau đọc Header và cho biết kíchthước thực sự của file EXE: uses crt;const fi='mario.exé;{Example!}var f: file;a,b: longint;BEGIN clrscr;assign(f,fi);reset(f,1);seek(f,2);{ID:'MZ'}BlockRead(f,a,2);{Bytes of Last Page}BlockRead(f,b,2);{Number of Pages}if a+(b-1)*512=filesize(f) then write(’OK!’)else write(’Truly size: ’,a+(b-1)*512);readln;END. Mộtsố phần mềm ứng dụng chúng ta có thể bỏ qua việc test dữ liệu hay quétđĩa bằng cách gõ tham số trên dòng lệnh. Chẳng hạn phần mềm TPES cótham số mật/zerg, thườngthì các tham số này để tác giả dùng trong quá trình thiết kế đểgiảm thời gian. Bạn mở file EXE và tìm các dấu ' /' hay viết chương trình tìm kiếm xâu có ' /' và một vài chữ cái đằng sau. Tôi đã cố nhưng không tìm đượctham số nào cho setup.exe của Windows để nó không ScanDisk (mất tới 15’) trướckhi cài (giả sử lần đầu ScanDisk xong nhưng bạn quên việc gì đónhư CD Key phải Setup lại thì việc ScanDisk quả là mất thời gian vàhư đĩa). Quaylại với việc lập trình, tôi đã gặp nhiều các chương trình hỏi mậtkhẩu và đã dễ dàng biết được mật khẩu bằng cách mở file EXE raxem. Thường người ta hay để một hằng xâu là mật khẩu để sau nàyso sánh. Rất tiếc là các hằng xâu được các trình biên dịchđưa nguyên vẹn ra file EXE dịch ra! Nếu bạn có mật khẩu là huongk47bkchẳng hạn, bạn không nên khai báo Constpassword=’ huongk47bk’ hay có một phép kiểm tra nhưư If YourPassword=’huongk47bk’ mà nên kiểm tra rời rạc từng kítự hoặc khai báo hằng đã mã hoá (thành tlomd!237!chẳng hạn) rồi trước khi kiểm tra bạn giải mã nó. Đó là phươngán an toàn thường được dùng, vì trong file EXE có nhìn thấy xâu nàycũng chưa giải mã được. Các Cracker cao thủ thường mở file EXEđể tìm CD Key hay thay đổi giao diện (có lần chúng tôi đã mở file turbo.execủa TP và thay hết các menu thành tiếng Việt, thay đuôi tệp mặc địnhthành *.ASM để soạn thảo cho Assembler!) Việc chúng ta làm từ đầutới giờ cũng có thể coi là Crack, nhưng không phi pháp chút nào vàthú vị nữa chứ! Giờ đây bạn có thể tự tin cho ai biết về ngôn ngữlập trình viết nên một phần mềm nào đó rồi. Để kết thúc tôi xintrình bày một cách độc đáo mà tôi đã học lỏm được để hiện tên những người đã làm Excel97 từ 'Quả trứng phụcsinh' của các lập trình viên MicroSoft: Bạnvào Excel 97 mở một tệp mới, ấn F5 (hộp thoại Goto), gõ vào X 97:L97 (con sốđặc biệt đây!), chọn OK bây giờ bạn đang ở ô L97, ấn TAB chuyểnsang ô M97, giữ Ctrl-Shift và nhấn chuột trái vào nút Chart Wizard trênthanh Standard, thả tay ra bạn sẽ thấy mình lạc vào một khoảng không vũtrụ huyền bí, bạn di chuyển bằng chuột hay bàn phím giữa đồi núi, rấtkhó khăn để dừng lại chỗ những 'tấm biá chạy chữ ghi tênnhững người làm Excel 97 (có những cái tên 'Việt' nhưTuan Huynh, Hien Bui, ). Chúcbạn yêu Tin học hơn! . Bí mật ẩn dấu trong các phần mềm inh Mạnh ĐạtBạncó bao giờ tự hỏi về tác giả của một phần mềm là ai, phần mềm ấyđược viết như thế. nghiên cứu kỹ hơn trong các file EXE, xemtrong những 'hộp đen' ấy có gì bí mật không, rất thú vị tôiđã phát hiện ra rằng: Khi một phần mềm viết bằng

Ngày đăng: 07/09/2012, 11:12

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan