Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Осмотр PeExplorer`а

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Автор: BiT-H@ck <bit-hack@mail.ru>

<Введение>
Здоров, куль пиплы. Сегодня я вам поведаю, как ломал прекрасную прогу PeExplorer 1.95 с ОЧЕНЬ прекрасной защитой… На взлом ушёл день, было опробовано 4 способа, я поведаю самый действенный. Предупреждаю сразу, что самым новичкам эту статью читать рано.

<Описалово проги>
Прога – редактор ресурсов, дизассемблер, pe-въювер и многое другое в одном флаконе.

<Краткие сведения о защите>
Взлом начался с того, что на wasm.ru выложили данную прогу с корявым кряком, а т.к. я её хотел поюзать нормально, а не 15 дней (да и то кряк этого не давал, убивая триал). Основные недоделки кряка:
1. Прога всегда запускалась в SafeMode`е, что не очень то хорошо, т.к. не даёт редактировать ресурсы.
2. После просмотра работы чужого кряка (после взлома) я обнаружил не самый красивый и рациональный способ взлома.
После скачки я поискал другие кряки, но я их не нашёл и забил на это дело до сегодняшнего времени (слишком мощная защита). Сегодня мы всё-таки завалим эту защиту.

Думаю, что хватило бы только первого пункта для отбраковки кряка:)

Основные фишки, применённые в защите:
1. Многие проверки регистрации выполняются в заалоченной памяти (в проге код хранится в зашифрованном виде).
2. Проверка CRC (памяти) потенциально важных для защиты участков в программе, после чего полученная CRC юзается при работе проги (именно по этому прога всегда запускалась в SafeMode`е).
3. Защиту писали продвинутые челы => нет как таковой процедуры регистрации, она размазана по всему коду.
4. Некоторые важные строки в программе зашифрованы.

<Постановка задачи>
1. Отключить триал.
2. Убрать окно напоминаний.
3. Убрать надпись, что прога только на 30 дней.
4. Отрубить CRC.

<Осмотр пациента>
Пихаем это дело в IdaPro, пихаем это дело в Олю. Так, написано на делфи 3-4, Ctrl+A. Ок, щас будем ловить окно с напоминанием, сколько осталось дней до конца триала и с тремя кнопками (надеюсь поняли, про какое я). Отпускаем прогу (F9). Теперь в Оле пишем bp ShowWindow и грузим какую-либо прогу в PeExplorer. Тормознулись в Оле. Именно сейчас должно появиться то самое окно, которое мы ловим. Смотрим в стек и ищем числа, которые соответствуют адресам заалоченной памяти. Вот то, что я нашёл:



Переходим на найденный адрес и видим:

 01E701CB	FFD7			CALL EDI
 01E701CD	8B4A64		MOV ECX, DWORD PTR DS:[EDX+64]
 01E701D0	C1E102		SHL ECX, 2
 01E701D3	8B040E		MOV EAX, DWORD PTR DS:[ESI+ECX]
 01E701D6	8B00			MOV EAX, DWORD PTR DS:[EAX]
 01E701D8	83F800		CMP EAX, 0
 01E701DB	58			POP EAX
 01E701DC	0F85F3000000	JNZ 01E702D5
 01E701E2	8B4A5C		MOV ECX, DWORD PTR DS:[EDX+5C]
 01E701E5	C1E102		SHL ECX, 2
 01E701E8	8B2C0E		MOV EBP, DWORD PTR DS:[ESI+ECX]
 01E701EB	50			PUSH EAX
 01E701EC	31C0			XOR EAX, EAX
 01E701EE	8B5D38		MOV EBX, DWORD PTR SS:[EBP+38]
 01E701F1	8903			MOV DWORD PTR DS:[EBX], EAX
 01E701F3	8B5D30		MOV EBX, DWORD PTR SS:[EBP+30]
 01E701F6	8B1B			MOV EBX, DWORD PTR DS:[EBX]
 01E701F8	8B4534		MOV EAX, DWORD PTR SS:[EBP+34]
 01E701FB	8B38			MOV EDI, DWORD PTR DS:[EAX]
 01E701FD	47			INC EDI
 01E701FE	8938			MOV DWORD PTR DS:[EAX], EDI
 01E70200	39DF			CMP EDI, EBX
 01E70202	7212			JB SHORT 01E70216
 01E70204	31DB			XOR EBX, EBX
 01E70206	8918			MOV DWORD PTR DS:[EAX], EBX
 01E70208	8B4A04		MOV ECX, DWORD PTR DS:[EDX+4]
 01E7020B	C1E102		SHL ECX, 2
 01E7020E	8B040E		MOV EAX, DWORD PTR DS:[ESI+ECX]
 01E70211	8B5D38		MOV EBX, DWORD PTR SS:[EBP+38]
 01E70214	8903			MOV DWORD PTR DS:[EBX], EAX
 01E70216	8B450C		MOV EAX, DWORD PTR SS:[EBP+C]
 01E70219	8B5D24		MOV EBX, DWORD PTR SS:[EBP+24]
 01E7021C	8903			MOV DWORD PTR DS:[EBX], EAX
 01E7021E	58			POP EAX
 01E7021F	8B5D10		MOV EBX, DWORD PTR SS:[EBP+10]
 01E70222	BF1E000000		MOV EDI, 1E
 01E70227	29C7			SUB EDI, EAX
 01E70229	893B			MOV DWORD PTR DS:[EBX], EDI
 01E7022B	83F81E		CMP EAX, 1E
 01E7022E	7339			JNB SHORT 01E70269
 01E70230	83F800		CMP EAX, 0
 01E70233	7234			JB SHORT 01E70269
 01E70235	B801000000		MOV EAX, 1
 01E7023A	8B5D28		MOV EBX, DWORD PTR SS:[EBP+28]
 01E7023D	8903			MOV DWORD PTR DS:[EBX], EAX
 01E7023F	8B5D2C		MOV EBX, DWORD PTR SS:[EBP+2C]
 01E70242	8903			MOV DWORD PTR DS:[EBX], EAX
 01E70244	8B4500		MOV EAX, DWORD PTR SS:[EBP]
 01E70247	8B5D1C		MOV EBX, DWORD PTR SS:[EBP+1C]
 01E7024A	8903			MOV DWORD PTR DS:[EBX], EAX
 01E7024C	8B4508		MOV EAX, DWORD PTR SS:[EBP+8]
 01E7024F	8B5D20		MOV EBX, DWORD PTR SS:[EBP+20]
 01E70252	8903			MOV DWORD PTR DS:[EBX], EAX
 01E70254	8B7D14		MOV EDI, DWORD PTR SS:[EBP+14]
 01E70257	FFD7			CALL EDI
 01E70259	8B7D38		MOV EDI, DWORD PTR SS:[EBP+38]
 01E7025C	8B3F			MOV EDI, DWORD PTR DS:[EDI]
 01E7025E	83FF00		CMP EDI, 0
 01E70261	7472			JE SHORT 01E702D5
 01E70263	60			PUSHAD
 01E70264	FFD7			CALL EDI
 01E70266	61			POPAD <=Здесь оказываемся
 01E70267	EB6C			JMP SHORT 01E702D5
 01E70269	31C0			XOR EAX, EAX
 01E7026B	8B5D28		MOV EBX, DWORD PTR SS:[EBP+28]
 

По адресу 01E70264 вызывается окно, которое надо обскакать. Ищем, где же можно перепрыгнуть через данное окно. Можно конечно где-то в районе 01E7022E поменять переходы, но как же их поменять в заалоченной памяти? Ок, если на этом уровне больше нет переходов, то будем искать другое место. Стоп! Как же нет? А 01E701DC? Ставим на 01E701CB Hardware BreakPoint On Execution, отпускаем прогу на волю, открываем другой файл и тормозимся на брейкпоинте. Так, прыжок срабатывает, если еах, когда eip ==01E701D8 не равен нулю. Трейсим до 01E701D6 и видим, что прога читает DWORD по адресу 005AE818, а там 00 00 00 00. Вот, ОНО, это то место, которое мы искали. Пихаем ехешник в LordPe, жмём FLC и вводим в поле VA полученный адрес. DO. Offset=1ADA18. Отлично, выгружаем ехешник из Оли, LordPE и засовываем его в HEX редактор. Переходим на найденный offset и пишем по нему DWORD из FF (для прикола). Сохраняем, выходим. Проверяем – окна нет! Одна цель повержена, осталось ещё две:)

Заходим в about и видим плохую надпись:( Надо править:) В HEX редакторе ищем данную надпись и находим по offset`у 1524A8. Переводим в VA, VA=5530A8. Отлично. Меняем эту надпись на BiT-H@ck[fps] (если по другому, то работать не будет:) и в конце дописываем 00 и HEX режиме, а не ASСII, чтобы обозначить конец строки. Сохраняем, запускаем, грузим ехешник в прогу. ОпппА, облом. “Обнаружены ошибки! Файл открыт в безопасном режиме.”. Вдохновляющая надпись:) Теперь надо вспомнить про CRC, про которую я упоминал выше. Как надо ловить CRC памяти? Правильно! Брей на доступ к памяти:) Переходим в Оле на адрес, по которому хранился текст про 30 дней:) и ставим HardWare BreakPoint on Access на эту строку. Перезапускаем, отпускаем, тормозимся:

 01360072	8B45F8	MOV EAX, DWORD PTR SS:[EBP-8]
 01360075	8B55F4	MOV EDX, DWORD PTR SS:[EBP-C]
 01360078	C1C007	ROL EAX, 7
 0136007B	C1C21B	ROL EDX, 1B
 0136007E	31D0		XOR EAX, EDX
 01360080	8945F8	MOV DWORD PTR SS:[EBP-8], EAX
 01360083	8B5DF0	MOV EBX, DWORD PTR SS:[EBP-10]
 01360086	31D8		XOR EAX, EBX
 01360088	51		PUSH ECX
 01360089	89C1		MOV ECX, EAX
 0136008B	D3C3		ROL EBX, CL
 0136008D	59		POP ECX
 0136008E	C1C80F	ROR EAX, 0F
 01360091	31C2		XOR EDX, EAX
 01360093	31DA		XOR EDX, EBX
 01360095	51		PUSH ECX
 01360096	89D1		MOV ECX, EDX
 01360098	D3CB		ROR EBX, CL
 0136009A	59		POP ECX
 0136009B	895DF0	MOV DWORD PTR SS:[EBP-10], EBX
 0136009E	8955F4	MOV DWORD PTR SS:[EBP-C], EDX
 013600A1	8B5DF8	MOV EBX, DWORD PTR SS:[EBP-8]
 013600A4	321E		XOR BL, BYTE PTR DS:[ESI]
 013600A6	46		INC ESI 
 013600A7	49		DEC ECX
 013600A8	75C8		JNZ SHORT 01360072
 

Вау, что-то считаем:) Не CRC ли?:) А теперь подумаем, как это менять:) CRC ведь не только этой надписи, а ещё некоторых частей проги. Full Sax:( Ок, это ведь значение ещё где-то юзается не так ли?:) Ещё одно но: какое именно из всех записываемых здесь чисел юзается? Бррр. Ну и по*. Отпускаем прогу, грузим в неё файл иииииии… В отладчике начинают показываться Access Violation`ы. Снимаем экссепшоны с игнора и тормозимся тут:

 00504DF1	64FF30	PUSH DWORD PTR FS:[EAX]
 00504DF4	648920	MOV DWORD PTR FS:[EAX], ESP
 00504DF7	8B45D8	MOV EAX, DWORD PTR SS:[EBP-28]
 00504DFA	8B00		MOV EAX, DWORD PTR DS:[EAX] <= тут
 00504DFC	3B45E4	CMP EAX, DWORD PTR SS:[EBP-1C]
 00504DFF	7560		JNZ SHORT 00504E61
 

Eax=D441BFB4. Обращение к невыделенной памяти… Ага, откуда взялось это число? Да из EBP-28:) В окне стека жмём Ctrl+G и пишем EBP-28. И откуда же оно? Hardware Break не прокатит, т.к. это стек:( ОК. Ctrl+M, выделяем адрес PeHead`era нашего ехешника Ctrl+B и пишем это число из стека в перевёрнутом виде. Вот:

 0165001C  B4 BF 41 D4                                      ґїAФ
 

Вот, а теперь бряк на доступ к памяти и перезапуск. Топчем по F9 до такого места:

 005960E7	8B15ACEE5A00	MOV EDX, DWORD PTR DS:[5AEEAC] 
 005960ED	8B12			MOV EDX, DWORD PTR DS:[EDX]
 005960EF	F7D2			NOT EDX
 005960F1	81F225C63C88	XOR EDX, 883CC625
 005960F7	03C2			ADD EAX, EDX
 005960F9	8B15AC5E5B00	MOV EDX, DWORD PTR DS:[5B5EAC]
 

Аааа, вот ты и попался козёл:) Скажу сразу, что команда по адресу 005960F1 должна отчищать регистр edx, если CRC неизменна, но у нас она поменялась после изменения надписи “про 30 дней”. Топчем до xor`а и смотрим на значения регистра edx, у меня 5A056991. Теперь это число вписываем в команду xor`а (например, я написал XOR EDX, 5A056991). Copy to executable=>All modifications=>Copy All=>Save file. Запускаем – работает! УРА! Я уж думал, что эта статья будет бесконечной…

<Выводы>
Что сказать?
1. Защиту на Делфи можно написать довольно-таки сильную, но в данном случае защита в большинстве своём написана на асме, но на асме встроенном в Делфи – значит на Делфи:)
2. Защиту писали так и так или крякеры или бывшие крякеры, т.к. очень мало обычных программеров может написать хотя бы CRC памяти.
3. Ломать - не строить.

<Приветы to:>
All my command, cracklab, а особенно Alex, Mario555, WELL, Bad_Guy. И ещё to: dragon_gor, NUCLEuS и всем, кого я забыл…

P.S. Зря дизасмили:)


Обсуждение статьи: Осмотр PeExplorer`а >>>


Комментарии к статье: Осмотр PeExplorer`а

AlexZ 27.07.2005 18:57:40
Более полугода назад я был в ROCKTEAM и релизил _нормальный_ кряк к этой версии.
---
BiT-H@ck 26.07.2005 20:48:57
Х.з. я не нашёл.
---
nice 28.07.2005 12:09:39
\"BiT-H@ck[fps] (если по другому, то работать не будет:)\"
Ещё так работает: Bit-H@Ck - rulit :)
Молодец, достцупно написано, думаю и новичкам полезно будет почитать
---
GL#0M 05.08.2005 01:46:24
Хех, никогда бы не подумал, что у этой программы настолько фуфловая защита (при таком кол-ве кривых кряков).
Молодец!
---
sne 03.09.2005 17:00:47
Программеры разные случаются! Посчитай что требуется знать для того чтобы написать подобную тулзу.
---

Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS