From 928f98f0c49bc75dac54d2a219e886cf011447ff Mon Sep 17 00:00:00 2001 From: VaiTon Date: Sun, 7 Apr 2024 21:47:29 +0200 Subject: [PATCH] Fix crapto writeup --- .../dragonsec2022/crapto/crapto-solution.png | 3 +++ .../dragonsec2022/crapto/dodo-trace.png | 3 +++ .../{crapto.md => crapto/index.md} | 6 +++--- .../writeups/dragonsec2022/crapto/key-fob.jpg | Bin 0 -> 13150 bytes 4 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 content/writeups/dragonsec2022/crapto/crapto-solution.png create mode 100644 content/writeups/dragonsec2022/crapto/dodo-trace.png rename content/writeups/dragonsec2022/{crapto.md => crapto/index.md} (91%) create mode 100644 content/writeups/dragonsec2022/crapto/key-fob.jpg diff --git a/content/writeups/dragonsec2022/crapto/crapto-solution.png b/content/writeups/dragonsec2022/crapto/crapto-solution.png new file mode 100644 index 0000000..d500f12 --- /dev/null +++ b/content/writeups/dragonsec2022/crapto/crapto-solution.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee118882528d9f016f2f029f12ee3bcdb5a24eb598262505ae3586bbe3a0ba61 +size 75053 diff --git a/content/writeups/dragonsec2022/crapto/dodo-trace.png b/content/writeups/dragonsec2022/crapto/dodo-trace.png new file mode 100644 index 0000000..f53799d --- /dev/null +++ b/content/writeups/dragonsec2022/crapto/dodo-trace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c46e10b69f63eb946149e0c8fc104dd5617d0d5b4e239c514c2ed2a3a957b0e7 +size 437446 diff --git a/content/writeups/dragonsec2022/crapto.md b/content/writeups/dragonsec2022/crapto/index.md similarity index 91% rename from content/writeups/dragonsec2022/crapto.md rename to content/writeups/dragonsec2022/crapto/index.md index 717ce41..a52a5ee 100644 --- a/content/writeups/dragonsec2022/crapto.md +++ b/content/writeups/dragonsec2022/crapto/index.md @@ -22,7 +22,7 @@ We have `keyfob.trace`, which is a log file. Firstly, we saw a `rfid` challenge The `keyfoab.trace` file is the result of some data generated by a keyfob, a small handheld remote control device that controls a remote keyless entry system. -![key-fob.jpg](https://wiki-ulisse.fuo.fi/ctf/dragonsec-2022/crapto/key-fob.jpg) +![key-fob.jpg](key-fob.jpg) So how can we read this special file? We searched some hardware tools for RFID security analysis and research, and we found out Proxmark3 was what we needed. @@ -34,11 +34,11 @@ With `trace list` a table is shown which gives timing information, the src of th _By accident_ we discovered `trace list 2` gives a better help: -![](/ctf/dragonsec-2022/crapto/dodo-trace.png) +![](dodo-trace.png) Following the challenge title, we tried `trace list mf 1` in order to decrypt crypto1, an unsafe encryption algorithm (stream cipher) and authentication protocol created by NXP Semiconductors for its MIFARE Classic RFID contactless smart cards. -![](/ctf/dragonsec-2022/crapto/crapto-solution.png) +![](crapto-solution.png) We got the flag: diff --git a/content/writeups/dragonsec2022/crapto/key-fob.jpg b/content/writeups/dragonsec2022/crapto/key-fob.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c54045893321c7ec781d8bc1c439472409b9306 GIT binary patch literal 13150 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 literal 0 HcmV?d00001