CRACKER. Реализация для WIN32 GUI

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
==============================
CRACKER. Реализация для WIN32 GUI
==============================

Наверное, нет нужды рассказывать, что такое крякеры.
Вкратце, это двоичные патчеры, работающие в ручном режиме и берущие информацию о патчах в текстовых файлах .CRK (в простейшем случае CRK, позже появились всевозможные "расширения", зачастую неоправданные). Эти файлы - и есть кряки.
(Описание форматов кряк-файлов: CRK_DOC.ZIP , примеры - библиотека кряков от CornerCrackers)

Также см. полную библиотеку старинных CRK & XCK-файлов. (Там их более 2'500 штук).

Самая старая и заслуженная из этого класса программ датируется ещё 1991 годом, от Corner Crackers (CRACKER.EXE v.1.1).
Позже, в 90-х, появилось ещё несколько аналогичных программ, из которых самая, пожалуй, удачная реализация выполнена Professor'ом Nimnull'ом в 1996 году и назывется она Cracker Advanced
(CRA.EXE v.0.2.16 и CRA386.EXE v.0.2.14 с PMODE/W)
(CRA386 v.2.16 под WinXP глючит).

Вот полный их список, все для DOS (по ссылкам архивы с этими программами):
------------------------------------------------------------------------------------------------------
1) CRACKER.EXE v.1.1 (by Corner Crackers, 1991)
2) Program Cracker (by Dr.Stein's labs, 1993)
3) CRA v.0.2.16,CRA386.EXE v.0.2.14 (by Nimnull, 1996)
4) CRK (by Bolshun/Ivanov, 1996)
5) CRACK-STUDIO (by Turansoft, 1997)
-------------------------------------------------------------------------------------

Так что тема в 90-х была достаточно разработанная.

До какого-то момента этих программ было вполне достаточно, но время вносит свои коррективы, и все имеющиеся реализации подобного софта (их можно насчитать пять штук, все для DOS) перестали отвечать запросам. Как такое можно терпеть? - Никак. Это невыносимо.

Недостатки этих реализаций прошлого века вытекают из их DOS-овости. (Здесь CRA386, пожалуй, выглядит более достойно, но от остальных он принципиально ушёл недалеко).

Недостатки такие:
- ограничения оперативной памяти (кроме CRA386);
- невозможность работы с длинными именами файлов (LFN) в WIN32;
- невозможность работы в 64-битных ОС.

А между тем, формат CRK вполне себя оправдывает и поныне для хранения информации о внесённых в двоичные файлы изменениях и исправлениях. Поэтому от самой идеи программ-крякеров отказываться вряд ли придётся.


Ну, и к собственно сабжу.

===========================================================
--> Вот версия 0.005e CRACKER'а для WIN32. <-- (04 Feb 2021 г.) - Size: ~28 Kb, UPX'ed. MSVC.
===========================================================

В версии 0.005b добавлена кнопка вызова regedit.exe (и "горячая клавиша" <Alt+G>).
Версиия 0.005e это та же версия 0.005b, но исправленная.
Пофиксены падения при чтении старинных не вполне корректно оформленных .XCK-файлов.

Архив прежних версий:
v.0.001a - 2016, initial release, VA cracks.
v.0.002a - 2017, RVA cracks.
v.0.002b - 2018, OnTop, Vitrite, TaskBar
v.0.003b - 2020, PE+
v.0.004d - 2020, Prescan //fixed 2021.01.16




Интерфейс воспроизводит наиболее удачные образцы таких программ прошлого века - минимум лишнего.
(В листбоксе виден фрагмент каталога файлов популярной библиотеки кряков от Corner Crackers, 1991).

Крякер занимается только разбором текста кряков, который составлен руками в желаемом виде,
но с соблюдением некоторых "соглашений" вроде синтаксиса комментариев.
Сами кряки (файлы .CRK) составляются ручками, можно с использованием какого-либо другого инструмента.

Но удобнее всего создавать файлы .CRK с помощью утилиты CMP32, которая представлена в посте#2 этой темы.



==============================================
Краткое описание возможностей этой программы CRACKER:
==============================================

- Работает с форматами CRK,CRA,XCK (дань традициям).

- Поддерживаются комментарии в стиле Cracker Advanced ('#' в начале строки),
однако его опции #SIZE, #CHCKSUM, #RUN и т.д. игнорируются за явной ненадобностью.

- Поддерживается корректное использование кириллицы в кодировках DOS/WIN (можно выбрать),
(Кстати, все опции программы видны, если отволочь правую границу диалогового окна вправо).

Вот они, опции программы:




- LFN для кряков и имён исправляемых файлов (как и положено в WIN32).

- Смещения для патчения в файле CRK могут задаваться либо традиционно, в виде абсолютных величин, либо в виде VirtualAddress (VA), как для WIN32 PE-файлов. Тогда перед адресом нужно указывать точку, например, вот так:
.00401005 72 EB
(Это вообще возможность, отсутствующая в программах-аналогах для DOS'а. Расширение синтаксиса CRK).

В версии 0.002a добавилась возможность для WIN32-PE файлов адреса указывать также и в формате Relative Virtual Address (RVA) ,
тогда перед адресом нужно задать две точки, как в выводе утилиты CMP32.EXE v.0.002a, например, так:
..0001005 72 EB

В версии 0.003b добавилась возможность для WIN64-PE (PE+) файлов адреса указывать также и в формате VA & RVA,
например, так:
.1`00001D40: 00 31 ;00001140: (VA)
.100001D40: 00 31 ;00001140: (VA)
..1D40: 00 31 ;00001140: (RVA)


- Имеются расширения синтаксиса CRK - "CHECK" и "FORCE". Например:
Код:
00001234:  72 ??    ;;"CHECK"  - проверка байта. Удобно применять для контроля нужной версии исправляемого файла.
00001235:  ?? 23    ;;"FORCE"  - безусловная замена байта (Но. После этого распатчивание уже будет невозможно)
- Имеется опция "Patch All", когда все кряки, описанные в выбранном CRK-файле, применяются одновременно.

- Вызов редакторов DOS/WIN для редактирования текста кряков, не выходя из программы (пути к редакторам настраиваются).
(Для DOS-овского редактора можно применять LFN или SFN, на выбор.)
По умолчанию это "edit"(+SFN) и "notepad".

- Корректная работа как в WinXP+, так и в Win9x. (Без этого никак. Win9x никуда не делась).

- Два размера диалогового окна - компактный (size 1) для режима 640x480 и более просторный (size 2) для высокого разрешения экрана.

- Программа эргономична. Например, фокус ввода c любого из контролов переводится на главный список кряков нажатием клавиши <Esc>.
Все опции помимо стандартных контролов продублированы ещё и горячими клавишами, так что можно (и даже удобнее) работать без использования мыша.

Справку по "горячим" клавишам можно подглядеть по нажатии кнопки F1:




- Тут можно ещё что-нибудь написать, довольно обильно, - но лучше привести примеры текста CRK, с которым может работать эта программа.
Например, так:

Код:
      ;допускаются пустые строки

Исрправление ошибок в программе Прога.EXE v.1.2       ;можно комментировать, используя ';'
#SIZE = 3333                     ;эти строки игнорируются,
#CHKSUM = 32233223       ;совместимость с CRA286.EXE (даже вернее с C2U.EXE, но это уже другая тема)
#RUN = UPX -d                 ; тоже

1) Убрать наглое окно
;
; тут можно добавить ещё какое-нибудь описание исправления
; (Но символ ';' должен быть в первой позиции.)
;
Прога.EXE   ;(распакованная)
;
; тоже можно добавить строки комментариев. Но символ ';' должен быть в первой позиции.
;
000000222:  cc 90
;
;
Drv\Прога.DLL
; снова можно добавить строки комментариев. Но символ ';' должен быть в первой позиции.
.00403С40:  72 EB            ; Virtual Address



2) Ограничения времени работы
Прога.EXE   ;(распакованная)
.00402222:  72 EB            ; Virtual Address
000000333:  80 00            ; Абсолютное смещение в файле
Drv\Прога.DLL  ;(распакованная)
.00403С55:  73 EB            ; Virtual Address
- Ну и так далее.
По мере разбора текста, если встречаются ошибки, то выдаётся номер соответствующей строки. Где вышел затык.

В крякере при чтении этого всего увидим такую картинку (кстати, выбран размер окна "Size 2"):






Сколько кряков может присутствовать в одном файле? - не знаю. И никто не знает.
Но много, и разного размера. Память под них выделяется динамически. Надо пробовать.
В случае чего программа скажет "memory allocation error.." и позорно завершится.

Однако, со всеми старыми, существующими ранее, файлами *.CRK, *.CRA, *.XCK программа должна работать без проблем.


*** См.также: ***

Ссылка на пост #2 этой темы, об утилите --> CMP32 <-- (для использования её совместно с CRACKER'ом).

Ссылка на пост #3 этой темы, о HEM-модуле --> CRACK.HEM <-- (для использования его совместно с CRACKER'ом).
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
А вот поспела маленькая безобразная утилита командной строки, воспроизводящая действие команды DOS "FC /B".
Только эта утилитка WIN32, и умеет выводить различия также и с адресами в виде VirtualAddresses (VA) для WIN32-PE файлов.
(В версии 0.002a - также и с Relative Virtual Addresses (RVA) для WIN32-PE файлов)
(В версии 0.003b - также и с RVA и VA для WIN64-PE файлов)

Это приблуда для использования с CRACKER'ом. (См. стартпост).

=============================
-->Вот CMP32.EXE (версия 0.003с)<-- (13 Oct 2021г.) - Size: ~5 Kb, UPX'ed. MASM.
=============================




==================
Примеры использования
==================


Пример запуска "CMP32 1.exe 2.exe" (почти полная аналогия с досовской командой "FC /b 1.exe 2.exe")
Код:
Differences between "1.exe" & "2.exe"
1.exe
00000998: 74 EB
000009A3: 74 EB
Пример запуска "CMP32 /a 1.exe 2.exe"
Код:
Differences between "1.exe" & "2.exe"
1.exe
.00401398: 74 EB ;00000998:
.004013A3: 74 EB ;000009A3:
Пример запуска "CMP32 /ar /b 1.exe 2.exe" - выводятся адреса RVA+ModuleBase:
Код:
Differences between "1.exe" & "2.exe"
1.exe
;.00400000:
..00001398: 74 EB ;00000998:
..000013A3: 74 EB ;000009A3:
С файлами CRK в формате вывода из вышеприведённых примеров может работать CRACKER.EXE (WIN32 GUI) v.0.002a.




В версии 0.002b добавлена опция "/rpp" - вывод различий в формате скрипта для --> R!SC's Process Patcher'а <-- (только для WIN32-PE файлов).

Пример запуска: сmp32 /a /rpp Original.exe New.exe
Код:
Differences between "Original.exe" & "New.exe"
Original.exe
p=0040127F/FC/90: ;0000067F:
00000DF0/00/11:
00000DF1/00/22:
p=00405DE0/00/31: ;00003DE0:
p=00405DE1/00/31: ;00003DE1:
p=00405DE2/00/31: ;00003DE2:
p=00405DE3/00/31: ;00003DE3:
p=00405DE4/00/31: ;00003DE4:
p=00405DE5/00/31: ;00003DE5:
00004A03/00/44:
00004A04/00/44:
- Удобство в том, что заодно адреса патчения проверяются на саму возможность использования RPP.EXE.
(Или любого другого рантайм патчера памяти).
Те строки, которые начинаются с "p=", можно довольно смело использовать в скрипте RPP.
Все остальные для рантайм-патчера памяти не годятся.

--Добавлено--

.. И ещё. Если заданы опции сравнения /a, /ar, /v, /rpp (с виртуальными адресами),
но патч приходится на "хвост" секции, то по умолчаниию выводятся не виртуальные,
а абсолютные адреса от начала файла.
Это сделано специально, чтобы на этапе патчения уже было ясно, что патч кривоватый
и работать будет не всегда.
Отменяется проверка на нахождение патча в "хвосте" секции
добавлением ключа "t" к опциям "/a" , "/v",
например так:
cmp32 /vt 0.exe 1.exe
cmp32 /art 0.exe 1.exe



27 Jan 2018:

- добавлен возврат DOS ERRORLEVEL для возможности вызова из пакетных файлов.
На основании результата сравнения (файл[ы]найдены/не найдены, одинаковы/различны)
можно организовывть ветвления в пакетных файлах (.BAT, .CMD).

Для чего такое может понадобиться - см. например
тут:
-----> CMD/BAT - [решено] Сравнение двух файлов>ветвление "fc" или "diff" <--
и тут:
-----> eXeL@B —› Софт, инструменты —› Inno Setup XDELTA Patch Maker <--

25 Nov 2020:
- версия 0.003b - Добавлена работа с WIN64-PE файлами.
Однако же CRACKER.EXE пока с WIN64-PE не работает..

--Добавлено-- {
CRACKER v.0.003 уже работает с PE+ для WIN64
}

Пример результата сравнения с опцией "/a" - VA:
Differences between "0.EXE" & "1.EXE"
0.EXE
.00000001`400EC079: CC 90 ;000EB479:
.00000001`400EC07A: CC 90 ;000EB47A:
.00000001`400EC07B: CC 90 ;000EB47B:
Пример результата сравнения с опцией "/ar /b" - RVA (присутствует патч в "хвосте" секции, без опции "/art"):
Differences between "0.exe" & "1.exe"
0.exe
;.00000000`00400000:
..00000000`0024687E: CC 90 ;00245C7E:
..00000000`0024687F: CC 90 ;00245C7F:
00245C84: 00 CC
00245C85: 00 CC
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
Hiew32-плагин для сравнения двух файлов:

**************************************************************************************
--> CRACK.HEM <-- - v.0.003a (2 января 2021).
**************************************************************************************

В новой версии 0.003a добавлено опциональное сравнение только байтов внутри выделенного блока.


Предыдущие версии:
--> CRACK.HEM <-- - v.0.002a ( 31 декабря 2020). сохранение отчёта добавлением в существующий CRK-файл.
--> CRACK.HEM <-- - v.0.001a ( 15 марта 2017).

Для PE64 генерируются кряки в формате, с которым может работать CRACKER v.0.003b.
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
В новой версии утилиты двоичного сравнения CMP32
поправлена ошибка, из-за которой опция "/b" (вывод PE64 базы модуля в виде комментария)
не срабатывала, если база имела только 0 в младших 32 битах адреса.
(например, .1`00000000: )

См. пост#2 этой темы.
 

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
Новая верси CRACKER'а - v.0.003b.
Добавлена поддержка формата WIN64 PE-EXE (PE+).

См. пост#1 этой темы.

Абсолютные (RAW) адреса-смещения файла теперь могут быть 64-битными (но надо тестировать)
Например:
1`FFFFeeee: 30 31
1FFFFeeee: 30 31
Адреса PE64 теперь можно указвать в таком виде:
.1`00001D40: 00 31 ;00001140: (VA, 64-bit comma-separated. Hiew32 display format)
.100001D40: 00 31 ;00001140: (VA, 64-bit ulonglong format. CRACK.HEM format)
..1D40: 00 31 ;00001140: (RVA, 32-bit, such as for x32 PE-EXE)
(Кряк-файлы .CRK для PE64 (PE+) в таком виде можно создавать с помощью
новой версии утилиты двоичного сравнения CMP32 v.0.003b ,см. пост#2 этой темы.
Также можно это делать с помощью плагина для Hiew32 - CRACK.HEM, см. пост#3 этой темы).
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
Сейчас в крякере не хватает двух полезных фич, что делает его полностью отстойным.

Первая фича - распатчивание должно происходить в порядке обратном патчению,
это позволило бы использовать т.н. "перекрывающиеся патчи". Как такое реализовать, пока не ясно, даже примерно.

И вторая недостающая фича - это показ в окне патчей текущего состояния запатченности/распатченности файла.
С этим более-менее понятно, но куча головняка.
И существенно замедлит шустрость интерфейса.

Выглядеть по итогу должно так (чисто гипотетически):
 

Прикрепленные файлы:

Последнее редактирование:

mak

Соломенные сандалии
Администратор
Сообщения
781
Реакции
543
@dosprog, как UPX может? Добавлять свою информацию?! Двусвязным списком на блоки информации (версии) ..
 

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
Тогда придётся усложнять.
Добавить вторую базу патчей
с инвертированной их последовательностью.
Этого бы не хотелось, но иначе не получится.
Может, добавлю позже, в виде опции.
 
Последнее редактирование:

SDK

Ветеран
Ветеран
Сообщения
192
Реакции
37
а нельзя туда еще добавить базу из serials2k avenger в виде текста и информацию для создание инлайнпатча упакованных программ ?
 

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
Там такое просто не нужно, для этого есть другие утилиты.

Это тулза строго общего назначения, универсальная,
без привязки к какому бы то ни было конкретному софту.
Как кухонный нож, которым можно шинковать капусту,
а можно и штрыкать им прохожих на улице.
Кто во что горазд.

Базы кряков никто не мешает создавать собственные,
в виде набора файлов в CRK-формате.
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
Новая версия CRACKER'а - v.0.004b.

Добавлена опция "Prescan", позволяющая видеть в списке кряков
текущее состояние запатченности/распатченности/частичной патченности
файла(ов), для которых этот кряк предназначен.

Выглядит это так:




Зачем такое было нужно?

- В прошлых версиях, чтобы узнать, применён ли был уже кряк, приходилось жать на него
и читать в строке статуса сообщение "Already patched (unpatched)" или "Patched OK".
Теперь CRACKER сам, заранее, сканирует файл (или файлы, если их в патче указан не один)
и выводит результаты сканирования в виде симолов состояния патчимого файла(или файлов),
дописанных в начале строки названия патча.

Поскольку в случае громоздких кряков включение "Прескана"
может подтормаживать интерфейс, по умолчанию эта опция отключена.
Включить её можно горячей клавишей <Alt+V> или чекбоксом в панели настроек.

Впрочем, для небольших битхак-кряков всё работает довольно шустро
и никакого замедления не наблюдается.

Символы '-', '*', '/' в листбоксе отображаются только в том случае,
если удалось предварительно безошибочно просканировать запатчиваемый(ые) файл(ы).
Иначе вместо этих символов-тэгов будет отображаться просто пробел.

См. стартпост темы.





--Добавлено--

Это на самом деле серьёзное усовершенствование, пришлось перетрясти весь код патчера.
Поэтому вполне вероятны разные баги, которых пугаться не надо. Это нормально.

Если в программе нет багов, значит её недостаточно тщательно тестировали.(с)
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
Новая версия CRACKER'а - v.0.005b

Незначительное добавление - кнопка вызова редактора реестра
для просмотра собственных сохранённых в реестре установок.

Идея принадлежит manhunter'у,
который, в свою очередь, позаимствовал её у Руссиновича.
Респект.

Выглядит так -



См. стартпост темы.
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
Новая версия HEM-плагина CRACK.HEM. - v.002a

В ней добавлен запрос на перезапись или добавление
новых данных в CRK-файл, если он уже существует.

По мелочам - добавлена подстановка имён файлов от предыдущего сравнения,
если плагин не перезагружался (то есть не перезапускался HIEW32.EXE).

См. пост №3 этой темы.
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
Новая версия HEM-плагина CRACK.HEM. - v.003a

В новой версии 0.003a добавлено опциональное сравнение только байтов внутри выделенного блока.

См. пост №3 этой темы.



Сейчас алгоритм примерно таков:

- Запрос на имя оргинального файла для сравнения с ним текущего открытого файла.
- Запрос на имя файла .CRK, куда будут выводиться различия.
- Если введено имя существующего CR-файла, тогда
-- Выбор: дописать данные в него или переписать его заново.
- Проверяется, есть ли в текущем файле помеченный блок
- Если есть помеченный блок, тогда
-- Запрос: сравнивать файлы с самого их начала или искать различия только внутри выделенного блока.
Если выбрано "искать только внутри блока", тогда перед началом
сравнения текущий файловый указатель устанавливается в обоих файлах
на смещение начала выделенного блока.
Иначе указатели текущей позиции обоих файлов устанавливаются в ноль (в начало).
- Побавайтово сравнить файлы (с начала файлов или с адреса выделенного блока в открытом файле).
- По достижении конца одного из файлов (или по достижении конца выделенного блока) сравнение завершается.
- Файл CRK готов.
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
В крякере обнаружился некритичный, но неприятный баг.
Если включать опцию "Prescan" при отсутствующих CRK-файлах,
то он падает. Если же какой-то файл CRK имеется в списке CRK-файлов,
тогда всё работает корректно.
Если опция уже включена, то дальше всё в порядке вне зависимости от наличия CRK-файлов.
Также корректно работает, если включить эту опцию ручками в реестре.
Пугаться не нужно.
Это поправлю уже в следующей версии.
 

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
CRACKER:
Поправлен баг включения опции "Prescan".
Обновлённая версия 0.005c в шапке темы.




--Добавлено--
Просто новая версия не предвидится,
- вернее, предвидится очень не скоро (оптимизм..),
а тем временем программа с "жучком" распространялась бы в пространстве.
Поэтому выпущен просто фикс. - Добавлена дополнительная проверка условия.

В новой же версии нужно приделать опцию "Smart Unpatch", выше писал об этом.
Без этой опции жить можно, но нах такая жызнь
 
Последнее редактирование:

BigIsi

Посетитель
Новичок
Сообщения
41
Реакции
54
CRACKER:
Поправлен баг включения опции "Prescan".
Обновлённая версия 0.005c в шапке темы.
Всё ИМХО, просто мысли:

Ссылки на 0.004с и 0.005с одинаковы, может убрать 0.004с вообще из списка.

И еще:
В версии 0.005b добавлена кнопка вызова regedit.exe (и "горячая клавиша" <Alt+G>).
Ссылки на саму версию 0.005b нет, да и в списке ее нет, может сформулировать так:
"С версии 0.005с добавлена кнопка вызова regedit.exe (и "горячая клавиша" <Alt+G>)".
 

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
"С версии 0.005с добавлена кнопка вызова regedit.exe (и "горячая клавиша" <Alt+G>)".
Она добавлена начиная с версии 0.005b.
Которая удалена за ненадобностью, но у кого-то в закромах ещё осталась.
Поправлено описание.
 
Последнее редактирование:

dosprog

Ветеран
Мудрец
Сообщения
189
Реакции
553
CRACKER:
Поправлен баг включения опции "Prescan".
Обновлённая версия 0.005d в шапке темы.

Прошлый краш происходил при включении опции "Prescan" в случае,
когда не было загружено и разобрано синтаксически ни одного CRK-файла.
Нынешний баг был в этом же месте, но уже при условии,
что загруженній CRK-файл содержал синтаксические ошибки
и база кряков на основании его разбора создана не была.

В обоих случаях функция Prescan ломилась в память
за подготовленными данными, которых там ещё не было
и быть не могло.

..Последние баги связаны с тем, что по изначальному замыслу
функция "Prescan" должна была работать и для списка CRK-файлов,
а не только для списка кряков внутри одного файла.
Но по размышлении оказалось, что такое усложнение не нужно,
и кроме того оно сильно замедлит работу со списком CRK-файлов.
Поэтому были исключены фрагменты ненужного кода,
но неприятные "хвосты" от этой логики остались.

А вообще,
- если в программе нету багов, значит её недостаточно тщательно тестировали.(с)
 
Последнее редактирование:
Верх Низ