write-ups

ARKANYOTA Write-Ups's

View on GitHub

La Réponse de Voris

Description

Vous rencontrez Mme de Beauvoir qui vous explique vouloir surprendre son mari Jean Sol Partre. Ce dernier est en train d'écrire un livre et a demandé à son ami Voris un titre approprié. Elle a réussi à se procurer un étrange message, qu'elle pense avoir été chiffré par Voris afin de limiter les fuites d'information. Ne sachant quoi faire avec ceci, elle s'est décidée à aller à la séance de spiritualisme du samedi au café littéraire, où elle vous a rencontré aujourd'hui. Par chance, vous connaissez une oracle pouvant peut être vous aider à déchiffrer ce message. Mais, malchance, cette dernière n'est qu'en mesure de chiffrer un message... Dommage, il va falloir réfléchir pour trouver le titre que Voris a proposé à Jean Sol !


Format : 404CTF{titre_du_livre}

message chiffré : pvfdhtuwgbpxfhocidqcznupamzsezp
NainCapable#2614

nc challenges.404ctf.fr 31682

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa => gvshnmijdwalablggmejiqvrhkixhns
mais

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab => hwtionjkexbmbcmhhnfkjrwsiljyiot

on conclut que en changant le dernier char: sa change le premier de +1

On change ainsi on se rend compte que quand on change un char a la place -i (en partant de la fin) de +1

le prmier char est changer de +1 le deuxieme +2 . . . le i eme de +i et le reste en bordel

In [7]: def diff_entre_chaines(chaine1, chaine2):
   ...:     if len(chaine1) != len(chaine2):
   ...:         raise ValueError("Les chaînes doivent avoir la même longueur.")
   ...:
   ...:     difference = []
   ...:     for c1, c2 in zip(chaine1, chaine2):
   ...:         difference.append((ord(c2) - ord(c1))%26)
   ...:
   ...:     return difference
   ...:
   ...: chaine1 = "gvshnmijdwalablggmejiqvrhkixhns"
   ...: chaine2 = "hwtionjkexbmbcmhhnfkjrwsiljyiot"
   ...:
   ...: difference = diff_entre_chaines(chaine1, chaine2)
   ...: print(difference)

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaabaa
aaaaaaaaaaaaaaaaaaaaaaaaaaabaaa
aaaaaaaaaaaaaaaaaaaaaaaaaabaaaa
aaaaaaaaaaaaaaaaaaaaaaaaabaaaaa
aaaaaaaaaaaaaaaaaaaaaaaabaaaaaa
aaaaaaaaaaaaaaaaaaaaaaabaaaaaaa
aaaaaaaaaaaaaaaaaaaaaabaaaaaaaa
aaaaaaaaaaaaaaaaaaaaabaaaaaaaaa
aaaaaaaaaaaaaaaaaaaabaaaaaaaaaa
aaaaaabaaaaaaaaaaaaaaaaaaaaaaaa
aaaaabaaaaaabaaaaaaaaaaaaaaaaaa
aaaabaaaaaaaaaaaaaaaaaaaaaaaaaa
abaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
zbaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

En changant le dernier      (-1) on a +1 partout
En changant le avant dernier(-2) on a +1 partout saut en 0 et 29 ou on a +2
Out[5]: '[1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]'

En changant le              (-3) on a +2 partout saut en 0 et 29 ou on a +2
Out[8]: '[1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]'


-4:
Out[9]: '[1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]'

Out[10]: '[1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]'


-11:
Out[11]: '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]'


-25:
Out[13]: '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25, 25, 25, 25, 25, 25]'

-26
Out[14]: '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0]'

-30
Out[15]: '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 1, 2, 3, 4, 5]'



A trouver:
Out[16]: '[15, 21, 5, 3, 7, 19, 20, 22, 6, 1, 15, 23, 5, 7, 14, 2, 8, 3, 16, 2, 25, 13, 20, 15, 0, 12, 25, 18, 4, 25, 15]'




A trouver en diff:
Out[22]: '[9, 0, 13, 22, 20, 7, 12, 13, 3, 5, 15, 12, 5, 6, 3, 22, 2, 17, 12, 19, 17, 23, 25, 24, 19, 2, 17, 21, 23, 12, 23]'

xdaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  lettre -1
oyoaaaaaaaaaaaaaaaaaaaaaaaaaaaa  lettre -2
+
lboaaaaaaaaaaaaaaaaaaaaaaaaaaaa  sum des 2, les 2 derniere lettre de juste

xgudaaaaaaaaaaaaaaaaaaaaaaaaaaa
In [77]: for x,i in zip([23, 12, 23, 21, 17, 2, 19, 24, 25, 23, 17, 19, 12, 17, 2, 22, 3, 6, 5, 12, 15, 5, 3, 13, 12, 7, 20, 22, 13, 0, 9],range(1,32)):
    ...:     arr = nb_pi(i)
    ...:     arr2 = arr*x
    ...:     arr3 = arr2%26
    ...:     arr4 = arr3+97
    ...:     arr5 = numpy.vectorize(lambda x:chr(x))(arr4)
    ...:     print(i, str("".join(list(arr5))))
In [89]: for x,i in zip([23, 12, 23, 21, 17, 2, 19, 24, 25, 23, 17, 19, 12, 17, 2, 22, 3, 6, 5, 12, 15, 5, 3, 13, 12, 7
    ...: , 20, 22, 13, 0, 9],range(1,32)):
    ...:     arr = nb_pi(i)
    ...:     arr2 = arr*x
    ...:     arr3 = arr2%26
    ...:     arr4 = arr3+97
    ...:     arr5 = numpy.vectorize(lambda x:chr(x))(arr4)
    ...:     print(i, str("".join(list(arr5))))
    ...:
1 xdaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2 oyoaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3 xgudaaaaaaaaaaaaaaaaaaaaaaaaaaa
4 fqkqfaaaaaaaaaaaaaaaaaaaaaaaaaa
5 rsisijaaaaaaaaaaaaaaaaaaaaaaaaa
6 yeweweyaaaaaaaaaaaaaaaaaaaaaaaa
7 tomomomhaaaaaaaaaaaaaaaaaaaaaaa
8 cwewewewcaaaaaaaaaaaaaaaaaaaaaa
9 zcycycycybaaaaaaaaaaaaaaaaaaaaa
10 dugugugugudaaaaaaaaaaaaaaaaaaaa
11 rsisisisisijaaaaaaaaaaaaaaaaaaa
12 hmomomomomomhaaaaaaaaaaaaaaaaaa
13 mcycycycycycyoaaaaaaaaaaaaaaaaa
14 jisisisisisisijaaaaaaaaaaaaaaaa
15 cweweweweweweweyaaaaaaaaaaaaaaa
16 esisisisisisisiseaaaaaaaaaaaaaa
17 dugugugugugugugugxaaaaaaaaaaaaa
18 umomomomomomomomomuaaaaaaaaaaaa
19 fqkqkqkqkqkqkqkqkqkvaaaaaaaaaaa
20 oycycycycycycycycycyoaaaaaaaaaa
21 pwewewewewewewewewewelaaaaaaaaa
22 vkqkqkqkqkqkqkqkqkqkqkvaaaaaaaa
23 dugugugugugugugugugugugxaaaaaaa
24 naaaaaaaaaaaaaaaaaaaaaaanaaaaaa
25 mcycycycycycycycycycycycyoaaaaa
26 tomomomomomomomomomomomomotaaaa
27 umomomomomomomomomomomomomogaaa
28 esisisisisisisisisisisisisiseaa
29 naaaaaaaaaaaaaaaaaaaaaaaaaaaana
30 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
31 jisisisisisisisisisisisisisisis

Avec ça on a leidaaaaaaaaaaaaaaaaaaaaaaaaaaa : les 3 dernierers

def nb_pi(index):

arr = numpy.array([0]*31)
if index == 1:
    arr[index-1] = +1
    arr[index] = -1
    return arr
if index == 31:
    arr[index-1] = 1
    return arr-nb_pi(index-1)
arr[index-1] = 1
arr[index] = -1
return arr-nb_pi(index-1)

Evolution finale:

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaj
message chiffre  : pebqwvrsmfjujkuppvnsrzeaqtrgqwb

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaaaaaarj
message chiffre  : gmjyedzaunrcrscxxdvazhmiybzoyej

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaaaaaars
message chiffre  : pvshnmijdwalablggmejiqvrhkixhns

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaaaaanes
message chiffre  : pvfuazvwqjnynoyttzrwvdieuxvkuaf

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaaaajees
message chiffre  : pvfdjiefzswhwxhcciafemrndgetdjo

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaaachees
message chiffre  : pvfdlkghbuyjyzjeekchgotpfigvflq

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaaaweaaa
message chiffre  : gvshjiefzswhwxhcciafemrndgetdjo

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaaaylees
message chiffre  : pvfdhgcdxqufuvfaagydckplbecrbhm

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaanllees
message chiffre  : pvfdhtpqkdhshisnntlqpxcyorpeouz

message en clair : aaaaaaaaaaaaaaaaaaaaaaaafillees
message chiffre  : pvfdhtuvpimxmnxssyqvuchdtwujtze

message en clair : aaaaaaaaaaaaaaaaaaaaaaabeillees
message chiffre  : pvfdhtuwqjnynoyttzrwvdieuxvkuaf

message en clair : aaaaaaaaaaaaaaaaaaaaaaqleillees
message chiffre  : pvfdhtuwgzdodeojjphmltyuknlakqv

message en clair : aaaaaaaaaaaaaaaaaaaaacoleillees
message chiffre  : pvfdhtuwgbfqfgqllrjonvawmpncmsx

message en clair : aaaaaaaaaaaaaaaaaaaaksoleillees
message chiffre  : pvfdhtuwgbpapqavvbtyxfkgwzxmwch

message en clair : aaaaaaaaaaaaaaaaaaaxnsoleillees
message chiffre  : pvfdhtuwgbpxmnxssyqvuchdtwujtze

message en clair : aaaaaaaaaaaaaaaaaatensoleillees
message chiffre  : pvfdhtuwgbpxfgqllrjonvawmpncmsx

message en clair : aaaaaaaaaaaaaaaaabsensoleillees
message chiffre  : pvfdhtuwgbpxfhrmmskpowbxnqodnty

message en clair : aaaaaaaaaaaaaaaaxesensoleillees
message chiffre  : pvfdhtuwgbpxfhojjphmltyuknlakqv

message en clair : aaaaaaaaaaaaaaateesensoleillees
message chiffre  : pvfdhtuwgbpxfhocciafemrndgetdjo

message en clair : aaaaaaaaaaaaaagneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocioglksxtjmkzjpu

message en clair : aaaaaaaaaaaaaprneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidvazhmiybzoyej

message en clair : aaaaaaaaaaaavurneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqvuchdtwujtze

message en clair : aaaaaaaaaaahourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcbjokadbqagl

message en clair : aaaaaaaaaayjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqczhmiybzoyej

message en clair : aaaaaaaaagsjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznsoehfuekp

message en clair : aaaaaaaacesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznuqgjhwgmr

message en clair : aaaaaaabcesjourneesensoleillees
message chiffre  : qxihmzbeplajsvdszvjwujroehfuekp

message en clair : aaaaaaazdesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupfigvflq

message en clair : aaaaaavedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupadbqagl

message en clair : aaaaajmedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamkzjpu

message en clair : aaaapumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzoyej

message en clair : aaaelumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzscin

message en clair : aacclumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzsekp

message en clair : anpclumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzsexc

message en clair : ncpclumedesjourneesensoleillees
message chiffre  : rzllrfimyvlvfjsiqncqpfolymbwkfx

message en clair : anpclumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzsexc

message en clair : clpclumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzsexe

message en clair : rlpclumedesjourneesensoleillees
message chiffre  : ezylefvmlvyvsjfidnpqcfbllmowxfb

message en clair : aapclumedesjourneesensoleillees
message chiffre  : cvsduthwtbcxshbcvddcmnhpnmmsrxc

message en clair : clpclumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzsexe

message en clair : acyaaaaaaaaaaaaaaaaaaaaaaaaaaaa
message chiffre  : gvshnmijdwalablggmejiqvrhkixhpu

message en clair : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
message chiffre  : gvshnmijdwalablggmejiqvrhkixhns

message en clair : lpaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
message chiffre  : gvshnmijdwalablggmejiqvrhkixhnd

message en clair : cjnclumedesjourneesensoleillees
message chiffre  : lntnnvsqwnxbfdgqsjsatdgxemvksjq

message en clair : clpclumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzsexe

message en clair : napclumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzsexp

message en clair : ncnclumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzsezr

message en clair : lenclumedesjourneesensoleillees
message chiffre  : pvfdhtuwgbpxfhocidqcznupamzsezp
Alors la, chapeau !

Methode a suivre:

#Inutile
def nb_pi(index):

    arr = numpy.array([0]*31)
    if index == 1:
        arr[index-1] = +1
        arr[index] = -1
        return arr
    if index == 31:
        arr[index-1] = 1
        return arr-nb_pi(index-1)
    arr[index-1] = 1
    arr[index] = -1
    return arr-nb_pi(index-1)

def diff_entre_chaines(chaine1, chaine2):
    if len(chaine1) != len(chaine2):
        raise ValueError("Les chaînes doivent avoir la même longueur.")
    difference = []
    for c1, c2 in zip(chaine1, chaine2):
        difference.append((ord(c2) - ord(c1))%26)
    return difference

def ar(lis):
    h = numpy.array([0]*31)
    for x,i in zip(lis,range(1,32)):
        arr = numpy.array([0]*31)
        if i!=31: arr[i] = -1
        arr[i-1] = 1
        arr2 = (arr*x)%26
        h += arr2
        print("".join(list(numpy.vectorize(lambda x:chr(x))((arr2)+97))))
    "".join(list(numpy.vectorize(lambda x:chr(x))((h%26)+97)))

dist = diff_entre_chaines("<message chiffre courant>", "pvfdhtuwgbpxfhocidqcznupamzsezp")
print(dist)
ar(dist[::-1])

Prendre a derniere sortie qui n’est pas aaa...aaa

et la sommer avec le <message en clair courant>

Jusqu’a que il n’ai plus que des aaa…aaa

404CTF{lenclumedesjourneesensoleillees}