![]() |
eXeL@B —› Вопросы новичков —› Обсудим ? топик не совсем новичка. |
Посл.ответ | Сообщение |
|
Создано: 17 ноября 2006 09:28 · Личное сообщение · #1 В крякерстве программ , я конечно не новичок. Ломал ДОСовские программы до 98Windows. C Ольками,Дизасмами, Пе эксплоррерами не знаком ,да и вообще с технологиями профессионального крякерства. С появлением достойного Интернета, и кучи крякерских сайтов, вообще отпала необходимость ломать что ни будь самостоятельно, кроме специализированных профессиональных программ , типа (из последних ) Индийский АРМ для японского станка для установки радиоэлементов. Но… Однажды меня заинтересовало взломать StarForce. Когда я его сломал, придумал (как мне кажется) оригинальный способ лома программ. Суть его (способа лома) в следующем: 1. В исследуемой программе заменяются все данные kernel32.dll на _ernel32.dll ( также с User32 , Advapi32 и т.п.по необходимости) 2. Пишется DLL _ernel32.dll, основная задача которой писать ЛОГ вызываемых функций. Пример: kernel32 $10001F56 InterlockedExchange $22223333 kernel32 $10001F64 InterlockedExchange $00000ED8 kernel32 $10001F81 GetModuleFileNameA $00000000 User32 $10001F8D EnumWindows User32 $10001BD1 GetWindowThreadProcessId kernel32 $10001BF3 OpenProcess $00000188 kernel32 $10001BFE CloseHandle kernel32 $10001FB3 InterlockedExchange $00000EDC User32 $10001FCD SetWindowsHookExA User32 $10001FF6 GetMessageA User32 $0040FC45 CallNextHookEx User32 $10002002 UnhookWindowsHookEx User32 $00409EEA CallWindowProcA User32 $0040FC45 CallNextHookEx User32 $0040FAB0 CallWindowProcA //после имени библиотеки адрес возврата. Причем _хххх.dll это мои программы, и о любой функции я могу вести расширенный лог, том числе подменять входные или ответные данные любой функции автоматически. 3. Самый тяжелый. Просматривается огромный первоначальный Лог, и правятся DLL, чтобы в логе были только заинтересовавшие функции. ( как пример ответ на IsDebuggerPresent=0, хотя в данном случае он и так false ) 4.В нужных местах функций вставляется mov [$ffffffff],edx. И на вопрос системы ОТЛАДИТЬ загружаем программу в мой любимый отладчик Delphi. 5. Тут как повезет (Анализ, анализ и еще раз анализ) /* повезет - это время на слом программы*/ Хочется обсудить с участниками форума , достоинства о недостатки данного метода в сравнении с традиционными. К достоинствам явно относится - приаттачиные библиотеки, о которых исследуемый процесс даже не догадывается. С удовольствием отвечу на любой вопрос , тех кто не понял пункты 1..2..3..4. Ну и собственно внемлю наставлениям гуру, которые предложат качественные и удобные технологии лома программ. P.S. примеры программ, если таковые понадобятся, буду проводить на Delphi, так как на Си пишу программы только для микроконтроллеров. ![]() |
|
Создано: 17 ноября 2006 12:54 · Личное сообщение · #2 |
|
Создано: 17 ноября 2006 16:57 · Личное сообщение · #3 Executioner пишет: или они будут вызываться из наших фиктивных библиотек? ну это само собой разумеющееся, я надеюсь. Не проще ли не трогать прогу, а сделать следующим образом: библиотеку Kernel32 переименовать в _kernel32 и т.д. Написать свою длл Kernel32 в которой будут теже ф-ии, что и в исходной с соответствующими поправками и вызовом оригинальных ф-ий. Ну в общем это не важно. Теперь о методе. ИМХО имеет место быть. Но в большинстве случаев окажется нерентабельным и приведет к излишним тело/мозго - движениям. Ибо пункт 3 осиливанию на первый взгляд не подлежит. ----- Blame the victim! ![]() |
|
Создано: 17 ноября 2006 22:04 · Личное сообщение · #4 Executioner а вы собираетесь полностью переписать все библиотеки винды? и MFC тоже? и добавить туда ведение логов? или как? на сколько я понимаю, библиотеки должны выполнять нужные функции. или они будут вызываться из наших фиктивных библиотек? Пример: // программу на Delphi из любой Dll ,пришет за меня другая программа // в нее нужно только загрузить исходник и пример внизу получается автоматически. library _ERNEL32; uses SysUtils,windows; const sk='_ERNEL32'; C_CreateProcessA=97; C_ExitProcess=176; var f:text; s:string; _esp,d,nf:Dword; pd,:^Dword; function M_CreateProcessA:Dword;stdcall; external 'KERNEL32.DLL' name 'CreateProcessA' function M_ExitProcess:Dword;stdcall; external 'KERNEL32.DLL' name 'ExitProcess' procedure obr1; begin case nf of C_CreateProcessA: s:='CreateProcessA'; C_ExitProcess: s:='ExitProcess'; end; assignfile(f,sk+'.txt'); append(f); dword(pd):=_esp;d:=pd^; s:=sk+' $'+inttohex(d,8)+#9+s;writeln(f,s); closefile(f); end; function CreateProcessA:Dword;stdcall; begin asm mov _esp,esp mov nf,C_CreateProcessA call obr // пишу лог jmp M_CreateProcessA // вызываю стандартную функцию end; end; function ExitProcess:Dword;stdcall; begin asm mov _esp,esp mov nf,C_ExitProcess call obr jmp M_ExitProcess end;end; exports CreateProcessA, ExitProcess; begin assignfile(f,sk+'.txt'); rewrite(f); closefile(f); end. 1nn0cent Но в большинстве случаев окажется нерентабельным и приведет к излишним тело/мозго - движениям. Ибо пункт 3 осиливанию на первый взгляд не подлежит. З пунк делаю так: Запускаю программу жду секунду, завершаю процесс принудительно. Смотрю лог, ремлю часто используемые бесполезные функции обычно: C_InitializeCriticalSectionAndSpinCount:; C_GetCurrentThreadId: ; C_MultiByteToWideChar: ; C_DeleteCriticalSection: ; C_LeaveCriticalSection: ; C_EnterCriticalSection: ; C_GetCurrentProcessId:; C_HeapFree:; C_HeapReAlloc:; C_GetProcessHeap:; C_TlsGetValue:; C_SetLastError:; C_GetLastError:; C_HeapAlloc:; C_LocalFree:; C_InterlockedDecrement:; C_InterlockedIncrement:; C_LocalAlloc:; Далее лог получается небольшим и вполне читабельным. А вот насчет излишеств тело/мозго – движениям вопрос спорный, я человек ленивый , а в данном случае большую часть работы по нахождению куска кода для исследования, выполняется автоматом. ![]() |
|
Создано: 17 ноября 2006 23:08 · Личное сообщение · #5 Всё это лажа IMHO. IsDebuggerPresent можно обмануть в ring3, а в ring0 это нах не надо, там и так всё можно найти, что и делает StartForce. Лог АПИ не поможет в обходе перехватов Debug векторов, декомпиляции ВМ, и много много другого. Если честно, то я вообще не вижу хоть какой то пользы в перехвате и логировании АПИ функций в StarForce ибо в нем вся защита построена на драйверах, виртуальной файловой системе, и перехвате int1, int3 векторов. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 17 ноября 2006 23:40 · Личное сообщение · #6 |
|
Создано: 18 ноября 2006 06:10 · Личное сообщение · #7 |
|
Создано: 18 ноября 2006 07:17 · Личное сообщение · #8 |
|
Создано: 18 ноября 2006 07:22 · Личное сообщение · #9 PE_Kill пишет: Если честно, то я вообще не вижу хоть какой то пользы в перехвате и логировании АПИ функций в StarForce То что в StartForce не нужны логии АПИ функций я, соглашусь, если заранее известно как зашита устроена. Но я ее ломал с нуля, и сначала просто не знал, как к ней подступиться. Суть поднятой мной темы , не в том как обойти IsDebuggerPresent или метод защиты StartForce. Просто я хотел обсудить: Берется программа ХХХ ее нужно взломать, потому что жаба душит платить за нее 1000 зеленых. С чего начать исследования программы. Какие файлы программа подгружает, что делает с реестром, какие окна открывает, и главное в какой последовательности. Важно также оперативно подменять , реальные данные на левые и посмотреть как среагирует на них программа. Недавно начал изучать, понемногу, OllyDbg и PE Explorer , и почитываю форум. Не совсем новичок – только новичок в использовании крякерских программ Executioner Kerberos это как? Где почитать? tundra37 пишет: Перехват АПИ идея не новая и давно реализованная. Гораздо проще, причем. С удовольствием бы почитал. ![]() |
|
Создано: 18 ноября 2006 07:35 · Личное сообщение · #10 |
|
Создано: 18 ноября 2006 08:02 · Личное сообщение · #11 Xserg пишет: Какие файлы программа подгружает, что делает с реестром, какие окна открывает, и главное в какой последовательности если вкратце: защита либо в exe,либо в protect.dll (последняя как правило маскируется под другим именем), само собой защита от отладки получше чем IsDebugPresent +шифрование кусков кода итого: из 1000 крекеров реально StarForce сломает только 1 и то наполовину ![]() |
|
Создано: 18 ноября 2006 08:35 · Личное сообщение · #12 |
|
Создано: 18 ноября 2006 09:17 · Личное сообщение · #13 |
|
Создано: 18 ноября 2006 11:10 · Личное сообщение · #14 |
|
Создано: 19 ноября 2006 00:35 · Личное сообщение · #15 |
|
Создано: 20 ноября 2006 02:34 · Поправил: 0xy · Личное сообщение · #16 Xserg А я считаю твою наработку полезной (по крайней мере, для моего уровня) А Kerberos у меня ваабще не фурычит, т.к. юзаю Мастдай 9x. Буду признателен за прогу, которая клепает dll-ки-переходники. Только меня интересует чисто переходник, без логирования, типа:
В идеале должен получиться код: просто Jmp на соответствующую функцию оригинальной dll. Прикол в том, что на этоих jmp можно безболезнено ставить бряки ;) ЗЫ Да, Делфы у меня нету, и я в ней бес понятия. Посему прошу, если не трудно, скомпилить для меня переходники для стандартных либ из Русской Win ME (kernel, user, advapi и т.п.) Спасибо. ![]() |
|
Создано: 20 ноября 2006 08:19 · Личное сообщение · #17 0xy пишет: Посему прошу, если не трудно, скомпилить для меня переходники для стандартных либ из Русской Win ME (kernel, user, advapi и т.п.) Только c т.п. проблема , моя W98 еле живая, могу сделать заглушки из присланных файлов MrSerg [шарик] pnz [point] ru ----- спамерам ---- MrSerg@Microsoft.com Делов на несколько минут. ![]() |
|
Создано: 21 ноября 2006 09:24 · Личное сообщение · #18 |
|
Создано: 22 ноября 2006 07:54 · Личное сообщение · #19 Executioner пишет: пришли пожалуйста. исходник executioner (собака) pisem (точка) net - Наверное антиспам фильтр меня не пропускает 5 лет исходнику, но я его немного почистил. компелить версией не ниже 6.0, иначе длинные имена функций не пройдут. Спасибо всем кто мне ответил. Сейчас пытаюсь написать себе pexplorer.lic для PE Explorer v1.98 R5. Kerberos не дает ввести код , окно регистрации зависает. OllyDbg повисает на RaiseException как отучить не пойму. ![]() ![]() |
|
Создано: 23 ноября 2006 23:37 · Личное сообщение · #20 |
|
Создано: 24 ноября 2006 01:53 · Личное сообщение · #21 tundra37 Не... вопрос как раз для новичков, изучение OllyDbg , а PE Explorer v1.98 R5 взят для примера, да и программа нужная. PE Explorer v1.98 R5 (или другая программа) вызывает Kernel32.RaiseException много раз. OllyDbg останавливается, жму Shift-F9 , опять останавливается и т.д. Вопрос: как отучить OllyDbg останавливается на Kernel32.RaiseException ? Зы.. Хотя не удержался и написал программу кодирующую pexplorer.lic из текста, моим способом (см . Top). Сначала хотел подобрать ключ перебором, но 64битную кодировку мой компьютер сто лет подбирать будет. Так что в раздел по PE Explorer напишу когда, взломаю код, если конечно хватит терпения с Олькой бодаться. ![]() |
|
Создано: 28 ноября 2006 04:51 · Личное сообщение · #22 |
|
Создано: 30 ноября 2006 06:56 · Личное сообщение · #23 eXtr0gen пишет: Но не будут ли ругатся цифровые подписи Microsoft? Цифровые подписи есть только у драйверов ХП. Если ты про механизм dllcaсhe, то он может быть отключен и обойден. "Самые основные" DLL и EXE контролируются строже, но "хорошо написанные" вирусы и программа AntiWPA это ведь как-то обходят ?! ![]() |
|
Создано: 30 ноября 2006 07:16 · Личное сообщение · #24 |
![]() |
eXeL@B —› Вопросы новичков —› Обсудим ? топик не совсем новичка. |