BÀI 4: FIND REAL SEARIAL
PHẦN I: KHÚC DẠO ĐẦU VỚI “FIND REAL SEARIAL”
Trong lọat TUT này , vì trình độ của các bạn cũng có phần nâng cao so với “thuở ban đầu lưu luyến ấy” , và cũng để cho nó thêm phần hấp dẫn, Benina sẽ chọn các softs “mới cáo” làm ví dụ. Và một quy tắc nữa của benina là trong quá trình hướng dẫn , benina sẽ cố tình post một vài điểm sai, nếu các bạn làm “y chang” với những gì benina posted thì sẽ ko crack được đâu. (hihi). Cái này ko phải là “giấu nghề” (có nghề đâu mà giấu) mà là tránh phiền phức về sau. Mong các bạn thông cảm. Đó là quy tắc “nhát như thỏ” của benina. Benina chưa bao giờ phạm pháp ...chỉ dịch TUT thôi mà...hêhê. Tóm lại, mục đích cuối cùng của lọat TUT này chỉ là giúp các bạn thực hành Olly và đọc hiểu mã ASM có thế thôi.
Các bạn thấy đó, trong các tut trên , các cracker chỉ comment vắn tắc như sau mà một Newbie thì ko thể nào hiểu được:
Ví dụ:
PHẦN I: KHÚC DẠO ĐẦU VỚI “FIND REAL SEARIAL”
Chắc các bạn cũng đã từng đọc qua lọat TUT “Craker!WhoAreYou” của Hacnho để tìm Real Searial, hay loạt tut “How To Crack” của Infinite đầy tài năng, cũng như lọat tut “CrackSoft’s Tuts” và “Crackme for Newbie”của Moonbaby chuyên gia crack softs ,hoặc ”How to use OllDbg” của RongChauA đã viết rất lâu, các bạn có hiểu gì ko nào?. Nếu các bạn đã hiểu những lọat Tut tui kể trên thì các bạn ko phải là đối tượng cho lọat TUT này. Ở đây Benina chỉ muốn chia sẽ với các bạn còn đang khó khăn khi chưa hiểu những gì viết trong các lọat TUT trên. Cái quan trọng là các bạn Newbie chưa biết đọc mã ASM . Khi ko biết đọc thì ko thể biết viết được ( Ở đây tui muốn nói đọc và hiều).Benina sẽ cùng học với các bạn đọc và hiểu các đọan mã ASM qua lọat tut này,như vậy là đã đủ cho 1 cracker Newbie rồi. Còn để viết được một chương trình ASM là 1 chuyện dài hơi.
Như trên tui đã nói, các bạn Newbie rất khó khăn khi đọc các lọat TUT trên. Không phải vì các tác giả viết dỡ , nhưng vì chúng ta mất “cãn bản” trầm trọng . Không hiểu được mã ASM. Vì vậy Benina sẽ cố gắng hết sức mình, trình bày thật dễ hiểu cho các bạn Newbie như benina đây. Thành thử khi các bạn ko hiểu những gì benina viết thì please báo với benina để điều chỉnh cách viết ngay. Đồng thời như thế benina cũng học hỏi rất nhiều ở các bạn.Trong lọat TUT này , vì trình độ của các bạn cũng có phần nâng cao so với “thuở ban đầu lưu luyến ấy” , và cũng để cho nó thêm phần hấp dẫn, Benina sẽ chọn các softs “mới cáo” làm ví dụ. Và một quy tắc nữa của benina là trong quá trình hướng dẫn , benina sẽ cố tình post một vài điểm sai, nếu các bạn làm “y chang” với những gì benina posted thì sẽ ko crack được đâu. (hihi). Cái này ko phải là “giấu nghề” (có nghề đâu mà giấu) mà là tránh phiền phức về sau. Mong các bạn thông cảm. Đó là quy tắc “nhát như thỏ” của benina. Benina chưa bao giờ phạm pháp ...chỉ dịch TUT thôi mà...hêhê. Tóm lại, mục đích cuối cùng của lọat TUT này chỉ là giúp các bạn thực hành Olly và đọc hiểu mã ASM có thế thôi.
Các bạn thấy đó, trong các tut trên , các cracker chỉ comment vắn tắc như sau mà một Newbie thì ko thể nào hiểu được:
Ví dụ:
Quote:
Target: Ripple Screensaver 3.0
Dùng phương pháp search string của “bad boy” ta đến đọan mã sau đây và đặt bp như sau:
Quote:
Press F9, Nhập Fake Name: benina và Fake Code: 0123456789. Rồi press F7 step into vào hàm :
======================== 0040252C /$ 55 PUSH EBP ; Thủ tục đầu tiên của hàm call 0040252D |. 8BEC MOV EBP,ESP 0040252F |. 81EC 0C010000 SUB ESP,10C 00402535 |. 53 PUSH EBX 00402536 |. 56 PUSH ESI 00402537 |. 8BD9 MOV EBX,ECX 00402539 |. 33F6 XOR ESI,ESI ; esi=0 0040253B |. 3973 04 CMP DWORD PTR DS:[EBX+4],ESI 0040253E 74 08 JE SHORT RSRemind.00402548 00402540 |. 6A 01 PUSH 1 00402542 |. 58 POP EAX 00402543 |. E9 DB000000 JMP RSRemind.00402623 00402548 |> 80A5 F4FEFFFF>AND BYTE PTR SS:[EBP-10C],0 0040254F |. 57 PUSH EDI 00402550 |. 6A 40 PUSH 40 00402552 |. 33C0 XOR EAX,EAX ; eax=0 00402554 |. 59 POP ECX 00402555 |. 8DBD F5FEFFFF LEA EDI,DWORD PTR SS:[EBP-10B] 0040255B |. F3:AB REP STOS DWORD PTR ES:[EDI] 0040255D |. 3973 0C CMP DWORD PTR DS:[EBX+C],ESI ; Tham so [ebx+c]=esi=0 ? 00402560 |. 8975 FC MOV [LOCAL.1],ESI ;Biến Local local.1=0=esi 00402563 |. 66:AB STOS WORD PTR ES:[EDI] 00402565 |. 8975 F8 MOV [LOCAL.2],ESI ;Biến local.2=0 00402568 |. AA STOS BYTE PTR ES:[EDI] 00402569 74 07 JE SHORT RSRemind.00402572 ; Nhay ko dùng Fake Name de tinh toan 0040256B |. 68 34444000 PUSH RSRemind.00404434 ; ASCII "Single License" 00402570 |. EB 07 JMP SHORT RSRemind.00402579 00402572 |> 8D83 14010000 LEA EAX,DWORD PTR DS:[EBX+114] ; [ebx+114]=Fake name='benina' 00402578 |. 50 PUSH EAX 00402579 |> 8D85 F4FEFFFF LEA EAX,[LOCAL.67] ; | 0040257F |. 50 PUSH EAX ; |dest 00402580 |. E8 69040000 CALL <JMP.&MSVCRT.strcpy> ; \eax='Single License' Name default 00402585 |. 59 POP ECX ; 'Single License' 00402586 |. 8D85 F4FEFFFF LEA EAX,[LOCAL.67] ; 'Single License' 0040258C |. 59 POP ECX 0040258D |. 33FF XOR EDI,EDI ; edi=0 ===> khoi tao counter i=0 0040258F |. 50 PUSH EAX ; /eax=Name default = 'Single License' 00402590 |. E8 5F040000 CALL <JMP.&MSVCRT.strlen> ; \strlen 00402595 |. 85C0 TEST EAX,EAX ; eax=0E ===> chieu dai Name df=15 ky tu 00402597 |. 59 POP ECX ; ecx= Name default : 'Single License' 00402598 |. 7E 1D JLE SHORT RSRemind.004025B7 0040259A |> 0FBE843D F4FE>/MOVSX EAX,BYTE PTR SS:[EBP+EDI-10C] ; eax=Ky tu thu [i] cua chuoi Name 004025A2 |. 0145 FC |ADD [LOCAL.1],EAX ; Bien Local.1=Local.1+eax 004025A5 |. 8D85 F4FEFFFF |LEA EAX,[LOCAL.67] ; eax=[Local.67]= chieu dai Name df 004025AB |. 50 |PUSH EAX ; /Name 004025AC |. 47 |INC EDI ; |edi=edi+1 ===>Counter i=i+1 004025AD |. E8 42040000 |CALL <JMP.&MSVCRT.strlen> ; \strlen 004025B2 |. 3BF8 |CMP EDI,EAX ; edi=eax ? 004025B4 |. 59 |POP ECX 004025B5 |.^ 7C E3 \JL SHORT RSRemind.0040259A ; cuoi vong lap local.1=545 (dump: d loacal.1) 004025B7 |> 8DB3 18020000 LEA ESI,DWORD PTR DS:[EBX+218] ; esi= code '0123456789' 004025BD |. 33FF XOR EDI,EDI ; edi=0 ===>counter i=0 004025BF |. 56 PUSH ESI ; /s 004025C0 |. E8 2F040000 CALL <JMP.&MSVCRT.strlen> ; \strlen 004025C5 |. 85C0 TEST EAX,EAX ; eax=0A chieu dai Lincense code: '0123456789' 004025C7 |. 59 POP ECX 004025C8 |. 7E 13 JLE SHORT RSRemind.004025DD 004025CA |> 0FBE043E /MOVSX EAX,BYTE PTR DS:[ESI+EDI] ; eax= ky tu thu i cua License code 004025CE |. 0145 FC |ADD [LOCAL.1],EAX ; local.1=local.1+eax 004025D1 |. 56 |PUSH ESI ; /edi='0123456789' 004025D2 |. 47 |INC EDI ; |edi=edi+1 ===>counter i=i+1 004025D3 |. E8 1C040000 |CALL <JMP.&MSVCRT.strlen> ; \strlen 004025D8 |. 3BF8 |CMP EDI,EAX ; eax=len License code ‘0123456789’ = 0A so sanh voi counter i 004025DA |. 59 |POP ECX 004025DB |.^ 7C ED \JL SHORT RSRemind.004025CA ; local.1=752 004025DD |> 8A8D F4FEFFFF MOV CL,BYTE PTR SS:[EBP-10C] ; cl= ky tu dau tien cua Name df =53= 'S' 004025E3 |. 5F POP EDI 004025E4 |. 84C9 TEST CL,CL 004025E6 |. 0FBEF1 MOVSX ESI,CL ; esi='S' 004025E9 |. 74 1B JE SHORT RSRemind.00402606 004025EB |. 8D85 F4FEFFFF LEA EAX,[LOCAL.67] ; eax= 'Single License' 004025F1 |> 0FBEC9 /MOVSX ECX,CL ; ecx=ky tu trong name thu i 004025F4 |. 014D F8 |ADD [LOCAL.2],ECX ; local.2=local.2+ecx 004025F7 |. 3BCE |CMP ECX,ESI ; ecx=esi ? 004025F9 |. 7E 03 |JLE SHORT RSRemind.004025FE 004025FB |. 0FBE30 |MOVSX ESI,BYTE PTR DS:[EAX] ; esi= ky tu hien ton tai 004025FE |> 8A48 01 |MOV CL,BYTE PTR DS:[EAX+1] ; cl=byte [eax+1] 00402601 |. 40 |INC EAX ; eax=eax+1 00402602 |. 84C9 |TEST CL,CL ; cl=0 khi het chuoi name df 00402604 |.^ 75 EB \JNZ SHORT RSRemind.004025F1 ;dump local.2=545 cuoi vong lap loop 00402606 |> 8B5B 08 MOV EBX,DWORD PTR DS:[EBX+8] ; ebx=const =406 00402609 |. 8D85 F4FEFFFF LEA EAX,[LOCAL.67] ; eax= name df 0040260F |. 50 PUSH EAX ; /s 00402610 |. E8 DF030000 CALL <JMP.&MSVCRT.strlen> ; \eax= len name df = 0E 00402615 |. 0FAFC6 IMUL EAX,ESI ; ===> eax=eax*esi=eax*73=0E*73=64A (esi=ky tu cuoi cung cua chuoi name df la ky tu ‘s’=73h) 00402618 |. 03C3 ADD EAX,EBX ; eax=eax+ebx= eax + esi=eax+406=A50 (esi la hang so = 406) 0040261A |. 59 POP ECX 0040261B |. 2B45 FC SUB EAX,[LOCAL.1] ; eax=eax-local.1 0040261E |. F7D8 NEG EAX ; eax= neg eax 00402620 |. 1BC0 SBB EAX,EAX ; eax=eax-eax. Neu eax=FFFFFFFF===> bad boy ; eax=0 good boy 00402622 |. 40 INC EAX ; eax=eax+1 00402623 |> 5E POP ESI 00402624 |. 5B POP EBX 00402625 |. C9 LEAVE 00402626 \. C3 RETN ====================== Trong quá trình trace F8 ta thấy chương trình trial này nó ko tính tóan License Name của ta nhập vào mà nó lấy chuổi License Name default: ”Single License” để tính tóan. Theo đọan mã cuối hàm call: 0040261B |. 2B45 FC SUB EAX,[LOCAL.1] ; eax=eax-local.1 0040261E |. F7D8 NEG EAX ; eax= neg eax 00402620 |. 1BC0 SBB EAX,EAX ; eax=eax-eax. Neu eax=FFFFFFFF===> bad boy ; eax=0 good boy 00402622 |. 40 INC EAX ; eax=eax+1 Để có Good boy thì eax=0 tại : 0040261B |. 2B45 FC SUB EAX,[LOCAL.1] ; eax=eax-local.1 Theo như trên ,vì eax=eax-local.1 Nên để eax=0 sau khi thực kiệm phép tóan trên thì : local.1=eax Theo routine: 00402618 |. 03C3 ADD EAX,EBX ; eax=eax+ebx= eax + esi=eax+406=A50 (esi la hang so = 406) Vậy Local.1=eax=A50 Chúng ta lại thấy trong quá trình trace: Local.1= Tổng các ký tự Name df + Tổng các ký tự của License Code Thay các giá trị vào: A50= 545+ Tổng các ký tự của License Code (545 là tổng các ký tự Name df: “Single License” Hêhê, vậy: Tổng các ký tự của License Code= A50-545=50B Tui chọn chuổi này “ZZZZZZZZPPPPPQ” có tồng các ký tự =50B Chuổi này là ngắn nhất đó , có ai tìm ra chuổi ngắn hơn tui dẫn đi nhậu ....hêhê (Để tính tổng ta các ký tự ta dùng calc.exe mà máy nào cũng có) Vậy là OK, hảy nhập thử License code vừa tìm xem nào. ========================== |
Nếu các bạn nào hiểu được ví dụ tui đã post ở trên thì …các bạn ko cần đọc tiếp nữa, vì các bạn giỏi hơn benina rồi. Còn nếu các bạn nào chưa hiểu gì nhiều cái vì dụ trên thì các bạn sẽ tìm hiểu cùng benina nhé. Chúng ta sẽ đi từng bước một thật vững chắc để có được một nền tảng căn bản về cracking.
Trước khi đi tiếp các bài sau, tui xin nhắc lại, các bạn hảy đọc kỹ bài UseOlly phần 2 của anh RongChauA và hảy thử debug chương trình trên và tìm hiểu xem tại sau benina comment như trên để có một cái nhìn bao quát về this traget. Điều quan trọng nhất khi đọc các bài tut về Find Real Serial là các bạn vừa đọc, vừa thực hành thì các bạn sẽ hiểu được những gì các tác giả commeting. Học cracking mà ko thực hành thì …. Xin mời các bạn vào mục Recycle Bin mà đọc.
Thưa các bạn , tui có vào một số forum về “tình yêu “ hay đại lọai như thế và hay gặp những lời cảnh cáo của các Admin như “Bạn câu bài , tui sẽ warm bạn nếu tái phạm”…v…v… Như ở đây, trong lọat tut này , ko biết có ai nghĩ benina câu bài ko nửa. Nhưng thật sự mà nói, benina ko có khái niệm về cái gọi là “câu bài” . Mà những bài benina posted là những gì benina tìm hiểu được khi học cracking. Nó cũng là những gì benina hệ thống cho chính bản thân mình, đồng thời muốn chia sẽ cho các bạn . Vì benina thật sự rất bận, nên khi nào rãnh rỗi mới dịch và viết được vài bài. Mong các bạn và các admin thông cảm mà đừng cho rằng em “câu bài”.
Đến đây thì khúc dạo đầu đã xong. Chúng ta sẽ tiếp tục với TUT sau về các khái niệm căn bản của ASM và tìm hiểu xem những gì các cracker commenting khi viết TUT về Find Real Searial.
Trước khi đi tiếp các bài sau, tui xin nhắc lại, các bạn hảy đọc kỹ bài UseOlly phần 2 của anh RongChauA và hảy thử debug chương trình trên và tìm hiểu xem tại sau benina comment như trên để có một cái nhìn bao quát về this traget. Điều quan trọng nhất khi đọc các bài tut về Find Real Serial là các bạn vừa đọc, vừa thực hành thì các bạn sẽ hiểu được những gì các tác giả commeting. Học cracking mà ko thực hành thì …. Xin mời các bạn vào mục Recycle Bin mà đọc.
Thưa các bạn , tui có vào một số forum về “tình yêu “ hay đại lọai như thế và hay gặp những lời cảnh cáo của các Admin như “Bạn câu bài , tui sẽ warm bạn nếu tái phạm”…v…v… Như ở đây, trong lọat tut này , ko biết có ai nghĩ benina câu bài ko nửa. Nhưng thật sự mà nói, benina ko có khái niệm về cái gọi là “câu bài” . Mà những bài benina posted là những gì benina tìm hiểu được khi học cracking. Nó cũng là những gì benina hệ thống cho chính bản thân mình, đồng thời muốn chia sẽ cho các bạn . Vì benina thật sự rất bận, nên khi nào rãnh rỗi mới dịch và viết được vài bài. Mong các bạn và các admin thông cảm mà đừng cho rằng em “câu bài”.
Đến đây thì khúc dạo đầu đã xong. Chúng ta sẽ tiếp tục với TUT sau về các khái niệm căn bản của ASM và tìm hiểu xem những gì các cracker commenting khi viết TUT về Find Real Searial.
Benina (REA Team)
In bài này