Невидимая война 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, к примеру). Или подстановка нужных значений в сравниваемые регистры. Возможность патча проверь сам, думается, что там не все будет так просто - я не проверял. |