Сейчас на форуме: UniSoft, laslo, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› Алгоритм асма на срр
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 октября 2011 14:49
· Личное сообщение · #1

Доброго времени суток.

Изучаю крэкми, и решил написать для одного из них кейген на срр.
Данный алгоритм генерирует ключ, по введенному имени.

0040130E |. B3 1A MOV BL,1A
00401310 |> 803E 00 /CMP BYTE PTR DS:[ESI],0
00401313 |. 74 15 |JE SHORT Копия_54.0040132A
00401315 |. 8A06 |MOV AL,BYTE PTR DS:[ESI]
00401317 |. 02C1 |ADD AL,CL
00401319 |. 32C1 |XOR AL,CL
0040131B |. F6F3 |DIV BL
0040131D |. 66:C1E8 08 |SHR AX,8
00401321 |. 04 41 |ADD AL,41
00401323 |. 8807 |MOV BYTE PTR DS:[EDI],AL
00401325 |. 47 |INC EDI
00401326 |. 46 |INC ESI
00401327 |. 41 |INC ECX
00401328 |.^EB E6 \JMP SHORT Копия_54.00401310

написал код на срр

int main()
{
int len;
int x;
std::string Str1;
std::cin>>Str1;
std::string Str2=Str1;
len=Str1.length();
for(int i=0;i<len;i++)
{
x=Str1[i];
x+=i;
x^=i;
x/=26;
x>>=8;
x+=41;
Str2[i]=x;
}
std::cout<<Str2;
system("PAUSE");
return 0;
}

Однако возникла загвоздка в строке, где DIV, тк после деления на асме после этой команды в EAX в AL помещается целая часть, а в AH остаток от деления, а после этого все значение сдвигается на 8 бит. Как на срр можно реализовать такое действие?
Заранее благодарен.




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 31 октября 2011 15:05
· Личное сообщение · #2

Вместо
x/=26;
x>>=8;

используй

x%=26;

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 88.2 (постоянный), 111thx
Активность: 0.070.01
Статус: Участник

Создано: 31 октября 2011 19:37
· Личное сообщение · #3

А не проще асмовскую вставку сделать?

| Сообщение посчитали полезным: OnLyOnE, DimitarSerg

Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 31 октября 2011 20:15
· Личное сообщение · #4

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



Ранг: 12.6 (новичок), 3thx
Активность: 0=0
Статус: Участник

Создано: 01 ноября 2011 21:47
· Личное сообщение · #5

M0use пишет:
Как на срр можно реализовать такое действие?

А не проще в IDA с помощью Hex-Rays сгенерировать сишный код?

| Сообщение посчитали полезным: Skino, DimitarSerg

Ранг: 7.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 ноября 2011 12:12
· Личное сообщение · #6

Fant0m's crackme #4. Узнаю, да. Так. Я уже совсем забыл Си. Надельфи это выглядит как:
var
i:integer;
begin
for i:=0 to length(name)-1 do begin
name[i+1]:=chr((ord(name[i+1])+i xor i) mod $1A+$41);
end;
end;

И ответ на твой вопрос: там через DIV вычисляется остаток от деления (mod в Паскале и % в Си).

P.S. x+=41; //неверно. Там в хексе 41, т.е. 0x41


 eXeL@B —› Программирование —› Алгоритм асма на срр
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати