Сейчас на форуме: Dart Raiden, Alf (+6 невидимых) |
eXeL@B —› Основной форум —› Как инвертировать крипто-функцию |
Посл.ответ | Сообщение |
|
Создано: 01 сентября 2004 01:15 · Личное сообщение · #1 Есть крипто-функция в программе, для примера я ее перевел в дельфи: допустим я ввожу код 1122334455667788 дальше этот код поступает в функцию begin var const1, const2, const3,const4, eax, ebx, ecx, edx, edi, vved1, vved2, k : Integer; begin const1:= $E6D287D1; // это четыре постоянный константы const2:= $A749C7C3; // const3:= $A85E0BE3; // const4:= $C2B6FA05; // vved1 := $44332211; // первая часть введенного кода vved2 := $88776655; // вторая часть введенного кода k := 1; // cript1 while k < 5 do begin edx := vved1; case k of 1: begin ecx := const1; eax := const4; ebx := const2; end; 2: begin ecx := const3; eax := const2; ebx := const4; end; 3: begin ecx := const2; eax := const1; ebx := const3; end; 4: begin ecx := const4; eax := const3; ebx := const1; end; end; //cript edx := edx + ebx; ebx := ebx + edx; edi := edx; edi := edi shr $7; edx := edx xor edi; ecx := ecx + edx; edx := edx + ecx; edi := ecx; edi := edi shl $0D; ecx := ecx xor edi; eax := eax + ecx; ecx := ecx + eax; edi := eax; edi := edi shr $11; eax := eax xor edi; ebx := ebx + eax; eax := eax + ebx; edi := ebx; edi := edi shl $9; ebx := ebx xor edi; edx := edx + ebx; ebx := ebx + edx; edi := edx; edi := edi shr $3; edx := edx xor edi; ecx := ecx + edx; edx := ecx; edx := edx shl $7; ecx := ecx xor edx; eax := eax + ecx; edx := ebx; edx := edx shr $0F; eax := eax xor edx; ebx := ebx + eax; eax := ebx; eax := eax shl $0B; ebx := ebx xor eax; /////////////////// eax := vved2 xor ebx; edx := vved1; vved2 := edx; vved1 := eax; k := k+1; end; на выходе из функции вторая половина vved2 должна получиться D9F6! может кто подскажет новичку как переделать функцию чтобы получать правильный входящий код! |
|
Создано: 01 сентября 2004 05:23 · Личное сообщение · #2 |
|
Создано: 01 сентября 2004 06:41 · Личное сообщение · #3 |
|
Создано: 01 сентября 2004 07:29 · Личное сообщение · #4 |
|
Создано: 01 сентября 2004 07:41 · Поправил: AlexZ · Личное сообщение · #5 Код Neo2002 мне наверное не по силам, но я вот тоже хотел-бы узнать (код для примера, выдуманный мной): mov eax, input mov edx, eax add eax, 30 xor eax, edx mov output, eax Значит, outpit=(input+30) xor input input=(input+30) xor output //брутфорсить уравнение Или есть ещё способы? Не очень люблю математику. ----- Я медленно снимаю с неё UPX... *FF_User* |
|
Создано: 01 сентября 2004 09:08 · Личное сообщение · #6 переделал - точнее упростил алгоритм, сделал его без циклов ... _________________________________________ c1= $E6D287D1; c2= $A749C7C3; c3= $A85E0BE3; c4= $C2B6FA05; vved01 = 44332211; vved02 = 88776655; //первый цикл vved11 = vved02 xor cript(vvde01, c1, c4, c2) vved12 = vved01; //второй цикл vved21 = vved12 xor cript(vvde11, c3, c2, c4) vved22 = vved11; //третий цикл vved31 = vved22 xor cript(vvde21, c2, c1, c3) vved32 = vved21; //четвертый цикл vved41 = vved32 xor cript(vvde31, c4, c3, c1) vved42 = vved31; vved42 - должен быть XXXXD9F6 XXXX - это любое число ______________________________________ вот теперь можно анализировать !!! |
|
Создано: 01 сентября 2004 15:45 · Личное сообщение · #7 |
|
Создано: 02 сентября 2004 03:43 · Личное сообщение · #8 ну рреверснул! c1= $E6D287D1; c2= $A749C7C3; c3= $A85E0BE3; c4= $C2B6FA05; vved31 = vved42; vved32= vved41 xor crypt(vved42, c4, c3, c1); vved21 = vved32; vved22= vved31 xor crypt(vved32, c2, c1, c3); vved11 = vved22; vved12= vved21 xor crypt(vved22, c3, c2, c4); vved01 = vved12; vved02= vved11 xor crypt(vved12, c1, c4, c2); действительно все просто! |
|
Создано: 02 сентября 2004 03:43 · Поправил: Neo2002 · Личное сообщение · #9 |
|
Создано: 02 сентября 2004 08:31 · Личное сообщение · #10 |
|
Создано: 03 сентября 2004 00:24 · Личное сообщение · #11 |
eXeL@B —› Основной форум —› Как инвертировать крипто-функцию |
Эта тема закрыта. Ответы больше не принимаются. |