_|________ ______|_ ____: /_ ____\ :______ __|____ _____|____|_________ | | \__ \_ |___ | |_ / / _| (_________________/_________________) TEAM-53 TUTORiALS PACK NUMBER EiGHTTEEN Эмуляция Hmemcpy в WinXP ------------------------ Предмет этой статьи - показать, как при помощи OllyDbg и SoftICE можно определить, куда устанавливать в WinXP точку останова, чтобы добиться эффекта, подобного работе API функции Hmemcpy в Win9x. Это НЕЧТО - не есть API функция. Это НЕЧТО - просто адрес в модуле USER32, который получил название point-h. !!! point-h не является универсальной постоянной. Он уникален для каждой системы !!! Определить point-h нам поможет Crackme v1.0 от Cruehead'а. Хотя может подойти и любая другая программа. -------------------------------------------------------- Point-h через OllyDbg (идея принадлежит Ricardo Narvaja) 1. Загрузите CRACKME.EXE в Olly. 2. Поставьте условную точку останова на API TranslateMessage. Для этого: а) Откройте список импортов [ Ctrl + N ] б) Найдите API TranslateMessage. в) Правой кнопкой мыши по строке "USER32.TranslateMessage". г) В появившемся меню выберите пункт "conditional log breakpoint on import". 3. Теперь определяем условия для срабатывания точки останова. В поле 'Condition' пишем MSG == 201 В поле 'Expression' пишем MSG Decode value of expression as: Assume by expression. Для 'Pause program' установите значение 'On condition'. ЗАМЕЧАНИЕ: В некоторых системах условие MSG == 201 может не выполняться. В этом случае ставьте MSG == 202. 4. Запускайте приложение [ F9 ], вводите какие-нибудь регистрационные данные (Name: PowerUser, Serial: 162534) и давите 'OK'. 5. Отладчик останавливает выполнение процессав модуле USER32: 77D43DD3 56 PUSH ESI 77D43DD4 8B7424 08 MOV ESI,DWORD PTR SS:[ESP+8] 77D43DD8 66:817E 08 E500 CMP WORD PTR DS:[ESI+8],0E5 77D43DDE 0F84 16870300 JE USER32.77D7C4FA 77D43DE4 6A 00 PUSH 0 77D43DE6 56 PUSH ESI 77D43DE7 E8 9EFFFFFF CALL USER32.TranslateMessageEx 77D43DEC 5E POP ESI 77D43DED C2 0400 RETN 4 6. Откройте карту памяти [ Alt + M ]. Затем [ Ctrl + B ] для поиска строки. 7. В окне поиска введите серийный номер, использовавшийся при регистрации в CRACKME.EXE (162534) и жмите 'OK'. В окне дампа увидите: 0014A698 31 36 32 35 33 34 00 00 00 00 00 00 00 00 00 00 162534.......... 0014A6A8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0014A6B8 AB AB AB AB AB AB AB AB 00 00 00 00 3C 00 95 00 ............<...8. Установите точку останова на доступ к памяти, где хранится введенный с/н. Для этого выделите серийник в окне дампа и кликните правой кнопкой мыши. В появившемся меню: Breakpoint -> memory, on access 9. Запускайте приложение [ F9 ]. Olly остановится прямо на point-h: 77D6067C F3:A5 REP MOVS DWORD PTR ES:[EDI], DWORD PTR DS:[ESI] --------------------- Point-h через SoftIce Тут все еще проще. Загрузите CRACKME.EXE, введите какие-нибудь имя (PowerUser) и серийник (615243) в соответствующие поля ввода, затем поставьте в SoftICE условную точку останова на TranslateMessage: bpx TranslateMessage if @(esi+4)==201 [ввод]или, если WM_LBUTTONDOWN (201h) не срабатывает bpx TranslateMessage if @(esi+4)==202 [ввод](по адресу [esi+4] на входе в API хранится код сообщения) В окне регистрации CRACKME.EXE жмите 'OK'. После всплытия окна отладчика, найдите, где в памяти хранится введенный с/н: S 00000000 L ffffffff '615243'Он покажется в окне данных. Теперь осталось поставить точку останова на память, где он хранится: bpm xxxxxxxx Rгде xxxxxxxx - это адрес, с которого начинается введенный вами с/н. SoftICE тормознет прямо после point-h: :77D6067C F3A5 REPZ MOVSD <------ point-h :77D6067E 8BC8 MOV ECX, EAX <---- тут приземляется SoftICE :77D60680 83E103 AND ECX, 03 :77D60683 F3A4 REPZ MOVSBИтак, для моей системы point-h равен 77D6067C. Теперь можно ставить на него точки останова (bpx 77D6067C), подобно тому, как мы делали bpx hmemcpy в старенькой и уже поросшей мхом 98-ой. На сегодня все. Keep on reversin'... -------------------------------------------------------------------------------- Дата: ноябрь 18, 2OO3 Автор: (ry0 E-mail: cryo#cydem.org.ua ICQ #: l79S2lS