.. :: ____ _ :: _ ____ _ ____ _ ____ ____\ (________) _/________) _ |_____) \ _____ \\__ _______/ _| /__ | _ \/ /___ / | _ | _ | \ | __// … \\___| \___| \____| \_____| \ … +-------|______//--|_______//---|______//pO!i|_______//-----+ .. ____ _ ____ _ <<:::::::::::::::::::: :: … tEAM-fT … ____| (___\ (_______ ___ ___ ___ ___ ___ ___ ___\ _ _______/__ \\__\\__\\__\\__\\__\\__\ \\___ ___/ | ___// .. … / |__/\___| \ … :: +-----\\______|-------|_______//--+ :: :: TEAM FIFTY THREE TUTORiALS #12 :: MetaProducts Offline Explorer Enterprise 4.2.2390 SR1 -----[Вступление] OEE - это не плохой оффлайн браузер с большим количеством настроек. Ломал я его уже довольно давно, посмотрим, что же изменилось в плане защиты за это время. Ну приступим. -----[Основная часть] Посмотрим, что тут у нас в oe.hlp: You can register by cash, check or money order. IF YOU SEND A CHECK IT MUST BE PAYABLE IN US DOLLARS AND DRAWN ON A US BANK OR YOUR CHECK WILL BE RETURNED. IF YOU SEND A MONEY ORDER IT MUST BE PAYABLE IN US DOLLARS. US $30.00 for Offline Explorer (standard); US $70.00 for Offline Explorer Pro; US $400.00 for Offline Explorer Enterprise. Какой ужас, аж 400 гринов, ну они совсем обнаглели, откуда у бедного студента такие деньги =(. Файл щапакован ASPack 2.12b, но это не проблема. Можете воспользоваться каким-нибудь распаковшиком или ручками снять это чудо. OEP: 00470950 Import: 004AA258 Size: 00000C00 Я распаковывал руками и был небольшой косяк с импортом, размер пришлось задать в ручную, а потом сделать Show Invalid и Cut. Что же за ограничения? Это триал в 30 дней, наг, плохие надписи в заголовке и о программе. Будем лечить =) медсестра скальпель!. Ломаль можно по-разному, но я прицепился к проверки правильности введенного с/н. Запускаем программу в олли, жмём "Справка -> О программе -> Регистрация", вводим любой с/н (100333444) и жмём ок. Вылетит плохое окошко =( Стандартный MessageBox. Нажмём в олли паузу, остановимся вот в таком месте: 004AC320 |. 53 PUSH EBX ; /Style = MB_OK|MB_ICONHAND|MB_APPLM> 004AC321 |. 57 PUSH EDI ; |Title = "Offline Explorer Enterpri> 004AC322 |. 56 PUSH ESI ; |Text = "Sorry, registration inform> 004AC323 |. 8B45 FC MOV EAX,[LOCAL.1] ; | 004AC326 |. 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30] ; | 004AC329 |. 50 PUSH EAX ; |hOwner = 00000AC0 ('MetaProducts O> 004AC32A |. E8 95DDF5FF CALL ; \MessageBoxA 004AC32F |. 8945 F8 MOV [LOCAL.2],EAX <-- Мы Тут Ну понятно, это и есть наше плохое окно, а конкретно его вызов. Намжем в олли F9, потом "ок" в плохом окне и опять вернемся к олли. Потрасcируем до выхода из процедуры. Когда выйдем увидим вот такой код: 007D23CE |. BA 6C277D00 MOV EDX,007D276C ; ASCII "Sorry, registration informa> 007D23D3 |. E8 F835C3FF CALL 004059D0 007D23D8 |. 8B45 C8 MOV EAX,[LOCAL.14] 007D23DB |. E8 A437C3FF CALL <@System@@LStrToPChar$qqrx17System@AnsiString> 007D23E0 |. 8BD0 MOV EDX,EAX 007D23E2 |. A1 DC218A00 MOV EAX,DWORD PTR DS:[8A21DC] 007D23E7 |. 8B00 MOV EAX,DWORD PTR DS:[EAX] 007D23E9 |. 59 POP ECX ; 00CBE684 007D23EA |. E8 559ECDFF CALL <@Forms@TApplication@MessageBox$qqrpxct1i 00B4:TApplic> 007D23EF |. 85F6 TEST ESI,ESI <-- Мы Тут 007D23F1 |. 75 11 JNZ SHORT 007D2404 Ой, как хорошо, мы вышли из процедуры показа плохого окна, а давайте пролистаем код немного вверх, и что же мы увидим: 007D230A |. E8 C137C3FF CALL <@System@@LStrCmp$qqrv> 007D230F |. 75 0F JNZ SHORT 007D2320 007D2311 |. 8D45 F4 LEA EAX,[LOCAL.3] 007D2314 |. BA 24277D00 MOV EDX,007D2724 ; ASCII CR,LF,"This code is for Offline Expl> Ага сообщение о том, что наш код не такой =), значит листаем еще выше, пока не увидим: 007D214C |. E8 333AC3FF CALL <@System@@LStrToPChar$qqrx17System@AnsiString> 007D2151 |. 8BC8 MOV ECX,EAX 007D2153 |. BA 48247D00 MOV EDX,007D2448 ; ASCII "Thank you for registering!" "Thank you for registering!" - заветная надпись, так теперь надо посмотреть, что же происходит в этой процедуре. Поставим бряк на адресс 007D1FEC и нажмем F9. Теперь введем код заново, нажмем "ок" в окне регистрации и окажимся в олли. Трассируем до места: 007D203D |. E8 6ACC0500 CALL 0082ECAC 007D2042 |. 84C0 TEST AL,AL 007D2044 |. 0F84 3D010000 JE 007D2187 <-- Этот прыжок нам все портит Значит зайдем в процедуру CALL 0082ECAC. Чтобы прыжок не выполнился, в регистре AL должно быть чисто <> 0. Процедура не большая, осмотрим ее всю и выясним где же заноситься значение в регистр AL: 0082ECD6 |. E8 B1ECFFFF CALL 0082D98C 0082ECDB |. 8845 FF MOV BYTE PTR SS:[EBP-1],AL ... 0082ED44 |. 8A45 FF MOV AL,BYTE PTR SS:[EBP-1] // можно поправить уже тут Так, давайте лучше заглянем в процедуду CALL 0082D98C и посмотрим, где же там заноситься значение в AL. Скажу сразу это и есть процедура проверки с/н. Кому интересно, можете копаться, там и блэк лист (можно взять старый или забаненый ключик и пропатчить), а мне что-то лень =). Потрассируем и выйдем к концу процедуры (т.к. наш с/н не пройдет ниодной проверки): 0082E70F |. 8A45 F7 MOV AL,BYTE PTR SS:[EBP-9] <-- то самое место 0082E712 |. 5F POP EDI Меняем MOV AL,BYTE PTR SS:[EBP-9] на MOV AL,1 (заносим 1 в AL), станет: 0082E70F B0 01 MOV AL,1 0082E711 90 NOP 0082E712 5F POP EDI Жмём в олли правой кнопкой на код, потом "Copy to executable -> All modification -> Copy all -> Save file". Запусти пропатченный файл, чтобы проверить. Надписи в заголвке нету, нага тоже, триала тоже, прога зарегена! =) Теперь можно воспользоваться любым инлайн патчером (т.к. оригинальный ехе запакован). Я предпочитаю HzorInline 1.3b. -----[Заключение] И опять, не очень сложно же, правда? Надо только немного пораскинуть мозгами, ну и небольшой опыт не помешает, ведь искать "самую главную" проверку можно разными путями, а каким быстрее, тут вам поможет чутье. На этом пока все. [30.05.2006 by ~Hellsp@wN~] ...:::Copyrights © 2006 ~Hellsp@wN~:::...