Привет!

Выкладываем ответы на предложенную нами
ранее головоломку
для трезвомыслящих людей :).

Задание 1.

Ответ:
225787 449089253

Мы имеем последовательность
18 97 115 1973 1990 226877 … …
соответственно A B C D E F G H

18 xor 97 = 115 
115 xor 1973 = 1990 
т.о. G = 1990 xor 226877 = 225787

18 * 115 — 97 = 1973 
115 * 1990 — 1973 = 226877
т.о. H = 1990 * 225787 — 226877 = 449089253

Задание 2.

Ответ: VERYG00DY0UDECRYPTEDIT

D2>D1+?§9»$28.1!#-

В HEX:
44 32 3E 44 31 19 18 2B 3F 15 39 
27 27 24 32 38 2E 31 21 1F 23 2D

На один шаг сложнее обычного askii сдвига. К коду каждого зашифрованного символа прибавляется
12 (hex) + индекс.

for (int i=0;i<22;i++)
cr[i]=cr[i]+18+i;

где cr[i] — зашифрованный символ

т.о.

44+12+0=57, (57 код символа «V»)
32+12+1=46, (57 код символа «E»)
3e+12+2=52, (57 код символа «R»)
..

Задание 3.

WELL DONE!

В paint’е достаточно залить фон любым отличным от синего цветом.

Задание 4.

Приведу решение, которое нам прислал
победитель:

Самые интересные функции: 
========== cut from TrashPickUper ========== 
procedure CrackInfoFile(InfoFile: String; RFLst: TList); 
var rf: PRecycledFile; 
MS: TMemoryStream; 
S1: PChar; 
m: pointer; 
d,n: integer; 
begin 
MS:=TMemoryStream.Create; 
MS.LoadFromFile(InfoFile); 
if (MS.Memory<>nil) and (MS.Size>20) then begin 
m:=MS.Memory; 
n:=integer((pointer(integer(m)+280))^); 
case byte(m^) of 
4: d:=280; 
5: d:=800; 
else 
inc(integer(m),MS.Size); 
end; 
inc(integer(m),20); 
while (integer(m)-integer(MS.Memory))<MS.Size do begin 
S1:=m; 
if S1^<>#0 then begin 
New(rf); 
rf.RealName:=S1; 

rf.TempName:=S1^+’:\Recycled\’+’D’+S1^+ IntToStr(n)+ExtractFileExt(rf.RealName); 
rf.idx:=n; 
RFLst.Add(rf); 
end; 
inc(integer(m),d); 
inc(n); 
end; 
end; 
MS.Free; 
end; 

function RestoreFile(rf: PRecycledFile): boolean; 
var MS: TMemoryStream; 
S1: PChar; 
m: pointer; 
d,n: integer; 
InfoFile: String; 
begin 
Result:=false; 
InfoFile:=ExtractFilePath(rf.TempName)+’INFO2′; 

MS:=TMemoryStream.Create; 
MS.LoadFromFile(InfoFile); 
if (MS.Memory<>nil) and (MS.Size>20) then begin 
m:=MS.Memory; 
n:=integer((pointer(integer(m)+280))^); 
case byte(m^) of 
4: d:=280; 
5: d:=800; 
else 
inc(integer(m),MS.Size); 
end; 
inc(integer(m),20); 
d:=(rf.idx-n)*d; 
if d>0 then inc(integer(m),d); 
if (integer(m)-integer(MS.Memory))<MS.Size then begin 
S1:=m; 
if S1^<>#0 then begin 
S1^:=#0; 
DeleteFile(InfoFile); 
MS.SaveToFile(InfoFile); 
ForceDirectories(ExtractFilePath(rf.RealName)); 
Result:=RenameFile(rf.TempName,rf.RealName); 
end; 
end; 
end; 
MS.Free; 
end; 

Задание 5.

Очень хорошо это задание описал Samvel.

Сначала проверяется длина введенного пароля, которая должна составлять 14 символов.
Затем из введенного номера последовательно составляются и сравниваются 5 пар результатов: результат1 и результат2.

I, II, III, IV, V — номера пар 

Результат1 I пары получается следующим образом:
2 символ xor-тся с 1-м (II пара — 3-й со 2-ым; III пара — 4-й с
3-им; IV пара 5-й с 4-ым, V пара 6-й с 5-ым). К результату прибавляется 1, (II пара — 2, III — 3, IV — 4, V — 5). 
Полученная сумма складывается с кодом 7-го символа. 

Результат 2 I пары получается путем: код 8 символа складывается
с кодом 9-го символа (II пара — с кодом 10-го, III пара — 11-го ,IV пара — 12-го ,V пара- 13-го).

Сравниваются Результат 1 и результат 2 каждой пары.
Если все 10 результатов попарно равны, то
"Correct". Например, пароли: 230222g4588784, 111111a1123451 

И кейген на Рascal’е, от Antoha.

var 
c,i,j : word; 
fl : boolean; 
str : string; 
begin 
{————— et vmesto clrcsr() iz crt modula a to mojet glukat} 
asm 
mov ax,3 
int 10h 
end; 
writeln(‘Keygen by ant0xa’); 
writeln(‘How many keys ? [1..65535]’); 
readln(c); 
randomize; str[0]:=#14;j:=1; 
while j<=c do 
begin 
str[7]:=chr(random(74)+48); str[8]:=str[7]; 
str[14]:=chr(random(74)+48); 
for i:=1 to 6 do 
str[i]:=chr(random(74)+48); 
for i:=1 to 5 do 
str[i+8]:=chr(ord(str[i+1]) xor ord(str[i]) + i); 
fl:=true; 
for i:=1 to 14 do 
if (ord(str[i])<48) or (ord(str[i])>122) then 
begin 
fl:=false; 
break; 
end; 
if fl then 
begin 
writeln(‘Key ‘,j,’ is: ‘,str); 
j:=j+1; 
end; 
end; 
readln; 
end. 

Победил в нашем конкурсе Kowdle
он единственный решил все  задания.
Просим его отписать на xa@real.xakep.ru
и мы подарим ему какую-нибудь важную
ценность 🙂 Так же хочется отметить: Samvel —
занял второе место, Dcr и конечно DigitalScream :).

Надеемся, что вам понравилось, пишите ваши
отзывы о головоломке сюда, в комментарии.

Оставить мнение

Check Also

Мошенничество по воздуху. Разбираем возможность Cryptogram Replay Attack в Apple Pay

Задача платежной системы — списать нужную сумму в пользу продавца со счета верное число ра…