<< Все статьи по взлому Исследование Karaoke GALAXY Player 4.1.0.0 Обсудить эту статью >>
Автор: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

<< Все статьи по взлому Обсудить эту статью >>

ALIEN Hack Team - http://ahteam.org
Только для образовательных целей