Как взломать WinAmp 5 автор.......: IceNeo\HTB перевод.....: NightCat\t53 цель........: Winamp5 защита......: serial + regname вывод.......: crack инструменты.: SoftICE v4.05 Перейдём сразу к делу. ;) В окне "Winamp Pro Registration Key Entry" в полях "Registration name" и "Registration key" напишем что-нибудь. Вообще-то смысла в этом мало, т.к. в этом тексте описано, как сломать прогу с помощью патча. Но если кому-то удастся раскопать процедуру генерации кода, то дайте знать. Я вот вписал только свой ник. :) Ладно, идём дальше, ставим breakpoint на чтение данных из текстогового поля: :bpx GetDlgItemTextA После нажатия "OK" SoftICE выскакивает два раза (один раз, когда читается имя из "Registration name" и второй раз, когда читаются данные из "Registration key"). Пропускаем первый раз, остаёмся на втором и видим: 0042B509 FFD6 CALL ESI 0042B50B 8D45C0 LEA EAX,[EBP-40] 0042B50E 33F6 XOR ESI,ESI 0042B510 50 PUSH EAX 0042B511 8D85C0FBFFFF LEA EAX,[EBP+FFFFFBC0] 0042B517 46 INC ESI 0042B518 50 PUSH EAX 0042B519 56 PUSH ESI 0042B5A1 885DDF MOV [EBP-21],BL 0042B51D E861700100 CALL 00442583 <-----------\ 0042B522 83C40C ADD ESP,0C |---- тут проверяется серийник 0042B525 E86B720100 CALL 00442795 <-----------/ 0042B52A 391D80824600 CMP [00468280],EBX <----------- если значения EBX 0042B530 7406 JZ 0042B538 и 00468280 одинаковы 0042B532 56 PUSH ESI , то прыгаем... 0042B533 E93FFFFFFF JMP 0042B477 0042B538 8D45E0 LEA EAX,[EBP-20] 0042B53B 50 PUSH EAX 0042B53C 8D85C0FDFFFF LEA EAX,[EBP-0240] 0042B542 50 PUSH EAX 0042B543 56 PUSH ESI 0042B544 E83A700100 CALL 00442583 Похоже, что всё довольно просто, но когда jump с оффсета 0042B530 не выполняется, то это всего лишь не вызывает сообщения об ошибке серийного номера, а программа и дальше будет незарегистрированной. Тут очень интересная вещь творится в 0042B52A. Если серийник неправильный, то в 00468280 записывается 0 и под оффсетом 0042B52A сравнивается с EBX в котором тоже 0. А если серийник правильный, то в 00468280 должно записываться что-то другое, а не 0. В таком случае удаляем предыдущий брейкпоинт и ставим новый на запись и чтение из 00468280: :bpm 00468280 rw И вот тут выскакивает SoftICE: 004427EB 83258082460000 AND DWORD PTR [00468280],00 004427F2 C9 LEAVE 004427F3 C3 RET Этот кусочек кода отвечает за то, чтобы в 00468280 находился 0. Мы должны сделать так, чтобы в 00468280 всегда было нечто отличное от нуля. Есть много путей, но я предлагаю модифицировать байты в оффсете 004427EB: с 83258082460000 на 83058082460001 что даёт нам это: 004427EB 83058082460001 ADD DWORD PTR [00468280],01 004427F2 C9 LEAVE 004427F3 C3 RET таким образом в 00468280 всегда будет добавляться 1, так что там всегда будет что-то отличное от нуля. Убираем все брейкпоинты, изменяем с помощью SOFTICE нужные байты в 004427EB так, как описано выше (:e 004427EB) и пробуем еще раз зарегать Винамп. Никаких вредных окошек не выскакивает, в поле "Registration status" написано, что наш серийник правильный :D, а выше написано, что все опции Winamp-a Pro включены. :) Нас даже поблагодарили за покупку. :] В конце скажу только, что во время запуска и использования Pro опций Winamp'a для проверки серийника, записаного в реестр запускается эта же процедура. Так что нужно в файле "winamp.exe" с помощью hex-редактора сделать такие же изменения, как и в памяти. ====================================================================== TEAM-53 TUTORiALs \\ www.BSUiR.com \\ #team-53, IRC.BY, IRC.BYNETS.ORG ======================================================================