| Автор: | bi0w0rM [AHTeam] |  
        | Уровень: | Для опытных |  
        | Программа: | Karaoke GALAXY Player 4.1.0.0 |  
        | Размер: | Ок. 1 Мб |  
        
        
        | Инструменты: | PEBrowse или OllyDbg 1.09, PEditor, ImpRec, DeDe, HIEW, Win32DASM |  
       
       
      "Луч зари К стене приник Я слышу звон ключей Вот и все... Палач мой здесь Со смертью на плече"  [[iNTR-0] Как-то давно еще в лицее надо было найти на праздник фонограмму Ленинграда "WWW". Так как у меня есть инет, все естественно свалили на меня. Я ехал домой и думал: где ж я искать это буду? Есть ли такая фонограмма в природе вообще? Да даже если есть, то хрен я там выкачаю ее, так как это точно жирная mp-три-ха, а инета было мало :(( И действительно, Яндекс мало что мне дал. И тогда я просто набрал нашару сайт: www.karaoke.ru и оказалось есть такой сайт! Более того, искомая фонограмма там оказалась и качать пришлось на редкость мало - файл был с расширением .kar и весил всего-то несколько килобайт. Но открыть его надо было специальной прогой, звалась она Karaoke GALAXY Player 4.1.0.0, ну качать было около мегабайта. Прога была успешно скачана, фанера была перекатана на кассету(правда музыка от оригинала отличалсь). Прога была шароварная и взлом ее я оставил напотом. Потом решил все-таки засесть за нее и вот что я накопал..
  [[cRACKiNG] Прога запакована каким-то убогим паковщиком, скорее всего это частный случай, когда программеры таки сами решили хотяп запаковать программу. Ну для распаковки мне не помогли бы никакие авто-распаковщики, так как, самый прикольный GUW32 после установки XP не стал запускаться, а ProcDUMP не смог(может и смог бы, если скрипт написать). С софтайсом у меня пока тоже проблемы. Итак, берем с сайта www.smidqeonsoft.com или с родного www.wasm.ru ;) софтину PEBrowse Professional Interactive (супер реальное название!). Может у вас тоже проблемы с софтайсом, но я уже не считаю, что это уж такая кульая вещь. Его реально может заменить PEBrowse или наконец OllyDbg 1.09! Я удачно распаковывал прогу с любым из этих отладчиков. 
  Я сейчас быстро опишу устройство паковщика. Не задавайте вопросов: "Откуда он знал, где переход на OEP??", я еще во времена WinME у себя на компе все исследовал софтайсом, но и тут догадаться нетрудно. Открываем прогу в PEBrowse(или в OllyDbg). В OllyDbg 1.05 выскочила "ошибка", то есть вам нужно нажать Shift+F9 и анализ продолжится дальше. Вот куда нас привел PEBrowse:
 PID: 1440 TID: 240 - Stack Contents for 0x000000CC 0x000000CC:  0x77F83E02: RtlCaptureContext + 0x09F0 0x77F65EC2: RtlConvertExclusiveToShared + 0x0282 0x77F68CA1: RtlpEnsureBufferSize + 0x00C7  Проходим эту фигню по F10 и попадаем в начало кода распаковщика:
 Disassembly of 0x004596EE in Galakar.exe + 0x4596EE: NOP                                              0x4596EF: NOP                                              0x4596F0: NOP                                              0x4596F1: JNZ      0x4596F3       ; SYM:0x000596F3; (*+0x2)    0x4596F3: JMP      0x513000       ; SYM:0x00113000; (*+0xB990D) ; <==0x004596F1(*-0x2)   ;********************************************************************************   0x513000: PUSHAD                  ; <==0x004596F3(*-0xB990D)                                       Если вы используете OllyDbg, то остановитесь                                       сразу же на этом коде. И вместо F10 в OllyDbg                                       надо нажимать F7(Step).  После выполнения "JMP      0x513000"  произойдет переход вот сюда:
 Disassembly of 0x00513001 in Galakar_non.exe + 0x513001: CALL     0x513006       ; SYM:0x00113006   0x513006: POP      EBP            ; <==0x00513001(*-0x5)   0x513007: SUB      EBP,0x43A8EA   ; SYM:0x0003A8EA ; CODE(?):0x8A 0x75 0x45 0x40   0x51300D: MOV      EAX,0x43A8E4   ; SYM:0x0003A8E4 ; CODE(?):0x0F 0xDE 0xCC 0xD5   0x513012: ADD      EAX,EBP                                 0x513014: SUB      EAX,DWORD PTR [EBP+0x43AD78]         ; SYM:0x0003AD78   0x51301A: MOV      DWORD PTR [EBP+0x43AD84],EAX         ; SYM:0x0003AD84   0x513020: CMP      BYTE PTR [EBP+0x43AD6E],0x0          ; SYM:0x0003AD6E   0x513027: JNZ      0x51303E                             ; SYM:0x0011303E   0x513029: INC      BYTE PTR [EBP+0x43AD6E]              ; SYM:0x0003AD6E   0x51302F: CALL     0x513051                             ; SYM:0x00113051   0x513034: CALL     0x5132AC                             ; SYM:0x001132AC   0x513039: CALL     0x513348                             ; SYM:0x00113348   0x51303E: MOV      EAX,DWORD PTR [EBP+0x43AD70]         ; SYM:0x0003AD70   0x513044: ADD      EAX,DWORD PTR [EBP+0x43AD84]         ; SYM:0x0003AD84   0x51304A: MOV      DWORD PTR [ESP+0x1C],EAX                0x51304E: POPAD                                            0x51304F: JMP      EAX  Кликаем на последнюю команду JMP EAX и, если вы в PEBrowse в контекстном меню выбираете Add Breakpoint, а если в OllyDbg, то просто нажимаем F2. Мы тем самым поставили брейкпоинт, то есть дальнейшие инструкции программы будут выполняться и остановятся на адресе 51304F. Пустим программу "на волю", пусть брякнется. В PEBrowse надо нажать F5, а в OllyDbg F9. Теперь F10(в Олли F7) и мы на OEP (original entry point).
 PID: 1440 TID: 240 - Stack Contents for 0x004C9CC0 0x004C9CC0: Galakar_non.exe+0x000C9CC0   Ну знающие скажут: какой же это OEP? Это муть какая-то!  Не пугайтесь, не муть, я в софтайсе проверял в свое время :) Таперича берем PEditor by y0da (y0da.cjb.net, если там что-то есть), жмем Tasks и процессу Galakar дедаем Full Dump, сохраняем дамп в папке проги. Теперь можно выйти из отладчика(крестик вверху окна есть у любого отладчика :)). Какой там у нас OEP? С9СС0б вот заходим в HIEW и проходим на этот оффсет-адрес и смотрим:
 push ebp mov ebp,esp add esp, -010  Да, это нормальный OEP. Теперь откроем дамп в PEditor by y0da и внесем изменения: пропишем Entry Point реальный - 000C9CC0. Теперь импорт... Вообще, раньше я забивал на таблицу импорта, когда жил в win9x, но потом крупно обломался, когда не стали работать мои распакованные проги, что я накрэкал. Стало быть, если у вас win2k или XP, то обязательно нужно восстановить импорт!Запускаем оригинальную прогу(пакованную) и запускаем ImpRec, выбираем в списке процессов наш galakar, прописываем OEP C9CC0 и жмем IAT AutoSearch(автопоиск таблицы импорта), потом Get Import. Смотрим: импорт не запаганен, то есть у всех библиотек стоит YES, осталось дело за малым: нажимаем Fix Dump и выбираем наш дамп. Теперь, если все проделано ПРАВИЛЬНО, то дамп должен запускаться. Теперь сравните размер оригинального файла и распакованного - заметно отличаются, вот так вот! Теперь, DeDe.. Вообще DeDe я бы назвал не делфи-декомпилером, а vcl-декомплером, так как он декомпилит любые проги, написанные на делфи или на c++builer, главное, чтобы был(а) использован(а) VCL. А наша прога именно такая! Открываем прогу(разжатую) в DeDe и декомпилим. В чем вся проблемы то? А в том, что прога везде снует своим сообщением: "Вы юзаете незарегенную версию", осталось еще слово "чих-пых" приписать :) Показывается оно с опр. интервалом, а значит тут либо заюзано API SetTimer, либо делфи-компонент TTimer(который в последствии тоже юзает SetTimer ;)). Заходим в Procedures и смотрим в юните un_Galakar событие MessageTimerTimer... ну тут ослу понятно, что это именно тот таймер :) Кстати, включать или нет таймер решается где-то при загрузке, но лень это все трейсить, поэтому я решил запороть сам таймер >;) Ага, видим привычное для делфи событий начало:
 004C94E8   55                     push    ebp 004C94E9   8BEC                   mov     ebp, esp 004C94EB   6A00                   push    $00 004C94ED   53                     push    ebx 004C94EE   8BD8                   mov     ebx, eax 004C94F0   33C0                   xor     eax, eax 004C94F2   55                     push    ebp 004C94F3   6863954C00             push    $004C9563  И конец этой процедуры:
 ****** END | 004C956A   5B                     pop     ebx 004C956B   59                     pop     ecx 004C956C   5D                     pop     ebp 004C956D   C3                     ret  Заходим в HIEW, меняем push 00 на jmp 4C956A ;) и теперь таймер перескакивает показывание окна и все зашибись! Да, но только когда будете прописывать в HIEW, не забудьте, что надо писать не jmp 4C956A, а jmp C956A, так как HIEW работает с физическими адресами. Ну что, убит наг и все чих-пых. Только прога блин шпионская, так что с ней в инет ЛУЧШЕ не выходить и вообще лучше не ломать ее, а то вломятся злые дяди и комп заберут :)) Почему шпионская? Ну может это и не так, но в листинге w32dasm я наше вот что:
 Import Module 020: wsock32.dll
   Addr:001162F0 hint(0073) Name: WSAStartup  Addr:001162FE hint(006F) Name: WSAGetLastError  Addr:00116310 hint(0039) Name: gethostname  Addr:0011631E hint(0034) Name: gethostbyname  Addr:0011632E hint(0033) Name: gethostbyaddr  Addr:0011633E hint(0017) Name: socket  Addr:00116348 hint(0015) Name: setsockopt  Addr:00116356 hint(0014) Name: sendto  Addr:00116360 hint(0013) Name: send  Addr:00116368 hint(0012) Name: select  Addr:00116372 hint(0011) Name: recvfrom  Addr:0011637E hint(0010) Name: recv  Addr:00116386 hint(0009) Name: htons  Addr:0011638E hint(000D) Name: listen  Addr:00116398 hint(000B) Name: inet_ntoa  Addr:001163A4 hint(000A) Name: inet_addr  Addr:001163B0 hint(0009) Name: htons  Addr:001163B8 hint(0004) Name: connect  Addr:001163C2 hint(0003) Name: closesocket  Addr:001163D0 hint(0002) Name: bind  Addr:001163D8 hint(0001) Name: accept  Зачем нужно API для работы с сетью? Во-во... Может она так обновления спрашивает, не знаю... Вообще, если вы сломали прогу для работы с инетом, то велика вероятность, что могут запалить(ну ловить может и не станут:). Так что проги для работы с инетом нужно тщательно проверять. но наша прога таковой не является и оффициально не зарегистрирована, и по сетке она будет передавать, что это unreg-версия... Ну не будет же она байты попатченные передавать! :) Мы то сделали что-то вроде этого: глотка тут же соединена с кишкой, пропуская желудок :))))))
  [[oUTRO] Всем пока, потом еще что-нибудь напишу, а пока вот мои кААрдинаты: bioworm@mail.ru ICQ: 257390724 bioworm.narod.ru 
     | 
   
 
     |