Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #85, ЯНВАРЬ 2006 г.

Невидимая война

Ara (ara@cracklab.ru)

Хакер, номер #085, стр. 085-064-5


1. Преобразовать «код ЭВМ» в шестнадцатеричную систему

2. Добавить в начало 07.

3. Сделать RSA_EnCrypt.

4. Преобразовать результат в десятичную систему.

Для вычислений воспользуемся калькулятором BigInt Calculator, точнее его модулем RSATool. Переведем все найденные числа в шестнадцатеричную систему и введем в соответствующие окна RSATool. Остается ввести «код ЭВМ» в шестнадцатеричном виде с добавленным «07» в окошко Encrypt&Decrypt test и нажать Encrypt. Получим наш серийный номер. Переводим его в десятичный вид, вводим в regcm.exe, и программа запускается без вопросов.

[пишем кейген]

Написание кейгена для RSA может показаться делом чрезвычайно трудным, однако это не совсем так. Есть много готовых библиотек для работы с большими числами, например, библиотека biglib v. 0.01e by roy|fleur. Ее мы и будем использовать. Писать будем, конечно, на ассемблере, используя практически любой его компилятор. Вот основная часть нашего кейгена:

[код нашего кейгена]

.data

E db "10FD5F",0

N db "27D035E0D250C4F3ECA3",0

.code

KgProc proc hWin:HWND

LOCAL big_n: DWORD

LOCAL big_e: DWORD

LOCAL big_c: DWORD

LOCAL big_m: DWORD

invoke GetDlgItemText,hWin,1002,addr sID,20h

.if eax

invoke RtlZeroMemory,addr sSerial,sizeof M+sizeof sSerial

invoke _BigCreate,0 ;Инициализация

mov big_n,eax

invoke _BigCreate,0

mov big_e,eax

invoke _BigCreate,0

mov big_c,eax

invoke _BigCreate,0

mov big_m,eax

invoke _BigIn,addr N,10h,big_n

invoke _BigIn,addr E,10h,big_e

mov eax,offset sID

mov edx,offset sTmp

call str2int64 ; конвертируем в 64-битное число, взято из Delphi

bswap eax

bswap edx

mov dword ptr [M],edx

mov dword ptr [M+4],eax

mov edi,offset M ;Формирование M

xor eax,eax

mov ecx,8

repz scasb

add edi,-2

mov byte ptr [edi],7

invoke _BigInBytes,offset M,8,256,big_m

invoke _BigPowMod,big_m,big_e,big_n,big_c ;Кодирование

invoke _BigOut,big_c,10,addr sSerial ;Преобразование в 10-чную строку

invoke _BigDestroy,big_n ;Деинициализация

invoke _BigDestroy,big_e

invoke _BigDestroy,big_c

invoke _BigDestroy,big_m

invoke SetDlgItemText,hWin,1003,addr sSerial

.else

invoke SetDlgItemText,hWin,1003,addr sShortName

.endif

ret

KgProc endp

Основа кейгена готова, интерфейс и оформление добавишь сам.

[заключение]

Необходимо отметить, что написание кейгена для этой программы нам удалось благодаря ошибкам автора при выборе ключей, точнее их длин. При выборе достаточно больших ключей взлом бы затянулся на несколько лет. Хотя нет, не взлом, а поиск верного серийного номера. Всегда же есть другие способы взлома, например, патч тех переходов, перед которыми сравниваются два 64-битных числа (адрес 0091F20C, к примеру). Или подстановка нужных значений в сравниваемые регистры. Возможность патча проверь сам, думается, что там не все будет так просто - я не проверял.

Назад на стр. 085-064-4  Содержание  Вперед на стр. 085-064-6