Регистрируем ColorHunt v1.0 Автор..: Lomax Перевод: NightCat//TEAM-53 Привет всем! В этот туторе я расскажу, как найти серийник для маленькой, но забавной игры - ColorHunt. Тутор написан для новчиков, коорые уже умеют управляться с SoftIce/W32DASM. Программа спрашивает у нас имя и серийный номер, так что введите что-нибудь. После неудачной попытки использовать обычных GetWindowTextA и bpx GetDlgItemTextA, я попробовал bpx SendDlgItemMessageA и бинго! Мы в СофтАйсе. Мы можете попасть в процедуру вычисления серийнкика разными способами. Смотря на дизассемблированный листинг (из W32DASM) вы можете быстро распознать калькуляцию серийника... но, если вы и правда это можете, то зачем вы читаете этот тутор? ;) Всегда будьте настороже, когда вы видите 'cmp al, 30' или инструкции типа того. 30 - это хекс-код нуля (0), 39 = 9. Окей, если вё прошло хорошо, то мы находимся в процедуре вычисления (смотрите ниже). Я добавил свои коммментарии справа, чтобы объяснить процесс. * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0040646C(C) | :00406476 8B442414 mov eax, dword ptr [esp + 14] :0040647A 25FFFFFF7F and eax, 7FFFFFFF :0040647F 0B442410 or eax, dword ptr [esp + 10] :00406483 747E je 00406503 :00406485 8A01 mov al, byte ptr [ecx] //al = первая цифра серийника :00406487 3C30 cmp al, 30 //первая цифра долна быть 0 (30 = hex) :00406489 7578 jne 00406503 //если не 0, то плохое сообщение :0040648B 0FBED0 movsx edx, al // edx = 0 :0040648E 0FBE7101 movsx esi, byte ptr [ecx+01] // esi = 2я цифра :00406492 8BC2 mov eax, edx //eax = 0 :00406494 2BC6 sub eax, esi // eax = 0 минус 2я цифра :00406496 83F8FF cmp eax, FFFFFFFF //FFFFFFFF = -1 т.е. 2я фира = 1 (-1 =0- 1) :00406499 7568 jne 00406503 :0040649B 8B44241C mov eax, dword ptr [esp + 1C] :0040649F 25FFFFFF7F and eax, 7FFFFFFF :004064A4 0B442418 or eax, dword ptr [esp + 18] :004064A8 7459 je 00406503 :004064AA 8A5902 mov bl, byte ptr [ecx+02] //bl = 3я цифра :004064AD 80FB35 cmp bl, 35 //3я цифра должна быть равна 5 :004064B0 7551 jne 00406503 :004064B2 385903 cmp byte ptr [ecx+03], bl //4я тоже 5 :004064B5 754C jne 00406503 :004064B7 80790433 cmp byte ptr [ecx+04], 33 //5я должна быть - 3 :004064BB 7546 jne 00406503 :004064BD 0FBE7105 movsx esi, byte ptr [ecx+05] //esi = 6я цифра :004064C1 8BC2 mov eax, edx //eax = edx = 0 :004064C3 2BC6 sub eax, esi //eax = 0 минус 6я цифра :004064C5 83F8FF cmp eax, FFFFFFFF //-1=0-1, т.е. 6я цифра = 1 :004064C8 7539 jne 00406503 :004064CA 0FBEC3 movsx eax, bl //eax = 5 (bl всё еще равен 5) :004064CD 0FBE7106 movsx esi, byte ptr [ecx+06] //esi = 7я цифра :004064D1 2BC6 sub eax, esi //eax = 5 - 7я цифра :004064D3 83F8FF cmp eax, FFFFFFFF //-1=5-6, т.е 7я цифра = 6 :004064D6 752B jne 00406503 :004064D8 8B44240C mov eax, dword ptr [esp + 0C] :004064DC 25FFFFFF7F and eax, 7FFFFFFF :004064E1 0B442408 or eax, dword ptr [esp + 08] :004064E5 741C je 00406503 :004064E7 0FBE4107 movsx eax, byte ptr [ecx+07] //eax = 8я цифра :004064EB 2BD0 sub edx, eax //edx = 0 - 8я цифра :004064ED 83FAFF cmp edx, FFFFFFFF //-1=0-1, т.е. 8я цифра = 1 :004064F0 7511 jne 00406503 :004064F2 80790800 cmp byte ptr [ecx+08], 00 // проверка есть ли в серийнике 9 символов (в нём 8 цифр!) :004064F6 750B jne 00406503 * Possible Reference to Menu: MenuID_0001 :004064F8 B801000000 mov eax, 00000001 // Класс! Всё зарегано! :004064FD 5E pop esi :004064FE 5B pop ebx :004064FF 83C418 add esp, 00000018 :00406502 C3 ret Теперь мы знаем, что серийный номер - 01553161 и что можно использовать любое имя. Это довольно лёгкий пример, но я видел, что 'профи' от warez-сцены делают патчи к этой игре. Я не знаю. почему они не релизят серийники, может упражняются в патчинге? Но я предпочитаю serial. Помните: если используете программу - купите её! Happy cracking! Lomax