Сейчас на форуме: Dart Raiden, Alf (+6 невидимых)

 eXeL@B —› Основной форум —› Как инвертировать крипто-функцию
Посл.ответ Сообщение

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

Создано: 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!

может кто подскажет новичку как переделать функцию чтобы получать правильный входящий код!



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

Создано: 01 сентября 2004 05:23
· Личное сообщение · #2

сделай сам удовольствие от результата гарантирую



Ранг: 192.3 (ветеран), 18thx
Активность: 0.120
Статус: Участник
stoned machine-gunner

Создано: 01 сентября 2004 06:41
· Личное сообщение · #3

Да, помнится давно это было, Funbit мне дал прогу с этой хнёй, тогда я подзапарился и забил... =)
А так тут всё оччень легко.
З.Ы. Используется ArgoSoft'овская компонента.

-----
once you have tried it, you will never want anything else




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

Создано: 01 сентября 2004 07:29
· Личное сообщение · #4

ну не чтобы ооччень легко,

у меня ушло где-то часов 5-6, если не путаю
(разбор+написание генерации)



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 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*




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

Создано: 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 - это любое число
______________________________________
вот теперь можно анализировать !!!



Ранг: 192.3 (ветеран), 18thx
Активность: 0.120
Статус: Участник
stoned machine-gunner

Создано: 01 сентября 2004 15:45
· Личное сообщение · #7

Ну реверси ты её реверсни! Вдумайся в значение этого слова

-----
once you have tried it, you will never want anything else




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

Создано: 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);

действительно все просто!



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

Создано: 02 сентября 2004 03:43 · Поправил: Neo2002
· Личное сообщение · #9

Осталось только выставить правильные параметры c
при вызове Cript()




Ранг: 536.4 (!), 171thx
Активность: 0.660.13
Статус: Администратор
Создатель CRACKL@B

Создано: 02 сентября 2004 08:31
· Личное сообщение · #10

Neo2002 пишет:
Осталось только выставить правильные параметры c
при вызове Cript()

Неа, если идти назад от желаемого результата нужно и y = crypt(x,a,b,c) обратить в x = decrypt (y,a,b,c);

-----
Всем не угодишь




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

Создано: 03 сентября 2004 00:24
· Личное сообщение · #11

Bad_guy пишет:
Неа, если идти назад от желаемого результата нужно и y = crypt(x,a,b,c) обратить в x = decrypt (y,a,b,c);

Неа, ты не прав! Все прекрасно кейгенится по моей формуле!

.... Все по теме вопросов нет!!!


 eXeL@B —› Основной форум —› Как инвертировать крипто-функцию
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати