![]() |
eXeL@B —› Вопросы новичков —› Кейген MozgC |
Посл.ответ | Сообщение |
|
Создано: 18 сентября 2007 20:27 · Личное сообщение · #1 Доброго времени суток! ![]() У меня к вам один вопрос... Это кейген MozgC, описанный в его статье "Взлом BlueFace. Пишем кейген": procedure TForm1.Button1Click(Sender: TObject); var ComputerName, chislo : string; ; инициализация переменных i,j : integer; regnumber : longint; begin i:=length(Edit1.Text); while Edit1.Text[i]<>'-' do i:=i-1; ; Цикл c конца строки, пока не наткнемся на тире j:=i; ; Cохраняем номер символа-тире в строке в переменной j для последующих действий ComputerName:=copy(Edit1.Text,1,j-1); ; Копируем в переменную ComputerName часть строки, содержащейся в Edit1.Text, начиная с первого символа и до тире (j - позиция тире в строке) chislo:=copy(Edit1.Text,j+1,length(Edit1.Text)-j); ; Аналогично, копируем в переменную chislo часть строки, содержащейся в Edit1.Text, начиная со следующего после тире символа (его номер - j+1). Кол-во копируемых символов задается выражением length(Edit1.Text)-j - так мы получим длину второй части серийного номера regnumber:=(StrToInt(chislo)+ ; Вычисляем регистрационный код по известному алгоритму length(ComputerName)+1)* (length(ComputerName)+1); Label1.Caption:=IntToStr(regnumber); ; Регистрационный код выводится на экран с помощью компонента Label end; ; Конец процедуры пожалуйста, помогите мне перевести его в Ассемблер... мне кажется, надо пользоваться функцией API StrToIntEx, но я не уверен, вообще не пользовался еще этой функцией... я, конечно, пробовал написать свои процедуры перевода шест. числа в строку/и строку с шест.числом в число, но у них много ошибок, кажется и т.п.... вот мои процедуры: nfStrToHex proc astr:DWORD jmp _nfsthnext nfsthmesserror db "ERROR! Can not convert a string to hex",0 nfsthcapterror db "ERROR!",0 _nfsthnext: mov ebx,astr invoke lstrlen,ebx mov ecx,eax .IF ecx==0 ret .ENDIF _nfsthloop: .IF (byte ptr [ebx]>="0" && byte ptr [ebx]<="9") sub byte ptr [ebx],30h .ELSEIF (byte ptr [ebx]>="A" && byte ptr [ebx]<="F") sub byte ptr [ebx],37h .ELSEIF (byte ptr [ebx]>="a" && byte ptr [ebx]<="f") sub byte ptr [ebx],57h .ELSE invoke MessageBox,NULL,ADDR nfsthmesserror,ADDR nfsthcapterror,MB_ICONERROR ret .ENDIF inc ebx loop _nfsthloop ret nfStrToHex endp nfHexToStr proc ahex:DWORD, astr:DWORD, nob:DWORD mov edi,astr mov ebx,ahex mov ecx,nob .IF ecx==0 ret .ENDIF _nfhtsloop: mov al,byte ptr [ebx] and al,0F0h shr al,4 .IF (al>=0 && al<=9) add al,30h mov byte ptr [edi],al .ELSE add al,37h mov byte ptr [edi],al .ENDIF mov al,byte ptr [ebx] and al,00Fh .IF (al>=0 && al<=9) add al,30h mov byte ptr [edi],al .ELSE add al,37h mov byte ptr [edi],al .ENDIF inc ebx inc edi loop _nfhtsloop ret nfHexToStr endp как видите, напутал, напутал, а толку нету.... ![]() я часов 4 писал эти процедуры, наверно, лучше было потратить это время на чтение крэкерский статтей... ![]() ![]() |
|
Создано: 18 сентября 2007 20:28 · Личное сообщение · #2 |
|
Создано: 18 сентября 2007 22:22 · Поправил: Gerpes · Личное сообщение · #3 |
|
Создано: 23 сентября 2007 00:40 · Личное сообщение · #4 Вот примеры стандартных масм32-функций: dwtoa - convert DWORD to ascii string Ex.: invoke dwtoa, eax, ADDR Buffer1 dw2hex - convert DWORD to hex string Ex.: invoke dw2hex, eax, ADDR Buffer2 atodw - convert ascii number to DWORD (возвращает DWORD в eax) Ex.: invoke atodw, ADDR Buffer3 htodw - сonvert hex string to DWORD (возвращает DWORD в eax) Ex.: invoke htodw, ADDR Buffer4 ![]() |
|
Создано: 03 октября 2007 00:17 · Личное сообщение · #5 Спасибо=) dwtoa - convert DWORD to ascii string Ex.: invoke dwtoa, eax, ADDR Buffer1 dw2hex - convert DWORD to hex string Ex.: invoke dw2hex, eax, ADDR Buffer2 atodw - convert ascii number to DWORD (возвращает DWORD в eax) Ex.: invoke atodw, ADDR Buffer3 htodw - сonvert hex string to DWORD (возвращает DWORD в eax) Ex.: invoke htodw, ADDR Buffer4 буду знать) ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Кейген MozgC |