Crimediggers reverse opdracht

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Scale
  • Registratie: Oktober 2006
  • Laatst online: 28-09 21:27
Crimediggers heeft een nieuwe opdracht, ditmaal een programmeer opdracht in javascript.
https://www.crimediggers.nl/
Op 28 oktober 2019, om 3:23 is bijgevoegd scriptje gebruikt om een code te genereren. Kun jij er achter komen welke?
Op de opdracht bevat drie keer de javascript Math.random() functie.
Mijn eerste gedachte was dat deze mogelijk geseed zou worden op basis van de huidige tijd.

Maar na wat onderzoek blijkt dat de implementatie per browser afhankelijk is,
Al gebruiken ze tegenwoordig bijna allemaal xorshift128+.

Zover ik kan vinden maakt deze geen gebruik van de huidige tijd als seed,
Voor mij lijkt deze opdracht op dit moment onmogelijk.

Maar er zal vast iemand slimmer zijn dan ik, die een idee heeft waar te beginnen.

Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je geeft zelf al aan dat de huidige tijd gebruikt wordt als seed, het feit dat het bericht het volgende zegt
28 oktober 2019, om 3:23
Maakt natuurlijk dat je de informatie hebt die nodig is om dezelfde seed te gebruiken ;)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Scale
  • Registratie: Oktober 2006
  • Laatst online: 28-09 21:27
Woy schreef op donderdag 5 december 2019 @ 14:18:
Je geeft zelf al aan dat de huidige tijd gebruikt wordt als seed, het feit dat het bericht het volgende zegt

[...]

Maakt natuurlijk dat je de informatie hebt die nodig is om dezelfde seed te gebruiken ;)
Hey Woy,

Ik schreef dat het mijn eerste gedachte was dat de huidige tijd als seed gebruikt werd,
Maar na onderzoek blijkt dit niet het geval. Dus helaas kan je die timestamp niet gebruiken als seed.

Acties:
  • 0 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 23-09 14:00
Het is de bedoeling dat je de functie reverse-engineered. De datum heb je zoals @Woy zegt wel nodig, maar niet voor de seed. Er worden inderdaad random values gebruikt, maar dat is in feiten iets anders dan x2 = 25 waarbij x de random waarde was; je kunt achterhalen wat deze geweest zou zijn bij toen de functie werd uitgevoerd.

Edit:
spoiler:
ik heb het uit nieuwsgierigheid zelf even geprobeerd, en het is antwoord een stuk simpeler dan je misschien zou denken

[ Voor 16% gewijzigd door ThomasG op 05-12-2019 15:50 ]


Acties:
  • 0 Henk 'm!

  • Scale
  • Registratie: Oktober 2006
  • Laatst online: 28-09 21:27
Ik denk dat er beetje een mismatch is verwachte niveau is.
Natuurlijk begrijp ik dat het de bedoeling is om de functie te reverse engineren en ook begrijp ik dat de datum van belang is.

De random functie bepaald een groot deel van de uiteindelijke uitvoer. Maar als dit per browser anders kan zijn zonder te vermelden welke browser word het alweer lastig.

Het doel van de topic was om te discussiëren hoe xorshift128+ geseed zou kunnen worden.

Acties:
  • 0 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 23-09 14:00
Scale schreef op donderdag 5 december 2019 @ 15:51:
Ik denk dat er beetje een mismatch is verwachte niveau is.
Natuurlijk begrijp ik dat het de bedoeling is om de functie te reverse engineren en ook begrijp ik dat de datum van belang is.

De random functie bepaald een groot deel van de uiteindelijke uitvoer. Maar als dit per browser anders kan zijn zonder te vermelden welke browser word het alweer lastig.

Het doel van de topic was om te discussiëren hoe xorshift128+ geseed zou kunnen worden.
Je focust teveel op de Math.random(). Op je op weg te helpen, het wordt bijvoorbeeld gebruikt in de regel:
JavaScript:
1
n = Math.floor(10 * Math.random()) + 1
We weten niet wat de random waarde is, maar wel dat het een integer tussen de 1 en de 10 moet zijn. Vervolgens kun je gaan kijken waar n gebruikt wordt. Vervolgens stel je de vragen waarvoor wordt het gebruikt? en heeft het bijvoorbeeld effect op het resultaat van de functie?

Acties:
  • 0 Henk 'm!

  • Scale
  • Registratie: Oktober 2006
  • Laatst online: 28-09 21:27
Thanks Thomas, ik duik er nog eens in zonder direct de moeilijkste oplossing te bedenken ;)

Acties:
  • 0 Henk 'm!

  • Sabodas
  • Registratie: December 2019
  • Laatst online: 13-12-2019
Ik blijf "hangen" op mogelijke waarde voor parameter t. Indien lege string of alleen spatie(s) dan geen password (lege string); indien null dan wel password maar kennelijk niet correct. Dus er moet volgens mij een niet-lege waarde voor t worden meegegeven aan de functie - maar heb daar nog geen "logische" kandidaat voor kunnen bedenken...

Acties:
  • 0 Henk 'm!

  • GrooV
  • Registratie: September 2004
  • Laatst online: 02-10 06:47
Het is erg simpel. tip: gebruik alle info die wordt gegeven

[ Voor 47% gewijzigd door GrooV op 10-12-2019 20:20 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 17:18
GrooV schreef op dinsdag 10 december 2019 @ 20:18:
Het is erg simpel. tip: gebruik alle info die wordt gegeven
Ik zit vast op hetzelfde punt als Sabodas. Wat de functie doet is duidelijk, maar ik heb geen idee wat de invoer moet zijn.

Heb ik behalve de inhoud van het bestand "codegenerator.js" en de vraagstelling "Op 28 oktober 2019, om 3:23 is bijgevoegd scriptje gebruikt om een code te genereren. Kun jij er achter komen welke?" nog iets nodig?

(Het zipbestand bevat ook nog metadata en een hoop OS-X-gerelateerde meuk, en op de website staat natuurlijk ook vanalles, maar ik ga er vooralsnog vanuit dat dat je dat niet nodig hebt om het raadsel op te lossen.)

Acties:
  • 0 Henk 'm!

Verwijderd

t is een variabele die veel gebruikt wordt voor tijd. Het lijkt dan ook voor de hand te liggen deze daarvoor te gebruiken. Helaas geeft deze in Epoch of javascript standaard blijkbaar niet de gewenste uitkomst. Ook een correctie naar dezelfde uitdrukking in minuten ( er worden immers geen seconden en milliseconden genoemd in de challenge ) brengt niet het gewenste resultaat. Technisch gezien zou dan ook in de opdracht moeten staan WAAR de code werd gegenereerd ivm tijdzones?
:?

Acties:
  • 0 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 23-09 14:00
Verwijderd schreef op zaterdag 14 december 2019 @ 13:48:
t is een variabele die veel gebruikt wordt voor tijd. Het lijkt dan ook voor de hand te liggen deze daarvoor te gebruiken. Helaas geeft deze in Epoch of javascript standaard blijkbaar niet de gewenste uitkomst. Ook een correctie naar dezelfde uitdrukking in minuten ( er worden immers geen seconden en milliseconden genoemd in de challenge ) brengt niet het gewenste resultaat. Technisch gezien zou dan ook in de opdracht moeten staan WAAR de code werd gegenereerd ivm tijdzones?
:?
Je zoekt er teveel achter. De variabele had net zo goed a of b kunnen heten.
spoiler:
Hint: t wordt gebruikt als string, dus de kans is groot dat het al een string is.

[ Voor 7% gewijzigd door ThomasG op 16-12-2019 12:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Hebben jullie de opdracht inmiddels opgelost?
Ik ben vandaag ook begonnen, maar kom er niet uit. Kom er niet uit wat er voor t ingevuld moet worden. de tijd vul ik bij e in maar dan nog blijft veel onduidelijk.
voornamelijk dit stuk snap ik niet : for(var l=0;l<e.split(" ")[0].length;l++)
r+=btoa(e.split(" ")[0][l]+o[l]).replace("=","");
a+=String.fromCharCode(Math.floor(25*Math.random())+97)

iemand nog een hint voor mij O-)

Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 13:28
t is volgens mij niet relevant, omdat deze er met de split al genegeerd wordt.

Er zitten 3 random functies in, afhankelijk van de random generator, is het antwoord nooit te vinden. Ik weet niet van welke browser implementatie men uitgaat.

Acties:
  • 0 Henk 'm!

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Ik heb dus echt de ballen verstand van javascript, sowieso snap ik het eerste deel al niet.
Iets gebeautified:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
function createPassword(t) {
    for (var r = "", 
                e = String(t + " " + (new Date).getHours() + ":" + (new Date).getMinutes()),
                n = Math.floor(10 * Math.random()) + 1,
                a = String("".substring(0, 9)),
                o = "", 
                g = 0;
            g < e.split(" ")[1].length;
            g++) 
                o = btoa(e[r]).replace("==", "") + o;
    ...
    ...}

Ik snap echt geen reet van wat het allemaal doet, maar:
e.split(" ")[1].length; is het deel na de spatie, omdat het om 3:23 is ingevuld heb je dus een iteratie van 4 ?
r = "", hoe kun je die gebruiken als index op e[r] ?
spoiler:
Klopt mijn redenatie dan, dat o dus 4x base64 van "undefined" is?
Of anders als r als 0 wordt gezien: 4 x base64 van het eerste karakter van t en dan de == er steeds afgesloopt.

Dan het 2de stukje:
JavaScript:
1
2
3
4
5
    for (o.length < e.length && (o += o); a.length < 10;) {
        for (var l = 0; l < e.split(" ")[0].length; l++) 
            r += btoa(e.split(" ")[0][l] + o[l]).replace("=", "");
        a += String.fromCharCode(Math.floor(25 * Math.random()) + 97)
    }

Aangezien a leeg is (?) en er steeds een lowercase letter aan wordt toegevoegd, lijkt me die buitenste loop gewoon een iteratie van 10 .
Dan is er weer een iteratie met de lengte van het "wachtwoord"
die vult een base64 van het x-ste karakter van het wachtwoord + x-ste karatker van o en haalt daar steeds de = weer vanaf
Dus r is dan 10x het stuk tekst van de binnenste loop
En dan de return waarde
JavaScript:
1
return r.concat(Math.random().toString(36).substr(2, n)).slice(0, -n).substring(r.length - 16)

Daar heb ik nog geen idee van wat dat allemaal doet.
-edit-
Het deel concat(Math.random().toString(36).substr(2, n)).slice(0, -n) lijkt een stuk string te maken die weer wordt verwijderd ?, dus dan houdt je alleen de laatste 16 karakters over van het ding.
spoiler:
Maar dan zou dit overblijven?
function createPassword(t) {
var r = "";
var o = btoa("undefinedundefinedundefinedundefined");

for (var a = 0; a < 10; a++) {
for (var l = 0; l < t.split(" ")[0].length; l++)
r += btoa(t[l] + o[l]).replace("=", "");
}
return = r.substring(r.length - 16);
-edit- Aangepast voor als de code een spatie heeft.
}

Nou en dan weet ik het ook niet meer....
-edit-
WTF BBQ ik heb hem.
spoiler:
datum/tijd notatie volgens iso norm of epoch is voor nerds... ;( jan-boerenfluitjes FTW

Het "reverse engineeren" houdt dus in dat t een datum/tijd notatie is.
Daarna is het gok de goals in welk formaat, en pleur het maar door het gedownloade javascript.
Reverse engineeren van de code was echt totaal zinloos.... :X

Ik voel me echt DE Uber Crimefighter......wat een anti climax. TEH FUCK :(

AAGGGHH. Ik heb uit pure wanhoop eerst nog de geo opgelost, in de hoop daar iets van info voor deze challenge te kunnen vinden. 8)7

[ Voor 30% gewijzigd door Vaan Banaan op 12-02-2020 22:46 ]

500 "The server made a boo boo"


Verwijderd

Thanks!
Nu heb ik hem ook
Zo veel simpeler dan ik dacht 8)7
Nu ga ik verder met de andere opdrachten

Acties:
  • 0 Henk 'm!

  • g0ldfish
  • Registratie: Februari 2015
  • Laatst online: 02-05 09:20
Welke datum tijd notatie moet je gebruiken?

En moet je voor t iets invullen tussen aanhalingstekens?
Dus createPassword('blah') bv?

Tot nu toe heb ik het volgende geprobeerd:
spoiler:
ingevuld bij createPassword: "2019-10-28T03:23Z" en allerlei varianten daarop maar geen 1 is de goeie :(


Iemand andere ideeen/tips?

[ Voor 42% gewijzigd door g0ldfish op 20-02-2020 14:34 ]


Acties:
  • 0 Henk 'm!

  • bartbh
  • Registratie: Maart 2004
  • Niet online
@Verwijderd @Vaan Banaan kan een van jullie wellicht nog een tipje geven?

De geo opdracht was ik zo uit, maar volgens mij blijf ik me hier blind staren op iets verkeerds. Net zoals de mensen boven mij.

Acties:
  • 0 Henk 'm!

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

De notatie is GEEN iso norm, GEEN epoch, GEEN enzovoort, enzovoort.
Het is gewoon een datum / tijd notatie in een normaal leesbare vorm, je gebruikt ook spatie(s)

Als je er echt niet uitkomt, de notatievorm:
spoiler:
Kijk eens bij een willekeurige post hier op dit forum naar de notatie van Voor ..% gewijzigd door .. op ..

En voor degenen die gewoon het antwoord willen weten:
spoiler:
De datum/tijd notatie is in de vorm: 'dd-mm-jjjj uu:mm'
De tijd is zelfs niet eens nodig, omdat de code er sowieso nog een spatie en "tijd" aan toevoegt.
Het codeert vervolgens alleen het deel voor de eerste spatie.
Dus alleen datum 'dd-mm-jjjj' werkt ook.

De uitkomst wordt dan oLVcMloMHAMWIO..
(de laatste 2 karakters heb ik vervangen door puntjes, de volledige code is het goede antwoord)

500 "The server made a boo boo"


Acties:
  • 0 Henk 'm!

  • Japie3krekel
  • Registratie: September 2020
  • Laatst online: 14-03-2022
bartbh schreef op zondag 7 juni 2020 @ 23:00:
@Verwijderd @Vaan Banaan kan een van jullie wellicht nog een tipje geven?

De geo opdracht was ik zo uit, maar volgens mij blijf ik me hier blind staren op iets verkeerds. Net zoals de mensen boven mij.
hoe verwachten ze dat je het antwoord geeft bij de geo opdracht want wat ik nu heb lat lon rekent hij fout
spoiler:
ik heb nu met comm de overeenkomende line gepakt en die lat en lon ingevuld zowel afgekapt na vier cijfers na de punt en niet maar hij blijft het fout rekenen ik weet dat het op amsterdam centraal is maar niet hoe ik het antwoord moet invoeren

Acties:
  • 0 Henk 'm!

  • Deleon78
  • Registratie: Oktober 2010
  • Laatst online: 11:35
.

[ Voor 102% gewijzigd door Deleon78 op 26-07-2021 15:57 ]


Acties:
  • +1 Henk 'm!

  • BosGnoom
  • Registratie: Februari 2002
  • Laatst online: 02-10 13:24
Voor deze opdracht heb ik de locatie opgezocht waarbij beide personen zo dicht mogelijk bij elkaar waren.

spoiler:
Eerst in Excel beide gpx-en geïmporteerd. Daarna per tijdstip de lat/lon bij elkaar gezocht. Dan per paar de onderlinge afstand uitgerekend. Alhoewel, Pythagoras geeft een goede benadering. Als laatste hoef je dan alleen maar de minimale afstand op te zoeken.


@Deleon78 Bedankt voor de hint

[ Voor 21% gewijzigd door BosGnoom op 06-12-2020 15:26 ]


Acties:
  • 0 Henk 'm!

  • Deleon78
  • Registratie: Oktober 2010
  • Laatst online: 11:35
.

[ Voor 110% gewijzigd door Deleon78 op 26-07-2021 15:57 ]


Acties:
  • 0 Henk 'm!

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Ook daar zat ik weer veel te ingewikkeld te denken.
Want ze zitten soms een tijd stil. Ik dacht dus dat er dan één stiekem zonder telefoon even de hort op was. :P
Mijn fantasie had namelijk bedacht, dat er één iets had achtergelaten op een locatie waar ze allebei langskomen (hoeft niet op hetzelfde tijdstip) en op het moment dat ze allebei stil zitten de één dus naar de ander was gegaan zonder telefoon. :o

spoiler:
Ik had de data een beetje bewerkt en over een kaart met tijden gelegd.

En toen sprong mijn hoofd dus in standje Poirot / Sherlock Holmes.
Met zo'n titel CrimeDiggers en spannende website zou de oplossing, nam ik aan, toch wel enigszins ergens een klein beetje out of the box denken moeten vereisen?
Maar nee hoor, weer een anti-climax... :'(

500 "The server made a boo boo"

Pagina: 1