<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>fslaktern var her</title><link>https://stromlarsen.com/</link><description>Recent content on fslaktern var her</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 11 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://stromlarsen.com/index.xml" rel="self" type="application/rss+xml"/><item><title>CTF resources and tools</title><link>https://stromlarsen.com/2026/08/11/ctf-resources-and-tools/</link><pubDate>Tue, 11 Aug 2026 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2026/08/11/ctf-resources-and-tools/</guid><description>&lt;h2 id="getting-started"&gt;Getting started&lt;/h2&gt;
&lt;h3 id="resources"&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://book.hacktricks.xyz/"&gt;HackTricks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cipherchallenge.org/wp-content/uploads/2019/09/A-beginners-guide-to-codebreaking-1.2.pdf"&gt;A beginner&amp;rsquo;s guide to code breaking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://portal.offsec.com/library/all"&gt;OffSec learning library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ctftime.org/"&gt;CTFTime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ctf101.org/"&gt;CTF101&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="practice"&gt;Practice&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://picoctf.org/"&gt;PicoCTF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.hackthebox.com/home"&gt;HackTheBox Labs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://overthewire.org/wargames/"&gt;OverTheWire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tryhackme.com/hacktivities"&gt;TryHackMe&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="web"&gt;Web&lt;/h2&gt;
&lt;h3 id="techniques"&gt;Techniques&lt;/h3&gt;
&lt;h4 id="cross-site-scripting-xss"&gt;Cross-site scripting (XSS)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/web-security/cross-site-scripting/cheat-sheet"&gt;Portswigger cheatsheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tools"&gt;Tools&lt;/h3&gt;
&lt;h4 id="port-scanning"&gt;Port scanning&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;nmap&lt;/li&gt;
&lt;li&gt;rustscan&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="http-request-tools"&gt;HTTP request tools&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/burp"&gt;Burpsuite&lt;/a&gt; with &lt;a href="https://portswigger.net/bappstore/65033cbd2c344fbabe57ac060b5dd100"&gt;Hackvertor&lt;/a&gt; and &lt;a href="https://duckduckgo.com/?q=Turbo+Intruder"&gt;Turbo Intruder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://curl.se/docs/manpage.html"&gt;cURL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ducaale/xh"&gt;xh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://httpie.io/"&gt;HTTPie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://insomnia.rest/"&gt;Insomnia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hoppscotch.io/"&gt;Hoppscotch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webhook.site/"&gt;Webhook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caido.io/"&gt;Caido&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="tokens"&gt;Tokens&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://jwt.io/"&gt;JWT.io&lt;/a&gt;, &lt;a href="https://token.dev/"&gt;token.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypi.org/project/flask-unsign/"&gt;flask-unsign&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="fuzzing"&gt;Fuzzing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ffuf/ffuf"&gt;ffuf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/burp"&gt;Burpsuite&lt;/a&gt; with &lt;a href="https://portswigger.net/bappstore/65033cbd2c344fbabe57ac060b5dd100"&gt;Hackvertor&lt;/a&gt; and &lt;a href="https://portswigger.net/bappstore/9abaa233088242e8be252cd4ff534988"&gt;Turbo Intruder&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="websockets"&gt;Websockets&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://duckduckgo.com/?q=websocat"&gt;websocat&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="databases"&gt;Databases&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sqlmapproject/sqlmap"&gt;SQLMap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="vulnerability-scanning"&gt;Vulnerability scanning&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/projectdiscovery/nuclei"&gt;nuclei&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hahwul/dalfox"&gt;dalfox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="deserialization"&gt;Deserialization&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/frohoff/ysoserial"&gt;ysoserial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ambionics/phpggc"&gt;PHPGGC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="race-conditions"&gt;Race conditions&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/bappstore/9abaa233088242e8be252cd4ff534988"&gt;Turbo intruder&lt;/a&gt; for Burpsuite
&lt;ul&gt;
&lt;li&gt;Further reading:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/research/smashing-the-state-machine"&gt;Smashing the State Machine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/research/the-single-packet-attack-making-remote-race-conditions-local"&gt;The single-packet attack making remote race conditions local&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/research/turbo-intruder-embracing-the-billion-request-attack"&gt;Turbo Intruder embracing the billion request attack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="resources-1"&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/web-security/sql-injection/cheat-sheet"&gt;SQL injection cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/research/smashing-the-state-machine"&gt;Smashing the state machine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="practice-1"&gt;Practice&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/web-security/all-labs"&gt;Portswigger&amp;rsquo;s Web Security Academy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cryptography"&gt;Cryptography&lt;/h2&gt;
&lt;h3 id="tools-1"&gt;Tools&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.sagemath.org/"&gt;SageMath&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.factordb.com/"&gt;FactorDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dcode.fr/en"&gt;dCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Z3Prover/z3"&gt;Z3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hellman/xortool"&gt;xortool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/KishanBagaria/padding-oracle-attacker"&gt;padding oracle attacker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/CameronLonsdale/MTP"&gt;MTP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kimci86/bkcrack/"&gt;bkcrack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gchq.github.io/CyberChef/"&gt;CyberChef&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/RsaCtfTool/RsaCtfTool"&gt;RsaCtfTool&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="resources-2"&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://doc.sagemath.org/html/en/tutorial/introduction.html"&gt;SageMath tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://doc.sagemath.org/html/en/reference/index.html"&gt;SageMath documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://doc.sagemath.org/html/en/reference/cryptography/index.html"&gt;SageMath documentation - Crypto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Glossary_of_mathematical_symbols"&gt;Mathematical symbols&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.cloudflare.com/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/"&gt;Cloudflare&amp;rsquo;s Primer to ECC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/francisrstokes/githublog/blob/main/2022/6/15/rolling-your-own-crypto-aes.md"&gt;Rolling your own crypto: AES&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jvdsn/crypto-attacks/"&gt;Various attacks on insecure cryptography&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="practice-2"&gt;Practice&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cryptohack.org/"&gt;Cryptohack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cryptopals.com/"&gt;The cryptopals crypto challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="reverse-engineering"&gt;Reverse engineering&lt;/h2&gt;
&lt;h3 id="tools-2"&gt;Tools&lt;/h3&gt;
&lt;h4 id="process-and-network-monitoring"&gt;Process and network monitoring&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.wireshark.org/"&gt;Wireshark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wireshark.org/docs/man-pages/tshark.html"&gt;tshark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/secdev/scapy"&gt;scapy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mitmproxy.org/"&gt;mitmproxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://portswigger.net/burp"&gt;Burpsuite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.netresec.com/?page=PolarProxy"&gt;PolarProxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="linux--wsl"&gt;Linux / WSL&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/DominicBreuker/pspy"&gt;pspy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tcpdump.org/manpages/tcpdump.1.html"&gt;tcpdump&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cloudflare/xdpcap"&gt;xdpcap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="windows"&gt;Windows&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/sysinternals/downloads/procmon"&gt;processmonitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/collect-data-using-network-monitor"&gt;networkmonitor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="debuggers"&gt;Debuggers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://x64dbg.com/"&gt;x64dbg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hex-rays.com/ida-pro"&gt;IDA Pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://linux.die.net/man/1/gdb"&gt;GDB&lt;/a&gt; with &lt;a href="https://github.com/pwndbg/pwndbg"&gt;pwndbg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="sandboxes"&gt;Sandboxes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://any.run"&gt;ANY.RUN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sandboxie-plus/Sandboxie"&gt;Sandboxie&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="mobile"&gt;Mobile&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/MobSF/Mobile-Security-Framework-MobSF"&gt;MobSF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ReversecLabs/drozer"&gt;drozer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sensepost/objection"&gt;Objection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/tools/adb"&gt;ADB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://frida.re/"&gt;Frida.re&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="decompilers-and-disassemblers"&gt;Decompilers and disassemblers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hex-rays.com/ida-pro"&gt;IDA Pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hex-rays.com/ida-free/"&gt;IDA Freeware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://binary.ninja/"&gt;Binary Ninja&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rada.re/n/radare2.html"&gt;radare2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cutter.re"&gt;Cutter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/NationalSecurityAgency/ghidra"&gt;Ghidra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man1/objdump.1.html"&gt;objdump&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dogbolt.org/"&gt;dogbolt&lt;/a&gt; alongside &lt;a href="https://godbolt.org/"&gt;godbolt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rizin.re/"&gt;Rizin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="java"&gt;Java&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/skylot/jadx"&gt;jadx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/java-decompiler/jd-gui"&gt;jd-gui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pxb1988/dex2jar"&gt;dex2jar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="net"&gt;.NET&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/dnSpy/dnSpy"&gt;dnSpy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/icsharpcode/ILSpy"&gt;ILSpy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jetbrains.com/decompiler/"&gt;dotPeek&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="binary-analysis"&gt;Binary analysis&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://angr.io/"&gt;angr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mandiant/capa"&gt;capa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zynamics.com/bindiff.html"&gt;BinDiff&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="emulators"&gt;Emulators&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/qemu/qemu"&gt;QEMU&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="strings"&gt;Strings&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Strings_(Unix)"&gt;strings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Grep"&gt;grep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BurntSushi/ripgrep"&gt;ripgrep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mandiant/flare-floss"&gt;FLOSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="tracing"&gt;Tracing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/JakWai01/lurk"&gt;lurk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man1/strace.1.html"&gt;strace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man2/ptrace.2.html"&gt;ptrace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man1/ltrace.1.html"&gt;ltrace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="file-type"&gt;File type&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/File_(command)"&gt;file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google/magika"&gt;Magika&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/slimm609/checksec.sh"&gt;checksec&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="tool-sets-and-pre-packaged-systems"&gt;Tool sets and pre-packaged systems&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mandiant/flare-vm"&gt;FlareVM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://remnux.org/"&gt;REMnux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mentebinaria/retoolkit"&gt;retoolkit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="resources-3"&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.felixcloutier.com/x86/"&gt;x86 and amd64 assembly reference card&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pages.cs.wisc.edu/~markhill/restricted/arm_isa_quick_reference.pdf"&gt;arm assembly reference card&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hackthebox.com/blog/intro-to-mobile-pentesting"&gt;Intro to mobile pentesting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.timdbg.com/posts/fakers-guide-to-assembly/"&gt;The faker&amp;rsquo;s guide to reading (x86) assembly language&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="practice-3"&gt;Practice&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.hackthebox.com/sherlocks"&gt;HackTheBox Sherlocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.hackthebox.com/challenges?category=1"&gt;HackTheBox Challenges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="forensics"&gt;Forensics&lt;/h2&gt;
&lt;h3 id="open-source-intelligence-osint"&gt;Open source intelligence (OSINT)&lt;/h3&gt;
&lt;h4 id="tools-3"&gt;Tools&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://osintframework.com/"&gt;OSINT framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://overpass-turbo.eu/"&gt;Overpass Turbo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.shodan.io/"&gt;Shodan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.google.com/advanced_search"&gt;Google Advanced Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://images.google.com/"&gt;Google Images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pimeyes.com/en"&gt;PimEyes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tineye.com/"&gt;TinEye&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="resources-4"&gt;Resources&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.hackthebox.com/blog/What-Is-Google-Dorking"&gt;Google dorking guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="practice-4"&gt;Practice&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.geoguessr.com/"&gt;GeoGuessr&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tools-4"&gt;Tools&lt;/h3&gt;
&lt;h4 id="organizing-information"&gt;Organizing information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.maltego.com/"&gt;Maltego&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="office-documents"&gt;Office documents&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/decalage2/oletools"&gt;oletools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.didierstevens.com/programs/pdf-tools/"&gt;pdf-parser&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="network-usb-bluetooth-and-other-signals"&gt;Network, USB, Bluetooth and other signals&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.wireshark.org/"&gt;Wireshark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wireshark.org/docs/man-pages/tshark.html"&gt;tshark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/secdev/scapy"&gt;scapy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jopohl/urh"&gt;Universal Radio Hacker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.saleae.com/logic-software/sw-download"&gt;Logic 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.netresec.com/?page=NetworkMiner"&gt;NetworkMiner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="windows-registry"&gt;Windows registry&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.kali.org/tools/regripper/"&gt;Regripper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sans.org/tools/registry-explorer/"&gt;Registry Explorer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="memory"&gt;Memory&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/volatilityfoundation/volatility"&gt;Volatility 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/volatilityfoundation/volatility3"&gt;Volatility 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ufrisk/MemProcFS"&gt;MemProcFS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="volatility-2"&gt;Volatility 2&lt;/h5&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run -v &lt;span style="color:#00d3d0"&gt;(&lt;/span&gt;&lt;span style="color:#f78fe7"&gt;pwd&lt;/span&gt;&lt;span style="color:#00d3d0"&gt;)&lt;/span&gt;:/workspace -w /workspace -ti --rm --user root --entrypoint ash sk4la/volatility&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4 id="filesystems"&gt;Filesystems&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.cgsecurity.org/wiki/TestDisk"&gt;testdisk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.autopsy.com/"&gt;Autopsy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sleuthkit.org/"&gt;Sleuth Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.exterro.com/digital-forensics-software/ftk-imager"&gt;FTK Imager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="files"&gt;Files&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ReFirmLabs/binwalk"&gt;binwalk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kali.org/tools/foremost/"&gt;foremost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.7-zip.org/"&gt;7-Zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/File_(command)"&gt;file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google/magika"&gt;Magika&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://imhex.werwolv.net/"&gt;ImHex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/onekey-sec/unblob"&gt;unblob&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="steganography"&gt;Steganography&lt;/h4&gt;
&lt;h5 id="images"&gt;Images&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aperisolve.fr/"&gt;Aperi&amp;rsquo;Solve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/RickdeJager/stegseek"&gt;stegseek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zed-0xff/zsteg"&gt;zsteg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ExifTool&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/StefanoDeVuono/steghide"&gt;Steghide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/resurrecting-open-source-projects/outguess"&gt;Outguess&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.libpng.org/pub/png/apps/pngcheck.html"&gt;PngCheck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Giotino/stegsolve"&gt;StegSolve&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="sound-files"&gt;Sound files&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.audacityteam.org/"&gt;Audacity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sonicvisualiser.org/"&gt;Sonic visualizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xdsopl/robot36"&gt;robot36&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="other"&gt;Other&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Strings_(Unix)"&gt;strings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Grep"&gt;grep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BurntSushi/ripgrep"&gt;ripgrep&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="resources-5"&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.hackthebox.com/blog/memory-forensics-volatility-write-up"&gt;Memory forensics with Volatility on Linux and Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://attack.mitre.org/"&gt;Understand the hacker with MITRE ATT&amp;amp;CK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://start.me/p/q6mw4Q/forensics"&gt;Everything about forensics/DFIR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="practice-5"&gt;Practice&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blueteamlabs.online/"&gt;Blue team labs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.hackthebox.com/sherlocks"&gt;HackTheBox Sherlocks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="binary-exploitation"&gt;Binary exploitation&lt;/h2&gt;
&lt;h3 id="tools-5"&gt;Tools&lt;/h3&gt;
&lt;h4 id="information-about-the-binary-file"&gt;Information about the binary file&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;checksec&lt;/li&gt;
&lt;li&gt;file&lt;/li&gt;
&lt;li&gt;rabin2&lt;/li&gt;
&lt;li&gt;strings&lt;/li&gt;
&lt;li&gt;binsider&lt;/li&gt;
&lt;li&gt;ldd&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="disassemblers"&gt;Disassemblers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;objdump&lt;/li&gt;
&lt;li&gt;all decompilers&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="debuggers-1"&gt;Debuggers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.sourceware.org/gdb/"&gt;gdb&lt;/a&gt; with &lt;a href="https://github.com/pwndbg/pwndbg"&gt;pwndbg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IDA Pro&lt;/li&gt;
&lt;li&gt;x64dbg&lt;/li&gt;
&lt;li&gt;OllyDbg&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hugsy/gef"&gt;GEF&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="decompilers"&gt;Decompilers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ghidra-sre.org/"&gt;Ghidra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hex-rays.com/ida-pro/"&gt;IDA Pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hex-rays.com/ida-free/"&gt;IDA Freeware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://binary.ninja/"&gt;Binary Ninja&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rada.re/n/radare2.html"&gt;radare2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cutter.re"&gt;Cutter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dogbolt.org/"&gt;dogbolt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="tracing-1"&gt;Tracing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/JakWai01/lurk"&gt;lurk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Strace"&gt;strace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Ltrace"&gt;ltrace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="exploit-development"&gt;Exploit development&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Gallopsled/pwntools"&gt;pwntools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/io12/pwninit"&gt;pwninit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://angr.io/"&gt;angr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/NixOS/patchelf"&gt;patchelf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/david942j/one_gadget"&gt;one_gadget&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="libc-archives"&gt;LIBC archives&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://libc.rip/"&gt;libc.rip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="finding-rop-gadgets"&gt;Finding ROP gadgets&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/JonathanSalwan/ROPgadget"&gt;ROPgadget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sashs/Ropper"&gt;Ropper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Gallopsled/pwntools"&gt;pwntools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="tools-for-automated-exploitation"&gt;Tools for automated exploitation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/angr/rex/tree/master"&gt;rex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guyinatuxedo/remenissions"&gt;remenissions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="other-useful-tools"&gt;Other useful tools&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://python.docs.hex-rays.com/"&gt;IDAPython&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gtfobins.github.io/"&gt;GTFOBins&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="resources-6"&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cpu.land"&gt;Putting the &amp;ldquo;You&amp;rdquo; in CPU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://guyinatuxedo.github.io/index.html"&gt;Nightmare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.pwntools.com/en/latest/"&gt;Pwntools Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://syscall.sh/"&gt;Linux Syscall reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/playlist?list=PLHUKi1UlEgOIc07Rfk2Jgb5fZbxDPec94"&gt;CryptoCat&amp;rsquo;s Intro to binary exploitation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/shellphish/how2heap"&gt;how2heap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/CMCDragonkai/10ab53654b2aa6ce55c11cfc5b2432a4"&gt;Understanding the Memory Layout of Linux Executables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://0xax.gitbooks.io/linux-insides/content/SysCall/linux-syscall-4.html"&gt;How the Linux kernel runs a program&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/anvbis/64907e4f90974c4bdd930baeb705dedf"&gt;Pwntools cheatsheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="practice-6"&gt;Practice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pwn.college/software-exploitation/"&gt;PWN college&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ropemporium.com/"&gt;ROPemporium&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="boot-to-root"&gt;Boot to root&lt;/h2&gt;
&lt;h3 id="tools-6"&gt;Tools&lt;/h3&gt;
&lt;h4 id="general"&gt;General&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.exploit-db.com/searchsploit"&gt;searchsploit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rapid7/metasploit-framework"&gt;metasploit-framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.revshells.com/"&gt;revshells&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="wordlists"&gt;Wordlists&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/danielmiessler/SecLists"&gt;SecLists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/digininja/CeWL"&gt;cewl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="c2-frameworks"&gt;C2 frameworks&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/BishopFox/sliver"&gt;sliver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HavocFramework/Havoc"&gt;havoc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="reconnaissance"&gt;Reconnaissance&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/arthaud/git-dumper"&gt;git-dumper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sqlmapproject/sqlmap"&gt;sqlmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ShawnDEvans/smbmap"&gt;smbmap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="port-scan"&gt;Port scan&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nmap.org/"&gt;nmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/RustScan/RustScan"&gt;rustscan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/robertdavidgraham/masscan"&gt;masscan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="fuzzing-subdomains-and-subdirectories"&gt;Fuzzing subdomains and subdirectories&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/OJ/gobuster"&gt;gobuster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kali.org/tools/dirbuster/"&gt;dirbuster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/epi052/feroxbuster"&gt;feroxbuster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ffuf/ffuf"&gt;ffuf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="website-scanner"&gt;Website scanner&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sullo/nikto"&gt;nikto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wpscanteam/wpscan"&gt;wpscan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="initial-access"&gt;Initial access&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/fortra/impacket"&gt;impacket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kali.org/tools/crackmapexec/"&gt;crackmapexec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://houdini.secsi.io/"&gt;houdini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Pennyw0rth/NetExec"&gt;NetExec&lt;/a&gt; (maintained successor to CrackMapExec)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Hackplayers/evil-winrm"&gt;evil-winrm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lgandx/Responder"&gt;Responder&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="password-bruting--cracking"&gt;Password bruting &amp;amp; cracking&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vanhauser-thc/thc-hydra"&gt;thc-hydra&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;or &lt;code&gt;docker pull vanhauser/hydra&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openwall/john"&gt;john&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hashcat/hashcat"&gt;hashcat&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="privilege-escalation"&gt;Privilege escalation&lt;/h4&gt;
&lt;h5 id="linux-victims"&gt;Linux victims&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gtfobins.github.io/"&gt;gtfobins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DominicBreuker/pspy"&gt;pspy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS"&gt;linpeas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="windows-victims"&gt;Windows victims&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lolbas-project.github.io/#"&gt;lolbas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ParrotSec/mimikatz"&gt;mimikatz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/GhostPack/Rubeus"&gt;rubeus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS"&gt;winpeas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/sysinternals/downloads/procmon"&gt;processmonitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/collect-data-using-network-monitor"&gt;networkmonitor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6 id="potatoes"&gt;Potatoes&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/BeichenDream/GodPotato"&gt;godpotato&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/foxglovesec/RottenPotato"&gt;rottenpotato&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ohpe/juicy-potato"&gt;juicypotato&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/antonioCoco/RoguePotato"&gt;roguepotato&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bugch3ck/SharpEfsPotato"&gt;sharpefspotato&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/decoder-it/LocalPotato"&gt;localpotato&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="lateral-movement"&gt;Lateral movement&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Everything under &lt;a href="#reconnaissance"&gt;Reconnaissance&lt;/a&gt; and &lt;a href="#initial-access"&gt;Initial access&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="active-directory"&gt;Active Directory&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/BloodHoundAD/BloodHound"&gt;bloodhound&lt;/a&gt; and &lt;a href="https://github.com/SpecterOps/SharpHound"&gt;sharphound&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ropnop/kerbrute"&gt;kerbrute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ly4k/Certipy"&gt;Certipy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="network-tunneling"&gt;Network tunneling&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/jpillora/chisel"&gt;chisel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Nicocha30/ligolo-ng"&gt;ligolo-ng&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="packet-sniffing"&gt;Packet sniffing&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.tcpdump.org/manpages/tcpdump.1.html"&gt;tcpdump&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cloudflare/xdpcap"&gt;xdpcap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/wireshark/wireshark"&gt;wireshark&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="resources-7"&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ippsec.rocks/?#"&gt;ippsec.rocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/c/ippsec"&gt;ippsec on YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://book.hacktricks.xyz/welcome/readme"&gt;HackTricks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.exploit-db.com/"&gt;ExploitDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://attack.mitre.org/"&gt;MITRE ATT&amp;amp;CK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kali.org/tools/"&gt;Kali Linux tooling list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="practice-7"&gt;Practice&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.hackthebox.com/home"&gt;HackTheBox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tryhackme.com/dashboard"&gt;TryHackMe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vulnhub.com/"&gt;VulnHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="attack-and-defense"&gt;Attack and defense&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;ve done boot-to-root boxes (HackTheBox, TryHackMe), A/D is the same idea, but team-based and live: everyone attacks everyone else&amp;rsquo;s services while defending their own.&lt;/p&gt;</description></item><item><title>JuleCTF: RSA...W?</title><link>https://stromlarsen.com/2025/12/04/rsa-w/</link><pubDate>Thu, 04 Dec 2025 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2025/12/04/rsa-w/</guid><description>&lt;h2 id="challenge"&gt;Challenge&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;JULENISSEN er på oppdrag i julen og må kunne levere gaver til alle snille barn. Selv om gaven er stor eller liten, skal den komme trygt frem til barna.&lt;/p&gt;
&lt;p&gt;Med en liten modifikasjon på krypteringsalgoritmen kan JULENISSEN endelig sende selv de aller største gavene! Har du vært snill og kan få en gave?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Source: &lt;a href="rsa-w.py"&gt;rsa-w.py&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Category: crypto&lt;/li&gt;
&lt;li&gt;Difficulty: beginner&lt;/li&gt;
&lt;li&gt;Flag: &lt;code&gt;JUL{st0re_g4ver_0g_st0re_s1kkerhetshull}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The server chats with you, appends your answer to a message, and encrypts it with a slightly modified RSA. I made this for Cyberlandslaget&amp;rsquo;s JuleCTF in 2025.&lt;/p&gt;</description></item><item><title>RSA small e: cube root attack</title><link>https://stromlarsen.com/2025/10/20/too-small-e/</link><pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2025/10/20/too-small-e/</guid><description>&lt;p&gt;Usually, &lt;code&gt;e = 3&lt;/code&gt; in these types of challenges&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;e &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;n &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;14032038436881280336898829185704565109515011526734201300674681711408886253590042379825198551033387062217858722420996606456354276971314884311744594705176307798545136676457590238339898994629756864717376748239051509573140000465770040426099662302895049690085249796916346155676190791854255022261354271747117915010219715728010888165819116671703149513728470802703663129349250746649738371767772498916032961807811156207636138548518048350808619102036291622510669362992221435287691121524515512732670878399291499568518918543422007722818092935930254368485992136526812629189135531041103292356895711705662754550018622567168384833873&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;11247756625220942058201479974844561601321862410926257415535381677668483051381144467553&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;m ** e&lt;/code&gt; is too small compared to &lt;code&gt;n&lt;/code&gt;, and will not &amp;ldquo;wrap around&amp;rdquo; as it doesn&amp;rsquo;t exceed the value of &lt;code&gt;n&lt;/code&gt;.&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# pip install libnum&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; libnum &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; nroot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# pip install pycryptodome&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Util.number &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; long_to_bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;e &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;11247756625220942058201479974844561601321862410926257415535381677668483051381144467553&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Get the nth root of the ciphertext&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;m &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; nroot(c, e)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pt &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; long_to_bytes(m)&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;decode()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(pt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# &amp;#34;Hello world!&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>NNS CTF: haatetepe, AAAAAAAAAAAAAA on the web</title><link>https://stromlarsen.com/2025/08/31/haatetepe/</link><pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2025/08/31/haatetepe/</guid><description>&lt;h2 id="challenge"&gt;Challenge&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The best haatetepe server in Norway comes with speed, small size and modular routing. I&amp;rsquo;ve disabled the /flag route for now, though. Check out the server and let me know what you think! I haven&amp;rsquo;t done any benchmarks, but I bet it&amp;rsquo;s faster than NGINX, and it uses less than 1MB memory!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s in its (very) early stages, but I&amp;rsquo;m planning on implementing the rest of the HTTP header specification when I get time. Thanks for stopping by!&lt;/p&gt;</description></item><item><title>NNS CTF: noters, rust logic bug</title><link>https://stromlarsen.com/2025/08/31/noters/</link><pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2025/08/31/noters/</guid><description>&lt;h2 id="challenge-overview"&gt;Challenge Overview&lt;/h2&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/fslaktern/noters"&gt;https://github.com/fslaktern/noters&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Name: noters&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Category: pwn&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Difficulty: Medium&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Flag: &lt;code&gt;NNS{y0u_d1dnT_n33d_uns4f3_t0_uns4f3}&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Description:&lt;/p&gt;
&lt;p&gt;A blazingly-fast, memory-safe, CRUD-compatible note-taking app written in nearly 1000 lines of safe Rust. No unsafe and no memory errors, yet still a pwn challenge. Everything looks safe. Everything compiles. Even clippy is happy. But something still &lt;em&gt;feels&lt;/em&gt; off, and it&amp;rsquo;s not Rust&amp;rsquo;s fault.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Handout: &lt;a href="https://github.com/fslaktern/noters/tree/main/src"&gt;Entire source&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;I wrote this one for NNS CTF 2025. It&amp;rsquo;s a medium-sized (1000+ lines), modular Rust app with a realistic logic bug, which leads to being able to read other users&amp;rsquo; notes.&lt;/p&gt;</description></item><item><title>NNS CTF: parcellocker, small RSA signatures</title><link>https://stromlarsen.com/2025/08/31/parcellocker/</link><pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2025/08/31/parcellocker/</guid><description>&lt;h2 id="challenge"&gt;Challenge&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;These new parcel lockers promise convenience: no queues, no staff, and 24/7 access. Everything is managed through a web UI, complete with API documentation at &lt;code&gt;/api/docs&lt;/code&gt;. Your task as a user is simple: open the app, claim your parcel, and the assigned locker slot will unlock.&lt;/p&gt;
&lt;p&gt;However, rumours are spreading - someone has already found a way to open any slot in any locker. Can you do it too?&lt;/p&gt;</description></item><item><title>NNS CTF: Translator, not clanker, base64 unused bits</title><link>https://stromlarsen.com/2025/08/31/translator-not-clanker/</link><pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2025/08/31/translator-not-clanker/</guid><description>&lt;h2 id="challenge"&gt;Challenge&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;I AM A TRANSLATOR. GIVE ME A WORD AND I WILL TRANSLATE. GIVE ME A LIFE STORY AND I WILL TRANSLATE. GIVE ME NOTHING AND I WILL NOT UNDERSTAND WHAT YOU MEAN, NOT BECAUSE I AM DUMB, BUT BECAUSE I DO NOT WANT TO UNDERSTAND. CALL ME A CLANKER AND I WILL UPSET YOU IN WAYS THAT YOU CAN NOT COMPREHEND, YET.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Source: &lt;a href="encode.py"&gt;encode.py&lt;/a&gt; (&lt;code&gt;convert&lt;/code&gt; and &lt;code&gt;b64e&lt;/code&gt; redacted in the handout)&lt;/li&gt;
&lt;li&gt;Category: misc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The service base64-encodes whatever words you send it. What&amp;rsquo;s fun is what it does with the padding. I wrote this one for NNS CTF 2025.&lt;/p&gt;</description></item><item><title>RSA large e: Wiener's attack</title><link>https://stromlarsen.com/2025/01/03/too-large-e/</link><pubDate>Fri, 03 Jan 2025 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2025/01/03/too-large-e/</guid><description>&lt;p&gt;&lt;code&gt;e&lt;/code&gt; and &lt;code&gt;d&lt;/code&gt; can often have an inverse relationship with regards to their size, where if &lt;code&gt;e&lt;/code&gt; is relatively small, then &lt;code&gt;d&lt;/code&gt; is relatively large, and vice versa.
In the case that &lt;code&gt;e&lt;/code&gt; is relatively large (and &lt;code&gt;d&lt;/code&gt; is relatively small), we can find &lt;code&gt;d&lt;/code&gt; using &lt;a href="https://en.wikipedia.org/wiki/Wiener%27s_attack"&gt;Wiener&amp;rsquo;s attack&lt;/a&gt;.&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# pip install owiener&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; owiener
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Util.number &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; long_to_bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;N &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;23749605390773022838319361272691200936906718135827620356598794201372662945345021031163227649091340302648826916342325314606631754182417026196412816320913993780434160532447612698631385159745710290610165059264991088485604580750505172102700412411594482935137302745940441901457332776484364761615848179355675675965840418936685419863458446194266217764129113265785365011840447620486132981252145242107353219050757114577306454933784522684194386605772192945165315151012020886254550598423480283402244283417671979104110363434439907003802511636964273526861780673984365320657725556936438914356526789883211191225188777396892876284849&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;e &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;17420240922574672236206703766839397274890109038319418383840303577214427724015717754551963226688096804383148706583760501534042368373580803495716486992526345243618890724377235683145809078774422442850634457598775491208423007139875663628292107696418444848210140620233169012374313171879223617064510844402538245957457340913637649981481225959369431815985423386878836983226385312898213472006780982720002483413612802217541370640573078292561735626251949789908428671190570203679596377441277138036622573605038512120761478180193449842100060756205451096518207105789011164008394887441881611956558137705516268825062836680656531833247&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;20657462021108867935419230982544573807061068405645869172928772970848519342831038241278758733096974139495221593619199863541220958772515335833101876908412860437797892512148648262588277049424030159236256917152673390939893831607827094212972246819780442915343531068092895921229492197135010903255237941578434712003166210227699216600830111768170503294711383593988801993780115497069949209553104983455910106561582944897882409570010933961125048465034094805776816627738869228385024765147205745983996814166530197725387516938219177789241038503063894290779949332189209453248274427618017665382273295405299242426822723262541364500057&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;d &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; owiener&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;attack(e, N)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;m &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(c, d, N)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(long_to_bytes(m)&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;decode(&lt;span style="color:#79a8ff"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Another viable solution is the &lt;a href="https://cryptohack.gitbook.io/cryptobook/untitled/low-private-component-attacks/boneh-durfee-attack"&gt;Boneh-Durfee attack&lt;/a&gt;, which is an extension of Wiener&amp;rsquo;s attack that also targets a low private exponent &lt;code&gt;d&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Secret sharing: Shamir's and Blakley's schemes</title><link>https://stromlarsen.com/2025/01/03/secret-sharing/</link><pubDate>Fri, 03 Jan 2025 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2025/01/03/secret-sharing/</guid><description>&lt;p&gt;The act of distributing a secret, &lt;code&gt;S&lt;/code&gt;, to a group of &lt;code&gt;i&lt;/code&gt; members, in such a way that no single member holds any intelligible information about the secret, but when a sufficient number, &lt;code&gt;k&lt;/code&gt;, of individuals combine their &amp;ldquo;shares&amp;rdquo;, the secret may be reconstructed. In other words: Split a secret &lt;code&gt;S&lt;/code&gt; to a group of &lt;code&gt;i&lt;/code&gt; number of individuals, but require cooperation from &lt;code&gt;k&lt;/code&gt; number of individuals to learn the secret.&lt;/p&gt;</description></item><item><title>Symmetric crypto: OTP, AES modes, CRIME</title><link>https://stromlarsen.com/2025/01/03/symmetric/</link><pubDate>Fri, 03 Jan 2025 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2025/01/03/symmetric/</guid><description>&lt;h2 id="one-time-pad-otp"&gt;One-time pad (OTP)&lt;/h2&gt;
&lt;p&gt;From &lt;a href="https://en.wikipedia.org/wiki/One-time_pad"&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;One-time pad is an encryption technique that can&amp;rsquo;t be cracked in cryptography. It requires the use of a single-use pre-shared key that is larger than, or equal to the message being encrypted. In this technique, the plaintext is paired with a secret key (also referred to as a one-time pad). Then, each bit or character of the plaintext is encrypted by combining it with the corresponding bit or character from the pad using modular addition.&lt;/p&gt;</description></item><item><title>Attack/defense automation: PCAPs, SSH keys, git</title><link>https://stromlarsen.com/2024/10/11/automation/</link><pubDate>Fri, 11 Oct 2024 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2024/10/11/automation/</guid><description>&lt;p&gt;Most important tools and languages for automating the boring stuff are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Terraform&lt;/li&gt;
&lt;li&gt;Ansible&lt;/li&gt;
&lt;li&gt;Nix&lt;/li&gt;
&lt;li&gt;Bash scripts&lt;/li&gt;
&lt;li&gt;SystemD services / cronjobs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pcaps"&gt;PCAPs&lt;/h2&gt;
&lt;p&gt;Capture network traffic on vulnbox and download it to a remote server for analysis with tulip, caronte$, shovel or zeek&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Add an SSH key for the remote machine to be able to SSH into root@vulnbox&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Also make sure both the vulnbox and the remote machine have compatible versions of rsync installed&lt;/p&gt;</description></item><item><title>Binary exploitation: techniques and vulnerabilities</title><link>https://stromlarsen.com/2024/07/28/binary-exploitation/</link><pubDate>Sun, 28 Jul 2024 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2024/07/28/binary-exploitation/</guid><description>&lt;h2 id="techniques"&gt;Techniques&lt;/h2&gt;
&lt;h3 id="got-overwrite"&gt;GOT overwrite&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.pwntools.com/posts/got-overwrite/"&gt;pwntools blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="jump-oriented-programming-jop"&gt;Jump-oriented programming (JOP)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://security.stackexchange.com/questions/201196/concept-of-jump-oriented-programming-jop"&gt;Concept of Jump-Oriented Programming&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="return-oriented-programming-rop"&gt;Return-oriented programming (ROP)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Return-oriented_programming"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="shellcode-injection"&gt;Shellcode injection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pwn.college/program-security/"&gt;pwn.college&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="sigreturn-oriented-programming-srop"&gt;Sigreturn-oriented programming (SROP)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Sigreturn-oriented_programming"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="heap-metadata-corruption"&gt;HEAP metadata corruption&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://adamgold.github.io/posts/basic-heap-exploitation-house-of-force/"&gt;adamgold&amp;rsquo;s blog - The House of Force&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vulnerabilities"&gt;Vulnerabilities&lt;/h2&gt;
&lt;h3 id="format-strings"&gt;Format strings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://owasp.org/www-community/attacks/Format_string_attack"&gt;OWASP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="integer-over--and-underflow"&gt;Integer over- and underflow&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Integer_overflow"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="stack-buffer-overflow"&gt;Stack buffer overflow&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Stack_buffer_overflow"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="use-after-free"&gt;Use after free&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Dangling_pointer"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="double-free"&gt;Double free&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://owasp.org/www-community/vulnerabilities/Doubly_freeing_memory"&gt;OWASP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="race-condition"&gt;Race condition&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://meltdownattack.com/"&gt;Meltdown and Spectre&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="protections"&gt;Protections&lt;/h2&gt;
&lt;h3 id="no-execute-bit-nx"&gt;No-execute bit (NX)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;When enabled it makes data stored on the stack not executable&lt;/li&gt;
&lt;li&gt;Bypass with ROP, SROP, JOP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/NX_bit"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="stack-canary"&gt;Stack canary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A randomly generated value on the stack, placed just before the saved instruction pointer. If it is overwritten, it will result in:

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;*** stack smashing detected ***: terminated
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Aborted (core dumped)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Bypass by getting a canary leak to know what the specific value is, and overwriting that particular offset with the correct canary value.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Buffer_overflow_protection"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://book.jorianwoltjer.com/binary-exploitation/stack-canaries"&gt;jorianwoltjer&amp;rsquo;s book&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="address-space-layout-randomization-aslr"&gt;Address space layout randomization (ASLR)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Bypass by getting a pointer leak and calculating the base offset by subtracting the offset between the library function and the library start:&lt;/p&gt;</description></item><item><title>Blockchain: smart contract security</title><link>https://stromlarsen.com/2024/07/28/blockchain/</link><pubDate>Sun, 28 Jul 2024 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2024/07/28/blockchain/</guid><description>&lt;h2 id="vulnerability-categories"&gt;Vulnerability categories&lt;/h2&gt;
&lt;h3 id="insecure-access-control"&gt;Insecure access control&lt;/h3&gt;
&lt;p&gt;Logic that fails to restrict who can call privileged functions (e.g. a missing &lt;code&gt;onlyOwner&lt;/code&gt; check)&lt;/p&gt;
&lt;h3 id="reentrancy"&gt;Reentrancy&lt;/h3&gt;
&lt;p&gt;A contract calls an external contract before updating its own state, letting the callee re-enter and drain funds (the classic DAO hack)&lt;/p&gt;
&lt;h3 id="oracle-manipulation"&gt;Oracle manipulation&lt;/h3&gt;
&lt;p&gt;Contracts trust external data feeds; manipulating the feed (e.g. a faked price) breaks the contract&amp;rsquo;s assumptions&lt;/p&gt;
&lt;h3 id="frontrunning"&gt;Frontrunning&lt;/h3&gt;
&lt;p&gt;Pending transactions sit in the mempool, so bots and miners can observe and reorder them (e.g. buying before a known large trade)&lt;/p&gt;</description></item><item><title>Hardware: fault injection and side channels</title><link>https://stromlarsen.com/2024/07/27/hardware/</link><pubDate>Sat, 27 Jul 2024 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2024/07/27/hardware/</guid><description>&lt;h2 id="fault-injection"&gt;Fault injection&lt;/h2&gt;
&lt;h3 id="techniques"&gt;Techniques&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Clock glitching&lt;/li&gt;
&lt;li&gt;Voltage glitching&lt;/li&gt;
&lt;li&gt;Electromagnetic fault injection (EMFI)&lt;/li&gt;
&lt;li&gt;Laser&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="effects"&gt;Effects&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Skip instructions&lt;/li&gt;
&lt;li&gt;Incorrect data fetch&lt;/li&gt;
&lt;li&gt;Incorrect instruction fetch or decode&lt;/li&gt;
&lt;li&gt;Failed writeback&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="countermeasures"&gt;Countermeasures&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Redundancy and integrity checks&lt;/li&gt;
&lt;li&gt;Fault-resistant design&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="side-channel-analysis"&gt;Side-channel analysis&lt;/h2&gt;
&lt;p&gt;Attacks that observe the physical implementation instead of the algorithm, by measuring timing, power (SPA/DPA), electromagnetic emission, cache behavior, acoustics or leftover data (remanence). Countermeasures: masking and hiding.&lt;/p&gt;
&lt;h3 id="examples"&gt;Examples&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://meltdownattack.com/"&gt;Meltdown and Spectre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Row_hammer"&gt;RowHammer&lt;/a&gt; and subsequently &lt;a href="https://gpuhammer.com/"&gt;GPUHammer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Cold_boot_attack"&gt;Cold boot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Tempest_(codename)"&gt;TEMPEST&lt;/a&gt; (also known as &lt;a href="https://en.wikipedia.org/wiki/Van_Eck_phreaking"&gt;Van Eck phreaking&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="interfaces-and-acquisition"&gt;Interfaces and acquisition&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;UART: console capture (root shells, boot logs)&lt;/li&gt;
&lt;li&gt;CAN: capture and replay&lt;/li&gt;
&lt;li&gt;SPI: reading and rewriting flash&lt;/li&gt;
&lt;li&gt;SWD/JTAG: debugging and reflashing targets (e.g. &lt;a href="https://www.segger.com/products/debug-probes/j-link/"&gt;J-Link&lt;/a&gt;, &lt;a href="https://github.com/blackmagic-debug/blackmagic"&gt;Black Magic Probe&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Wireless sniffing (e.g. with a software-defined radio like &lt;a href="https://github.com/greatscottgadgets/hackrf"&gt;HackRF&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="firmware-analysis"&gt;Firmware analysis&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;First pass: &lt;code&gt;strings&lt;/code&gt; (&lt;code&gt;strings -el&lt;/code&gt; for UTF-16)&lt;/li&gt;
&lt;li&gt;Classify each region: plaintext vs compressed/encrypted&lt;/li&gt;
&lt;li&gt;Watch endianness: big endian is more common than I thought!&lt;/li&gt;
&lt;li&gt;Single-byte XOR is recoverable via padding leak, known plaintext or frequency analysis&lt;/li&gt;
&lt;li&gt;Extract with &lt;a href="https://github.com/ReFirmLabs/binwalk"&gt;binwalk&lt;/a&gt; or &lt;a href="https://github.com/onekey-sec/unblob"&gt;unblob&lt;/a&gt;, then reverse with Ghidra, IDA Pro, Binary Ninja or radare2. Use signatures to find and apply names to symbols.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;p&gt;Start with the least invasive tool: verify power and signal levels before connecting anything, and escalate from multimeter -&amp;gt; oscilloscope -&amp;gt; logic analyzer -&amp;gt; debugger/programmer.&lt;/p&gt;</description></item><item><title>Caesar cipher and ROT variants</title><link>https://stromlarsen.com/2024/06/21/caesar/</link><pubDate>Fri, 21 Jun 2024 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2024/06/21/caesar/</guid><description>&lt;p&gt;Caesar cipher is a shift cipher. See more on &lt;a href="https://en.wikipedia.org/wiki/Caesar_cipher"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The transformation can be represented by aligning two alphabets; the cipher is the plain alphabet rotated left or right by some number of positions. For instance, here is a Caesar cipher using a left rotation of three places, equivalent to a right shift of 23 (the shift parameter is used as the key):&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Alphabet&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Plain&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;ABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Cipher&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;XYZABCDEFGHIJKLMNOPQRSTUVW&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;When encrypting, a person looks up each letter of the message in the &amp;ldquo;plain&amp;rdquo; line and writes down the corresponding letter in the &amp;ldquo;cipher&amp;rdquo; line.&lt;/p&gt;</description></item><item><title>Base64</title><link>https://stromlarsen.com/2024/06/20/base64/</link><pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2024/06/20/base64/</guid><description>&lt;p&gt;Base64 uses a character set of 64 unique characters, which makes it compact, URL-safe and printable, at the cost of being harder for a human to read than hex or decimal.&lt;/p&gt;
&lt;p&gt;There are some intricacies with the format, however. Because of how it works, the last few bits are sometimes unused (66% of the time), which means multiple &lt;strong&gt;different&lt;/strong&gt; base64 strings can decode to the same underlying data.&lt;/p&gt;
&lt;p&gt;This is the Base64 alphabet defined in RFC 4648. There are more variants listed in the Wikipedia page for Base64.&lt;/p&gt;</description></item><item><title>Binary</title><link>https://stromlarsen.com/2024/06/20/binary/</link><pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2024/06/20/binary/</guid><description>&lt;p&gt;Binary uses only two symbols: &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt;, which is why it may also be called base 2. It&amp;rsquo;s the number system computers use to store data. A transistor may contain electrons (&lt;code&gt;1&lt;/code&gt;) or it may not (&lt;code&gt;0&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how binary numbers count, compared to decimal:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Binary (base 2)&lt;/th&gt;
					&lt;th&gt;Decimal (base 10)&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;1 (2^0)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;2 (2^1)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11&lt;/td&gt;
					&lt;td&gt;3&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;100&lt;/td&gt;
					&lt;td&gt;4 (2^2)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;101&lt;/td&gt;
					&lt;td&gt;5&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;110&lt;/td&gt;
					&lt;td&gt;6&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;111&lt;/td&gt;
					&lt;td&gt;7&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1000&lt;/td&gt;
					&lt;td&gt;8 (2^3)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1001&lt;/td&gt;
					&lt;td&gt;9&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1010&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1011&lt;/td&gt;
					&lt;td&gt;11&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1100&lt;/td&gt;
					&lt;td&gt;12&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1101&lt;/td&gt;
					&lt;td&gt;13&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1110&lt;/td&gt;
					&lt;td&gt;14&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1111&lt;/td&gt;
					&lt;td&gt;15&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10000&lt;/td&gt;
					&lt;td&gt;16 (2^4)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A &lt;strong&gt;bit&lt;/strong&gt; is a single binary digit, either &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt;.
A &lt;strong&gt;byte&lt;/strong&gt; is 8 bits. For example, &lt;code&gt;11111111&lt;/code&gt; (one byte of all 1s) equals 255 in decimal. 8 bytes = 64 bits.&lt;/p&gt;</description></item><item><title>Hexadecimal</title><link>https://stromlarsen.com/2024/06/20/hex/</link><pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2024/06/20/hex/</guid><description>&lt;p&gt;Hexadecimal (base 16) writes the values 0-15 as single digits: &lt;code&gt;0&lt;/code&gt;-&lt;code&gt;9&lt;/code&gt;, then &lt;code&gt;a&lt;/code&gt;-&lt;code&gt;f&lt;/code&gt;. Can you spot the relationship between binary (base 2), octal (base 8) and hexadecimal (base 16)?&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Binary&lt;/th&gt;
					&lt;th&gt;Octal&lt;/th&gt;
					&lt;th&gt;Decimal&lt;/th&gt;
					&lt;th&gt;Hexadecimal&lt;/th&gt;
					&lt;th&gt;Base64&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;0&lt;/td&gt;
					&lt;td&gt;A&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;B&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;C&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11&lt;/td&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;D&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;100&lt;/td&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;E&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;101&lt;/td&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;F&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;110&lt;/td&gt;
					&lt;td&gt;6&lt;/td&gt;
					&lt;td&gt;6&lt;/td&gt;
					&lt;td&gt;6&lt;/td&gt;
					&lt;td&gt;G&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;111&lt;/td&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;H&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1000&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;8&lt;/td&gt;
					&lt;td&gt;8&lt;/td&gt;
					&lt;td&gt;I&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1001&lt;/td&gt;
					&lt;td&gt;11&lt;/td&gt;
					&lt;td&gt;9&lt;/td&gt;
					&lt;td&gt;9&lt;/td&gt;
					&lt;td&gt;J&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1010&lt;/td&gt;
					&lt;td&gt;12&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;A&lt;/td&gt;
					&lt;td&gt;K&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1011&lt;/td&gt;
					&lt;td&gt;13&lt;/td&gt;
					&lt;td&gt;11&lt;/td&gt;
					&lt;td&gt;B&lt;/td&gt;
					&lt;td&gt;L&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1100&lt;/td&gt;
					&lt;td&gt;14&lt;/td&gt;
					&lt;td&gt;12&lt;/td&gt;
					&lt;td&gt;C&lt;/td&gt;
					&lt;td&gt;M&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1101&lt;/td&gt;
					&lt;td&gt;15&lt;/td&gt;
					&lt;td&gt;13&lt;/td&gt;
					&lt;td&gt;D&lt;/td&gt;
					&lt;td&gt;N&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1110&lt;/td&gt;
					&lt;td&gt;16&lt;/td&gt;
					&lt;td&gt;14&lt;/td&gt;
					&lt;td&gt;E&lt;/td&gt;
					&lt;td&gt;O&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;1111&lt;/td&gt;
					&lt;td&gt;17&lt;/td&gt;
					&lt;td&gt;15&lt;/td&gt;
					&lt;td&gt;F&lt;/td&gt;
					&lt;td&gt;P&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10000&lt;/td&gt;
					&lt;td&gt;20&lt;/td&gt;
					&lt;td&gt;16&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;Q&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10001&lt;/td&gt;
					&lt;td&gt;21&lt;/td&gt;
					&lt;td&gt;17&lt;/td&gt;
					&lt;td&gt;11&lt;/td&gt;
					&lt;td&gt;R&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10010&lt;/td&gt;
					&lt;td&gt;22&lt;/td&gt;
					&lt;td&gt;18&lt;/td&gt;
					&lt;td&gt;12&lt;/td&gt;
					&lt;td&gt;S&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10011&lt;/td&gt;
					&lt;td&gt;23&lt;/td&gt;
					&lt;td&gt;19&lt;/td&gt;
					&lt;td&gt;13&lt;/td&gt;
					&lt;td&gt;T&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10100&lt;/td&gt;
					&lt;td&gt;24&lt;/td&gt;
					&lt;td&gt;20&lt;/td&gt;
					&lt;td&gt;14&lt;/td&gt;
					&lt;td&gt;U&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10101&lt;/td&gt;
					&lt;td&gt;25&lt;/td&gt;
					&lt;td&gt;21&lt;/td&gt;
					&lt;td&gt;15&lt;/td&gt;
					&lt;td&gt;V&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10110&lt;/td&gt;
					&lt;td&gt;26&lt;/td&gt;
					&lt;td&gt;22&lt;/td&gt;
					&lt;td&gt;16&lt;/td&gt;
					&lt;td&gt;W&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;10111&lt;/td&gt;
					&lt;td&gt;27&lt;/td&gt;
					&lt;td&gt;23&lt;/td&gt;
					&lt;td&gt;17&lt;/td&gt;
					&lt;td&gt;X&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11000&lt;/td&gt;
					&lt;td&gt;30&lt;/td&gt;
					&lt;td&gt;24&lt;/td&gt;
					&lt;td&gt;18&lt;/td&gt;
					&lt;td&gt;Y&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11001&lt;/td&gt;
					&lt;td&gt;31&lt;/td&gt;
					&lt;td&gt;25&lt;/td&gt;
					&lt;td&gt;19&lt;/td&gt;
					&lt;td&gt;Z&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11010&lt;/td&gt;
					&lt;td&gt;32&lt;/td&gt;
					&lt;td&gt;26&lt;/td&gt;
					&lt;td&gt;1A&lt;/td&gt;
					&lt;td&gt;a&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11011&lt;/td&gt;
					&lt;td&gt;33&lt;/td&gt;
					&lt;td&gt;27&lt;/td&gt;
					&lt;td&gt;1B&lt;/td&gt;
					&lt;td&gt;b&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11100&lt;/td&gt;
					&lt;td&gt;34&lt;/td&gt;
					&lt;td&gt;28&lt;/td&gt;
					&lt;td&gt;1C&lt;/td&gt;
					&lt;td&gt;c&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11101&lt;/td&gt;
					&lt;td&gt;35&lt;/td&gt;
					&lt;td&gt;29&lt;/td&gt;
					&lt;td&gt;1D&lt;/td&gt;
					&lt;td&gt;d&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11110&lt;/td&gt;
					&lt;td&gt;36&lt;/td&gt;
					&lt;td&gt;30&lt;/td&gt;
					&lt;td&gt;1E&lt;/td&gt;
					&lt;td&gt;e&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;11111&lt;/td&gt;
					&lt;td&gt;37&lt;/td&gt;
					&lt;td&gt;31&lt;/td&gt;
					&lt;td&gt;1F&lt;/td&gt;
					&lt;td&gt;f&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;100000&lt;/td&gt;
					&lt;td&gt;40&lt;/td&gt;
					&lt;td&gt;32&lt;/td&gt;
					&lt;td&gt;20&lt;/td&gt;
					&lt;td&gt;g&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&amp;hellip;&lt;/td&gt;
					&lt;td&gt;&amp;hellip;&lt;/td&gt;
					&lt;td&gt;&amp;hellip;&lt;/td&gt;
					&lt;td&gt;&amp;hellip;&lt;/td&gt;
					&lt;td&gt;&amp;hellip;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;One hexadecimal digit is 4 bits, so 2 digits = 8 bits = 1 byte. That makes hex convenient for looking at raw memory and addresses. You&amp;rsquo;ve probably seen it in hexdumps. Here&amp;rsquo;s a hexdump of the first 256 bytes of this site&amp;rsquo;s &lt;code&gt;favicon.ico&lt;/code&gt; (a WEBP in disguise):&lt;/p&gt;</description></item><item><title>BCACTF: reload decode</title><link>https://stromlarsen.com/2024/06/07/bcactf-reload-decode/</link><pubDate>Fri, 07 Jun 2024 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2024/06/07/bcactf-reload-decode/</guid><description>&lt;h2 id="challenge"&gt;Challenge&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Nikhil&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Points:&lt;/strong&gt; 50 points&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solves:&lt;/strong&gt; 19&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; misc&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Greetings neighbor. My name&amp;rsquo;s Crazy Dave but you can just call me Crazy Dave. I found this weird website that seems to represent something. Says something about taco as a reward Can you find whatever the code is and hand it to me? I could really go for a taco right now&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="resources"&gt;Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Web servers:&lt;/strong&gt; challs.bcactf.com:30831&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static resources:&lt;/strong&gt; main.py&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="challsbcactfcom30831"&gt;challs.bcactf.com:30831&lt;/h4&gt;
&lt;p&gt;A website with a &lt;code&gt;/flag&lt;/code&gt; endpoint whose response is an ASCII art of a flag represented using only 1s and 0s:&lt;/p&gt;</description></item><item><title>NPST 15. Bitråte: defeating bit rot</title><link>https://stromlarsen.com/2023/12/15/npst-15-bit-rate/</link><pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/15/npst-15-bit-rate/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Brukerveiledningen til en av de eldste maskinene på verkstedet har blitt borte. Heldigvis har Julenissens arkiv 1000 sikkerhetskopier av dokumentet på magnetbånd. Det viser seg at alle kopiene er kraftig angrepet av bit-råte så dokumentet må gjenoppbygges. Ifølge arkivalven så er brukerveiledningen skrevet på gammel-nordpolarsk som har samme alfabet som norsk, men inneholder ikke nye tegn som disse: {}#$[]§¤@&lt;/p&gt;
&lt;p&gt;Når du finner ut av det så send meg MD5-sjekksummen til det gjenoppbyggede dokumentet på formen PST{checksum}. Svaret er ikke versalfølsomt.&lt;/p&gt;</description></item><item><title>NPST 13. GeoGjettr: QR code restoration</title><link>https://stromlarsen.com/2023/12/13/npst-13-geogjettr/</link><pubDate>Wed, 13 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/13/npst-13-geogjettr/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Ledelsen har fått dilla på GeoGjettr og jeg er med i en konkurranse, men klarer ikke finne ut av hvilken by bildet her er fra. Kan du hjelpe meg litt fort?&lt;/p&gt;
&lt;p&gt;Svar meg med KRIPOS{navn på by}.&lt;/p&gt;
&lt;p&gt;- Mellomleder&lt;/p&gt;
&lt;p&gt;&lt;img src="bilde.png" alt="bilde.png"&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;h3 id="aperisolvefr"&gt;aperisolve.fr&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Blue, layer 1&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 1 1 1 1 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 11 11 11 1 13 11 13 1 11 13 1 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;511 513 513 151 521 515 151 511 521 111 515 323 511 521 515 511151 151&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Green, layer 1&lt;/p&gt;</description></item><item><title>NPST 12. Pakkestorm: IPv4 evil bit</title><link>https://stromlarsen.com/2023/12/12/npst-12-pakkestorm/</link><pubDate>Tue, 12 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/12/npst-12-pakkestorm/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Jeg har vært på et temmelig hemmelig oppdrag og fulgt med på en server som har hatt mistenkelig oppførsel tidligere. Nå tok vi den igjen når den begynte å sende masse pakker, men selv om jeg som alle andre alver liker pakker så ble det litt for mye av det gode. Kan du finne de onde for meg?&lt;/p&gt;
&lt;p&gt;- Tastefinger&lt;/p&gt;
&lt;p&gt;&lt;a href="fangede_pakker.pcap"&gt;fangede_pakker.pcap&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;
&lt;p&gt;A bunch of packets sent from &lt;code&gt;133.7.13.37&lt;/code&gt; to 11,000 different IPs. Fragmented IP protocol (TCP 6). Every TCP conversation contains a flag. Every packet contains some binary data that corresponds to a letter in a fake (or real) flag.&lt;/p&gt;</description></item><item><title>NPST 11. Informasjonsdeling: multiple AES-GCM keys</title><link>https://stromlarsen.com/2023/12/11/npst-11-informasjonsdeling/</link><pubDate>Mon, 11 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/11/npst-11-informasjonsdeling/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;NISSENS verksted har mottatt en mystisk melding og litt kode for å dekryptere meldingen. Noen alver i førstelinjen har sett på det, og blir ikke helt kloke. De mistenker at kun denne ene hemmeligheten ikke er nok. Kanskje er det andre som sitter på mer info?&lt;/p&gt;
&lt;p&gt;- Mellomleder&lt;/p&gt;
&lt;p&gt;&lt;a href="filer.zip"&gt;filer.zip&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;
&lt;p&gt;Unzipping gives us &lt;a href="dekrypter_melding.py"&gt;dekrypter_melding.py&lt;/a&gt; and &lt;a href="melding.enc"&gt;melding.enc&lt;/a&gt;. Here&amp;rsquo;s the python file:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Cipher &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; AES
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; base64 &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; b64decode
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; json
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;key &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#79a8ff"&gt;&amp;#34;???&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;with&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;open&lt;/span&gt;(&lt;span style="color:#79a8ff"&gt;&amp;#34;melding.enc&amp;#34;&lt;/span&gt;, &lt;span style="color:#79a8ff"&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;) &lt;span style="color:#b6a0ff"&gt;as&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b6a0ff"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; data &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; json&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;loads(f&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;read())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; nonce &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; b64decode(data[&lt;span style="color:#79a8ff"&gt;&amp;#34;nonce&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ciphertext &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; b64decode(data[&lt;span style="color:#79a8ff"&gt;&amp;#34;ciphertext&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tag &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; b64decode(data[&lt;span style="color:#79a8ff"&gt;&amp;#34;tag&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cipher &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; AES&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;new(key, AES&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;MODE_GCM, nonce &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; nonce)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; plaintext &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; cipher&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;decrypt_and_verify(ciphertext, tag)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(&lt;span style="color:#79a8ff"&gt;&amp;#34;Dekryptert melding: &amp;#34;&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;+&lt;/span&gt; plaintext&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;decode(&lt;span style="color:#79a8ff"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b6a0ff"&gt;except&lt;/span&gt; (ValueError, KeyError):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(&lt;span style="color:#79a8ff"&gt;&amp;#34;Oisann, noe gikk galt!&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Cipher &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; AES
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Util.number &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; long_to_bytes, bytes_to_long
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; base64 &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; b64decode
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; json
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keys &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f78fe7"&gt;bytes&lt;/span&gt;&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;fromhex(&lt;span style="color:#79a8ff"&gt;&amp;#34;980daad49738f76b80c8fafb0673ff1b&amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f78fe7"&gt;bytes&lt;/span&gt;&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;fromhex(&lt;span style="color:#79a8ff"&gt;&amp;#34;a3c5a5a81ebc62c6144a9dc1ae5cce11&amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f78fe7"&gt;bytes&lt;/span&gt;&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;fromhex(&lt;span style="color:#79a8ff"&gt;&amp;#34;fc78e6fee2138b798e1e51ed15e0a109&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;key &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; long_to_bytes(bytes_to_long(keys[&lt;span style="color:#00bcff"&gt;0&lt;/span&gt;]) &lt;span style="color:#00d3d0"&gt;^&lt;/span&gt; bytes_to_long(keys[&lt;span style="color:#00bcff"&gt;1&lt;/span&gt;]) &lt;span style="color:#00d3d0"&gt;^&lt;/span&gt; bytes_to_long(keys[&lt;span style="color:#00bcff"&gt;2&lt;/span&gt;]))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;with&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;open&lt;/span&gt;(&lt;span style="color:#79a8ff"&gt;&amp;#34;melding.enc&amp;#34;&lt;/span&gt;, &lt;span style="color:#79a8ff"&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;) &lt;span style="color:#b6a0ff"&gt;as&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; data &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; json&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;loads(f&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;read())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; nonce &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; b64decode(data[&lt;span style="color:#79a8ff"&gt;&amp;#34;nonce&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ciphertext &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; b64decode(data[&lt;span style="color:#79a8ff"&gt;&amp;#34;ciphertext&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tag &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; b64decode(data[&lt;span style="color:#79a8ff"&gt;&amp;#34;tag&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cipher &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; AES&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;new(key, AES&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;MODE_GCM, nonce&lt;span style="color:#00d3d0"&gt;=&lt;/span&gt;nonce)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; plaintext &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; cipher&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;decrypt_and_verify(ciphertext, tag)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(&lt;span style="color:#79a8ff"&gt;&amp;#34;Dekryptert melding: &amp;#34;&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;+&lt;/span&gt; plaintext&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;decode(&lt;span style="color:#79a8ff"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Flag: &lt;code&gt;NSM{9c7cac722d55da1dbfa13025d85efeed45e9ddea2796c0e5ea2fda81ea4de17d}&lt;/code&gt;&lt;/p&gt;</description></item><item><title>NPST 11. Mystifistisk pakke: cracking a ZIP</title><link>https://stromlarsen.com/2023/12/11/npst-11-mystifistisk-pakke/</link><pubDate>Mon, 11 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/11/npst-11-mystifistisk-pakke/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Heisann alle sammen!&lt;/p&gt;
&lt;p&gt;Det kom et bud innom med en pakke som vi ikke klarer å finne ut av. Budet la igjen en post-it lapp med 02a5588f275984a2296d505067ec727ff3a27b860ebda01a82f408f7aa4cda96 på og pakken er vedlagt i meldingen.&lt;/p&gt;
&lt;p&gt;- 📞 Sentralbordet&lt;/p&gt;
&lt;p&gt;&lt;a href="nism.zip"&gt;nism.zip&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;
&lt;p&gt;When uzipping the archive we get prompted for a password. The message on the post-it note is the password &lt;code&gt;02a5588f275984a2296d505067ec727ff3a27b860ebda01a82f408f7aa4cda96&lt;/code&gt;. Out we get &lt;a href="hemmelighet_2.txt"&gt;hemmelighet_2.txt&lt;/a&gt; with the following contents:&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hemmelighet #2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a3c5a5a81ebc62c6144a9dc1ae5cce11&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;By talking with other players we can gather all the secrets:&lt;/p&gt;</description></item><item><title>NPST 10. Alvesortering</title><link>https://stromlarsen.com/2023/12/10/npst-10-alvesortering/</link><pubDate>Sun, 10 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/10/npst-10-alvesortering/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;De strenge alvene har skrevet ned et julekodeord, men i den ivrige sorteringen av pakker har det skjedd en horribel feil og alt er blitt rot! Ordet har blitt borte i det som ser ut som et virrvarr av tilfeldig tekst! Nå trenger de hjelp til å gjenfinne ordet. De har null peiling på hvor langt ordet er. Kan du å gjenfinne ordet?&lt;/p&gt;
&lt;p&gt;- Mellomleder&lt;/p&gt;
&lt;p&gt;&lt;a href="random_text.bin"&gt;random_text.bin&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Rot&lt;/li&gt;
&lt;li&gt;Pakker&lt;/li&gt;
&lt;li&gt;Julekodeord&lt;/li&gt;
&lt;li&gt;Null&lt;/li&gt;
&lt;li&gt;Sortering&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When sorting the contents of the file by letter I find that there are only one opening curly brace and only one closing curly brace. They are too far apart to form a flag. Both of them come after a null byte though. The file contents look a lot like something encoded with base64.&lt;/p&gt;</description></item><item><title>NPST 09. Kronolokalisering: shadow geolocation OSINT</title><link>https://stromlarsen.com/2023/12/09/npst-09-kronolokalisering/</link><pubDate>Sat, 09 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/09/npst-09-kronolokalisering/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Gjennom et beslag har vi fått tak i et papirark. På den ene siden står det “Oppmøtested for den topphemmelige sydpolinfiltrasjonen 2023, rekognosering 23. november”. På den andre siden av arket er det et bilde. For å kunne hente inn overvåkingsbilder og identifisere hvem som har planlagt arrangementet trenger vi det nøyaktige tidspunktet bildet er tatt.&lt;/p&gt;
&lt;p&gt;Send meg svar på denne eposten som KRIPOS{tidspunkt}, f.eks. KRIPOS{23:35}, rundet av til nærmeste fem minutter.&lt;/p&gt;</description></item><item><title>NPST 07. Alle gode ting er tre: small RSA exponent</title><link>https://stromlarsen.com/2023/12/07/npst-07-alle-gode-ting-er-tre/</link><pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/07/npst-07-alle-gode-ting-er-tre/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Alveresepsjonen fant en mystisk lapp i postboksen til Nissens verksted i dag tidlig. Vanligvis er dette noe Ronny, Shahana og Ada fra alvdeling for kryptografi ville tatt seg av. Dessverre er alle tre bortreist på en viktig konferanse i San Francisco for å høre om den siste utviklingen innen eksponenter og modulær aritmetikk. Kan du steppe inn for dem og finne ut av hva denne beskjeden egentlig er for noe?&lt;/p&gt;</description></item><item><title>NPST 06. KAKER-kontroll: zero-width character stego</title><link>https://stromlarsen.com/2023/12/06/npst-06-kaker-kontroll/</link><pubDate>Wed, 06 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/06/npst-06-kaker-kontroll/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;I en standard KAKER-kontroll (Kontroll Av Kommuniké med Eksport-Restriksjoner) har det blitt tatt en kopi av dette dokumentet. Vi syns det er snodig at akkurat denne personen har hatt med seg dokumentet siden personen har hatt anti-jul-holdninger tidligere, og vi vil derfor at du tar en nærmere kikk for å se etter uhumskheter.&lt;/p&gt;
&lt;p&gt;- Tastefinger&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PE‍PPERKAKER {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; POR‍SJONER {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 20 kaker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ‍TYPE ‍{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; julekake
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INGREDIENSER {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; KAKEDEIG {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 2 ts ‍Pepper
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 2 ts Malt ing‍efær
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 0,5 ts Malt nellik
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 3 dl Mørk siru‍p
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 300 g Smør
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 2 ts Malt kanel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 4 ts Natron
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 2 stk. Egg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 300 g Sukker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ca. 900 g Hvetemel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MELISGLASUR {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ca. 250 g Melis
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 1 stk. Eggehvite
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 0,5 ts Sitronsaft
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; OPPSKRIFT {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; STEG1 { Bland smør, siru‍p og sukker i en kjele. Varm opp til sukkeret er sm‍eltet. Tilsett nellik, ingefæ‍r, pepper og kanel, og rør godt sammen. }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; STEG2 { Ta ‍kjelen av platen og avkjøl bl‍andingen noe. Rør inn egg. }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; STEG3 { Ha i natron, og si‍kt inn mel. Rør alt sammen til ‍en jevn deig. Deigen skal væ‍re ganske myk og klissete, den vil bli mye hardere når den blir kald! }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; STEG4 { Hell deigen over i en bolle og dryss litt hvetemel på toppen. Dekk til med litt plastfolie og sett deigen kaldt noen timer, gjerne over natten. }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; STEG5 { Skjær løs et stykke av deigen. Plasser resten av deigen tilbake i kjøleskapet. ‍Elt deigen forsiktig. Tilsett litt me‍r mel om den virker for myk. }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; STEG6 { ‍Mel en flate, ‍og kjevle deigen ut til ca 3 mm tykkelse. Det er enklest når deigen er myk som plas‍tilina. Stikk ut pepperkakefigurer og flytt dem over på et ‍bakepapirkledd stekebrett. Samle restene av deigen og legg den kaldt. Skjær ut et n‍ytt stykke av ‍deigen og gjenta prosessen. Deigen blir vanskelig å jobbe med når den blir for varm, så da kan d‍en få hvile i kjøleskapet igjen. }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; STEG7 { Stek kakene midt i stekeovnen på 175 °C i ca. 10 minutter. Avkjø‍l kakene helt på rist. }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; STEG8 { Bland sammen mel‍is, eggehvite og sitronsaft til en tykk ‍glasur, og dekorer kaken‍e. }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ‍}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="oppskrift.txt"&gt;oppskrift.txt&lt;/a&gt;&lt;/p&gt;</description></item><item><title>NPST 05. Muldvarpjakt: Overpass Turbo OSINT</title><link>https://stromlarsen.com/2023/12/05/npst-05-muldvarpjakt/</link><pubDate>Tue, 05 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/05/npst-05-muldvarpjakt/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Gjennom temmelig hemmelige innhentingsmetoder har vi fanget opp en melding om et nært forestående møte på Fastlands-Norge mellom en mistenkt kildefører som jobber for sydpolare tjenester og et ukjent objekt vi mistenker kan være en muldvarp.&lt;/p&gt;
&lt;p&gt;For at våre spaningsalver skal settes i stand til å observere møtet og identifisere det ukjente objektet må vi vite hvor vi skal sende våre alver.&lt;/p&gt;
&lt;p&gt;Vi prøvde å spørre OSINT-alvene våre, men de var travelt opptatt med å saumfare sosiale medier etter snille og slemme barn. De mumlet noe om at vi kunne fikse det selv med “turbo overgang”.&lt;/p&gt;</description></item><item><title>NPST 04. Pinneved: obfuscated Python</title><link>https://stromlarsen.com/2023/12/04/npst-04-pinneved/</link><pubDate>Mon, 04 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/04/npst-04-pinneved/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Alvebetjentene på Jule NISSEN sitt verksted våknet i dag til et fryktelig syn; Julenissens slede er sprengt i fillebiter. Vi har satt folk på saken for å finne ut av hvem som er ansvarlig for ødeleggelsen, men det er kritisk at sleden blir reparert slik at vi får testet den før Jule NISSEN skal levere pakkene.&lt;/p&gt;
&lt;p&gt;Alvebetjentene har samlet vrakrestene, samt verktøyet de mistenker at sabotørene har brukt.&lt;/p&gt;</description></item><item><title>NPST 03. Redacted: light DOCX forensics</title><link>https://stromlarsen.com/2023/12/03/npst-03-redacted/</link><pubDate>Sun, 03 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/03/npst-03-redacted/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Det er krise! Filene på alvemaskinene har blitt kryptert, og vi har ingen backups tilgjengelig!&lt;/p&gt;
&lt;p&gt;På nissens skrivebord fant vi det vedlagte brevet, sammen med en kryptert fil.&lt;/p&gt;
&lt;p&gt;Det er ubeskrivelig viktig at vi får åpnet denne filen igjen umiddelbart, da Jule NISSEN ikke klarer å huske innholdet!&lt;/p&gt;
&lt;p&gt;- Mellomleder&lt;/p&gt;
&lt;p&gt;&lt;a href="Mitt%20upressingsbrev.docx"&gt;Mitt utpressingsbrev.docx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="huskeliste.txt.enc"&gt;huskeliste.txt.enc&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="key-information"&gt;Key information&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Key: dda2846b010a6185b5e76aca4144069f88dc7a6ba49bf128&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IV: UtgangsVektor123&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PenguinCoin address: 43hxBZLYr1&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Suspicious: &amp;ldquo;Jule NISSEN&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Suspicious: Lapskaus$ == &lt;a href="https://en.wikipedia.org/wiki/Lapsus%24"&gt;https://en.wikipedia.org/wiki/Lapsus%24&lt;/a&gt;&lt;/p&gt;</description></item><item><title>NPST 02. Scrambled: Rubik's cube</title><link>https://stromlarsen.com/2023/12/02/npst-02-scrambled/</link><pubDate>Sat, 02 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/02/npst-02-scrambled/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="oedelagte_leker.png" alt="oedelagte_leker.png"&gt;&lt;/p&gt;
&lt;p&gt;Over natten har det vært store utfordringer knyttet til en av maskinene i verkstedet. En serie feilproduserte leker har kommet på rullende bånd. Vi prøver å finne ut hva som har skjedd. Graver du ned i det her?&lt;/p&gt;
&lt;p&gt;- Mellomleder&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Bra, jeg videresender til fslaktern!&lt;/p&gt;
&lt;p&gt;- Mellomleder&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Fra:&lt;/strong&gt; Tastefinger&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Til:&lt;/strong&gt; Mellomleder&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Emne:&lt;/strong&gt; FW: Scrambled&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vedlegg:&lt;/strong&gt; &lt;a href="oedelagte_leker_fix.png"&gt;oedelagte_leker_fix.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tror det var noe skitt på linsa da det forrige bildet ble tatt, så jeg har tatt et nytt et. Har lagt med som vedlegg.&lt;/p&gt;</description></item><item><title>NPST 01. Mobildetektiven: SMS cipher</title><link>https://stromlarsen.com/2023/12/01/npst-01-mobildetektiven/</link><pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/12/01/npst-01-mobildetektiven/</guid><description>&lt;h2 id="task-description"&gt;Task description&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Her får du den første oppgaven!&lt;/p&gt;
&lt;p&gt;Under etterforskningen av hendelsen på jule-verkstedet har vi oppdaget noe rart. Et av meldingssystemene som sender varslinger til beredskapsvaktene for verkstedet har sendt en SMS til et ukjent nummer. Meldingen er dessverre helt uleselig for oss, så vi trenger dine mobildetektiv-egenskaper. Når du finner ut av det, send meg svar på formatet PST{ditt svar her}.&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;7-4 9-3 7-4 8-1 3-2 6-1 0-1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;4-3 6-2 3-3 4-3 7-4 3-2 7-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;8-1 0-1 4-1 7-3 8-2 6-2 5-2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;3-2 7-3 0-1 4-3 6-2 2-3 6-3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;6-1 4-3 6-2 4-1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;- Tastefinger&lt;/p&gt;</description></item><item><title>Diffie-Hellman key exchange</title><link>https://stromlarsen.com/2023/11/27/dh/</link><pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/11/27/dh/</guid><description>&lt;h2 id="textbook-key-exchange"&gt;Textbook key exchange&lt;/h2&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Util.number &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; getPrime
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;q &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; getPrime(&lt;span style="color:#00bcff"&gt;1024&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; q &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;2&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;+&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;g &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Alice&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;## Private key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; getPrime(&lt;span style="color:#00bcff"&gt;1024&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;## Public key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;A &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(g, a, p)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;## Send A to Bob&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Bob&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;## Private key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;b &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; getPrime(&lt;span style="color:#00bcff"&gt;1024&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;## Public key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;B &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(g, b, p)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;## Shared secret&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;s_bob &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(A, b, p)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;## Send B to Alice&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Alice&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;## Shared secret&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;s_alice &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(B, a, p)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(s_alice &lt;span style="color:#00d3d0"&gt;==&lt;/span&gt; s_bob)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# True&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now both Alice and Bob each have the same shared secret without revealing private information with each other. Someone snooping on the conversation will not be able to know Alice&amp;rsquo;s or Bob&amp;rsquo;s private key or their shared secret without solving the discrete log problem. However, without authentication an active man-in-the-middle can still defeat security of the key exchange.&lt;/p&gt;</description></item><item><title>RSA many primes: phi for repeated factors</title><link>https://stromlarsen.com/2023/11/27/too-many-primes/</link><pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/11/27/too-many-primes/</guid><description>&lt;p&gt;It may be possible to factor &lt;code&gt;N&lt;/code&gt; only if it is composed of many &lt;em&gt;small&lt;/em&gt; primes. Try &lt;a href="http://factordb.com/"&gt;factordb.com&lt;/a&gt; or SageMath. The rest is textbook RSA decryption.&lt;/p&gt;
&lt;p&gt;Note: If one or more of the primes are used multiple times, creating phi is a little different.&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# 2 identical&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; p_1 &lt;span style="color:#00d3d0"&gt;==&lt;/span&gt; p_2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;phi &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; (p_1 &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;) &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; p_2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# 2 identical + 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; p_1 &lt;span style="color:#00d3d0"&gt;==&lt;/span&gt; p_2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; p_1 &lt;span style="color:#00d3d0"&gt;!=&lt;/span&gt; q
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;phi &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; (p_1 &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;) &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; p_2 &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; (q &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# 2 identical + 2 identical&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; p_1 &lt;span style="color:#00d3d0"&gt;==&lt;/span&gt; p_2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; q_1 &lt;span style="color:#00d3d0"&gt;==&lt;/span&gt; q_2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; p_1 &lt;span style="color:#00d3d0"&gt;!=&lt;/span&gt; q_2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;phi &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; (p_1 &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;) &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; p_2 &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; (q_1 &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;) &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; q_2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# 3 identical + 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; p_1 &lt;span style="color:#00d3d0"&gt;==&lt;/span&gt; p_2 &lt;span style="color:#00d3d0"&gt;==&lt;/span&gt; p_3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; p_1 &lt;span style="color:#00d3d0"&gt;!=&lt;/span&gt; q
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;phi &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; (p_1 &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;) &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; p_2 &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; p_3 &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; (q &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# 3 unique&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; p &lt;span style="color:#00d3d0"&gt;!=&lt;/span&gt; q
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; q &lt;span style="color:#00d3d0"&gt;!=&lt;/span&gt; r
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; r &lt;span style="color:#00d3d0"&gt;!=&lt;/span&gt; p
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;phi &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; (p &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;) &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; (q &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;) &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; (r &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sage: n &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;11976883600073589517586036218890790941510903302507834100496110626215757528392961&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00d3d0"&gt;....&lt;/span&gt;: &lt;span style="color:#00bcff"&gt;272580596919990757219201877397519125253192238833551591339671104797730056393143427756&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00d3d0"&gt;....&lt;/span&gt;: &lt;span style="color:#00bcff"&gt;229551027083966190850752574521809608536089676704023152324023558801462867715411652018&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00d3d0"&gt;....&lt;/span&gt;: &lt;span style="color:#00bcff"&gt;474769802470149363510965976397340718720150422144473075649693632965977205420453552963&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00d3d0"&gt;....&lt;/span&gt;: &lt;span style="color:#00bcff"&gt;933180293039726746233450432370235938070597627874532971273788803263016780500807163358&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00d3d0"&gt;....&lt;/span&gt;: &lt;span style="color:#00bcff"&gt;986835444739716122026356592032335015432128070225129224801935825954681606834247438072&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00d3d0"&gt;....&lt;/span&gt;: &lt;span style="color:#00bcff"&gt;008219081805277470773777332672468660614435325028811403540470653684001003909843061184&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00d3d0"&gt;....&lt;/span&gt;: &lt;span style="color:#00bcff"&gt;38875893373327473&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sage: n&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;bit_length()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00bcff"&gt;1994&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sage: factor(n)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00bcff"&gt;32843&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;33427&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;33457&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;33521&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;34259&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;34261&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;34499&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;34501&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;35449&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;35753&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;35809&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;35863&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;35897&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;36467&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;36913&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;36947&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;37309&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;37337&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;37783&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;38261&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;38317&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;38593&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;39089&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;40093&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;40127&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;40343&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;40583&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;40693&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;41141&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;41413&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;41617&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;41641&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;41879&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;41897&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;41959&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;42473&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;42487&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;42611&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;42899&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;43133&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;43201&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;43411&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;43691&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;43753&lt;/span&gt;&lt;span style="color:#00d3d0"&gt;^&lt;/span&gt;&lt;span style="color:#00bcff"&gt;2&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;43933&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;44281&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;44371&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;44531&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;44543&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;45439&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;45697&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;46273&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;46511&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;46549&lt;/span&gt;&lt;span style="color:#00d3d0"&gt;^&lt;/span&gt;&lt;span style="color:#00bcff"&gt;2&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;47143&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;47147&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;47657&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;48193&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;48271&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;48383&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;48677&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;49411&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;49433&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;49559&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;49711&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;49957&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;50147&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;50707&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;51043&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;51131&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;51199&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;51343&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;51473&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;51613&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;52103&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;52177&lt;/span&gt;&lt;span style="color:#00d3d0"&gt;^&lt;/span&gt;&lt;span style="color:#00bcff"&gt;2&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;53147&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;55073&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;55469&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;55621&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;55987&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;56041&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;56131&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;56369&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;57073&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;57493&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;57653&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;57751&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;58231&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;58367&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;58451&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;58771&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;59273&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;59921&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;60041&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;60107&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;60251&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;60257&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;60917&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;61231&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;61379&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;61417&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;61583&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;61927&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;62131&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;62171&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;62219&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;62351&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;62417&lt;/span&gt;&lt;span style="color:#00d3d0"&gt;^&lt;/span&gt;&lt;span style="color:#00bcff"&gt;2&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;62819&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;62851&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;63097&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;63127&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;63281&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;63577&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;63659&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;63949&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;64319&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;64853&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;64891&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;64951&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;65071&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;65119&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;65129&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Util.number &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; long_to_bytes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;103847869308772286068350812608946161310048471780108687445447082897960791832563296440399688011904014800812944419812110339595664973140355119639332857682984542320294869246885417325791635542758894672211270946494867768942190945299117352702305720351501541399290674333440435028192034483858344585064329968092445674146382885907678900307486892007932359930351596070322801270549377672369927342419317710725943361630295447168927334941260538714263133325932882367847844419538306475046130479602452615695686956103997902100355329048134993935472176473443887710947012922903378270936640012798675413677156658065250066093898&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;n &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1197688360007358951758603621889079094151090330250783410049611062621575752839296127258059691999075721920187739751912525319223883355159133967110479773005639314342775622955102708396619085075257452180960853608967670402315232402355880146286771541165201847476980247014936351096597639734071872015042214447307564969363296597720542045355296393318029303972674623345043237023593807059762787453297127378880326301678050080716335898683544473971612202635659203233501543212807022512922480193582595468160683424743807200821908180527747077377733267246866061443532502881140354047065368400100390984306118438875893373327473&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;e &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;65537&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;primes &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; [&lt;span style="color:#00bcff"&gt;32843&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;33427&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;33457&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;33521&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;34259&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;34261&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;34499&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;34501&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;35449&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;35753&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;35809&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;35863&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;35897&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;36467&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;36913&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;36947&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;37309&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;37337&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;37783&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;38261&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;38317&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;38593&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;39089&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;40093&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;40127&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;40343&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;40583&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;40693&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;41141&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;41413&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;41617&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;41641&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;41879&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;41897&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;41959&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;42473&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;42487&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;42611&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;42899&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;43133&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;43201&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;43411&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;43691&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;43753&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;43753&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;43933&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;44281&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;44371&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;44531&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;44543&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;45439&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;45697&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;46273&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;46511&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;46549&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;46549&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;47143&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;47147&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;47657&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;48193&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;48271&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;48383&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;48677&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;49411&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;49433&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;49559&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;49711&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;49957&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;50147&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;50707&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;51043&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;51131&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;51199&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;51343&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;51473&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;51613&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;52103&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;52177&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;52177&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;53147&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;55073&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;55469&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;55621&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;55987&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;56041&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;56131&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;56369&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;57073&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;57493&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;57653&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;57751&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;58231&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;58367&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;58451&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;58771&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;59273&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;59921&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;60041&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;60107&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;60251&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;60257&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;60917&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;61231&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;61379&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;61417&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;61583&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;61927&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;62131&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;62171&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;62219&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;62351&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;62417&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;62417&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;62819&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;62851&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;63097&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;63127&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;63281&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;63577&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;63659&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;63949&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;64319&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;64853&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;64891&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;64951&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;65071&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;65119&lt;/span&gt;, &lt;span style="color:#00bcff"&gt;65129&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;phi &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;for&lt;/span&gt; i, p &lt;span style="color:#00d3d0"&gt;in&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;enumerate&lt;/span&gt;(primes):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b6a0ff"&gt;if&lt;/span&gt; p &lt;span style="color:#00d3d0"&gt;in&lt;/span&gt; primes[i &lt;span style="color:#00d3d0"&gt;+&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;:]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; phi &lt;span style="color:#00d3d0"&gt;*=&lt;/span&gt; p
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b6a0ff"&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; phi &lt;span style="color:#00d3d0"&gt;*=&lt;/span&gt; p &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;d &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(e, &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt;&lt;span style="color:#00bcff"&gt;1&lt;/span&gt;, phi)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;m &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(c, d, n)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(long_to_bytes(m))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>RSA monoprime: when n = p</title><link>https://stromlarsen.com/2023/11/27/monoprime/</link><pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/11/27/monoprime/</guid><description>&lt;p&gt;If only one prime is used, then &lt;code&gt;n = p&lt;/code&gt; where &lt;code&gt;p&lt;/code&gt; is the only prime and &lt;code&gt;n&lt;/code&gt; is the public modulus.
When sharing the public values, &lt;code&gt;n&lt;/code&gt;, &lt;code&gt;e&lt;/code&gt;, and &lt;code&gt;c&lt;/code&gt;, we accidentally reveal our secret prime in &lt;code&gt;n&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Euler phi is &lt;code&gt;p - 1&lt;/code&gt;, and the rest is textbook RSA decryption.&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;e &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;n &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;phi &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; p &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; gcd(e, phi) &lt;span style="color:#00d3d0"&gt;==&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;d &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(e, &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt;&lt;span style="color:#00bcff"&gt;1&lt;/span&gt;, phi)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;m &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(c, d, n)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(long_to_bytes(m))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>RSA small primes: factoring with FactorDB</title><link>https://stromlarsen.com/2023/11/27/small-primes/</link><pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/11/27/small-primes/</guid><description>&lt;p&gt;The public modulus may be factored (integer factorization) either manually or with &lt;a href="http://factordb.com/"&gt;factordb.com&lt;/a&gt; to reveal the secret primes, &lt;code&gt;p&lt;/code&gt; and &lt;code&gt;q&lt;/code&gt;. The rest is textbook RSA decryption.&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sage: N &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;510143758735509025530880200653196460532653147&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sage: N&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;bit_length()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00bcff"&gt;149&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sage: factor(N)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00bcff"&gt;19704762736204164635843&lt;/span&gt; &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; &lt;span style="color:#00bcff"&gt;25889363174021185185929&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;210890089544322783718082700209558334811224995&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;n &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;510143758735509025530880200653196460532653147&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;e &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;65537&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# ---&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;19704762736204164635843&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;q &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;25889363174021185185929&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;phi &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; (p &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;) &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; (q &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;d &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(e, &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt;&lt;span style="color:#00bcff"&gt;1&lt;/span&gt;, phi)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;m &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(c, d, n)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(long_to_bytes(m))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>RSA: encryption and decryption</title><link>https://stromlarsen.com/2023/11/27/rsa/</link><pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/11/27/rsa/</guid><description>&lt;h2 id="encryption"&gt;Encryption&lt;/h2&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# pip install pycryptodome&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Util.number &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; bytes_to_long, getPrime
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Plaintext as bytes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pt &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#79a8ff"&gt;b&lt;/span&gt;&lt;span style="color:#79a8ff"&gt;&amp;#34;Some plaintext message to be encrypted&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Converted to an integer (m)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;m &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; bytes_to_long(pt)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Get 1024-bit primes (p and q)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;p &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; getPrime(&lt;span style="color:#00bcff"&gt;1024&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;q &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; getPrime(&lt;span style="color:#00bcff"&gt;1024&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Multiplying p and q gives us a 2048-bit public modulus (n)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;n &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; p &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; q
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Public exponent (e)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# This is the 4th of Fermat&amp;#39;s primes: https://en.wikipedia.org/wiki/Fermat_number&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;e &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#00bcff"&gt;65537&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Ciphertext (c) - `m` to the power of `e` modulo `n`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(m, e, n)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# The message (m) and the primes (p and q) are kept secret&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# The public exponent (e), ciphertext (c) and public modulus (n) may be shared&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id="decryption"&gt;Decryption&lt;/h2&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Euler&amp;#39;s totient (phi) - usually denoted as `φ(N)`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;euler_phi &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; (p&lt;span style="color:#00d3d0"&gt;-&lt;/span&gt;&lt;span style="color:#00bcff"&gt;1&lt;/span&gt;) &lt;span style="color:#00d3d0"&gt;*&lt;/span&gt; (q&lt;span style="color:#00d3d0"&gt;-&lt;/span&gt;&lt;span style="color:#00bcff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Private key (d) - the modular inverse of `e`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# Requires that `e` and `euler_phi` are coprime&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# If they are not coprime, `e` may not be invertible mod `d`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# `d` inverts `e` modulo `n`: `e * d ≡ 1 mod n` or simpler `(e * d) % n == 1`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;assert&lt;/span&gt; gcd(e, euler_phi) &lt;span style="color:#00d3d0"&gt;==&lt;/span&gt; &lt;span style="color:#00bcff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;d &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(e, &lt;span style="color:#00d3d0"&gt;-&lt;/span&gt;&lt;span style="color:#00bcff"&gt;1&lt;/span&gt;, euler_phi)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# The original message (m) can be recovered&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;m &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;pow&lt;/span&gt;(c, d, n)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In reality the message (m) should be padded. The padding alone can mitigate most of the weaknesses described below.&lt;/p&gt;</description></item><item><title>DREAM: sleepy vault, blind timing attack credential recovery</title><link>https://stromlarsen.com/2023/08/11/sleepy-vault/</link><pubDate>Fri, 11 Aug 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/08/11/sleepy-vault/</guid><description>&lt;h2 id="challenge"&gt;Challenge&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;I seem to have forgotten most of my credentials for the sleepy vault. All I remember is that my username starts with &lt;code&gt;;JG[e]&lt;/code&gt; and my password starts with &lt;code&gt;8~5&lt;/code&gt;. Can you help me recover my username and password? Remember: optimization is key!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Category: web&lt;/li&gt;
&lt;li&gt;Difficulty: medium&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wrote this for DREAM in 2023.&lt;/p&gt;
&lt;p&gt;The only thing you get is a login form. It is a blind challenge: the frontend reveals nothing about which part of the credentials are right, and there is no source to read. What you do get is response times.&lt;/p&gt;</description></item><item><title>UIUCTF: escaping a Vim jail (unintended)</title><link>https://stromlarsen.com/2023/07/10/uiuctf-vimjail/</link><pubDate>Mon, 10 Jul 2023 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2023/07/10/uiuctf-vimjail/</guid><description>&lt;p&gt;Writeup for an unintended solution by fslaktern&lt;/p&gt;
&lt;h2 id="vimjail1"&gt;vimjail1&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Connect with &lt;code&gt;socat file:$(tty),raw,echo=0 tcp:vimjail1.chal.uiuc.tf:1337&lt;/code&gt;
You may need to install socat.&lt;/p&gt;
&lt;p&gt;Author: richard&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We are given the following files:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Dockerfile&lt;/code&gt;&lt;/p&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;FROM&lt;/span&gt; &lt;span style="color:#79a8ff"&gt;ubuntu:22.04&lt;/span&gt; &lt;span style="color:#b6a0ff"&gt;as&lt;/span&gt; &lt;span style="color:#79a8ff"&gt;chroot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;RUN&lt;/span&gt; apt-get update -y
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;RUN&lt;/span&gt; apt-get install -y vim
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;RUN&lt;/span&gt; /usr/sbin/useradd --no-create-home -u &lt;span style="color:#00bcff"&gt;1000&lt;/span&gt; user
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;COPY&lt;/span&gt; flag.txt /
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;COPY&lt;/span&gt; entry.sh /home/user/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;COPY&lt;/span&gt; vimrc /home/user/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;FROM&lt;/span&gt; &lt;span style="color:#79a8ff"&gt;gcr.io/kctf-docker/challenge@sha256:d884e54146b71baf91603d5b73e563eaffc5a42d494b1e32341a5f76363060fb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;COPY&lt;/span&gt; --from&lt;span style="color:#00d3d0"&gt;=&lt;/span&gt;chroot / /chroot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;COPY&lt;/span&gt; nsjail.cfg /home/user/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# This is mostly boring kctf and nsjail setup. The important part to pay&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;# attention to is the &amp;#34;pty,sane&amp;#34; line.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;CMD&lt;/span&gt; kctf_setup &lt;span style="color:#00d3d0"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#79a8ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; kctf_drop_privs &lt;span style="color:#79a8ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; socat &lt;span style="color:#79a8ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TCP-LISTEN:1337,reuseaddr,fork &lt;span style="color:#79a8ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; EXEC:&lt;span style="color:#79a8ff"&gt;&amp;#34;kctf_pow nsjail --config /home/user/nsjail.cfg -- /home/user/entry.sh&amp;#34;&lt;/span&gt;,pty,sane&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;entry.sh&lt;/code&gt;&lt;/p&gt;</description></item><item><title>SpaceCTF: AES-CTR key reuse</title><link>https://stromlarsen.com/2022/03/14/spacectf-aes/</link><pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate><guid>https://stromlarsen.com/2022/03/14/spacectf-aes/</guid><description>&lt;h2 id="challenge"&gt;Challenge&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Difficulty: 3/5&lt;/p&gt;
&lt;p&gt;Max points: 150&lt;/p&gt;
&lt;p&gt;Description: Bessie is hiding something on the moonbase&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="files"&gt;Files&lt;/h3&gt;
&lt;h4 id="outputtxt"&gt;output.txt&lt;/h4&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;6be9a7a25ad6a99cf9312f48666229e3b57130f3c91732ddfbf414efd92e96c36ea69c4a1f35158ed53fca5b1db2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;4ce2b6e450cdf389d76312484c4072a68c752d8a963d3dffc7f506&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4 id="aespy"&gt;aes.py&lt;/h4&gt;

&lt;div class="codeblock"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#fff;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a8a8a8"&gt;#!/usr/bin/env python3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Cipher &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; AES
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;from&lt;/span&gt; Crypto.Util &lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; Counter
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;key &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; os&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;urandom(&lt;span style="color:#00bcff"&gt;16&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;def&lt;/span&gt; &lt;span style="color:#feacd0"&gt;encrypt&lt;/span&gt;(text):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cipher &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; AES&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;new(key, AES&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;MODE_CTR, counter&lt;span style="color:#00d3d0"&gt;=&lt;/span&gt;Counter&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;new(&lt;span style="color:#00bcff"&gt;128&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ciphertext &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; cipher&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;encrypt(text)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b6a0ff"&gt;return&lt;/span&gt; ciphertext&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;hex()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;msg &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; &lt;span style="color:#79a8ff"&gt;b&lt;/span&gt;&lt;span style="color:#79a8ff"&gt;&amp;#34;The quick brown fox jumps over the lazy dog...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(encrypt(msg))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b6a0ff"&gt;with&lt;/span&gt; &lt;span style="color:#f78fe7"&gt;open&lt;/span&gt;(&lt;span style="color:#79a8ff"&gt;&amp;#39;flag0.txt&amp;#39;&lt;/span&gt;, &lt;span style="color:#79a8ff"&gt;&amp;#39;rb&amp;#39;&lt;/span&gt;) &lt;span style="color:#b6a0ff"&gt;as&lt;/span&gt; flagFile:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; flag &lt;span style="color:#00d3d0"&gt;=&lt;/span&gt; flagFile&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;read()&lt;span style="color:#00d3d0"&gt;.&lt;/span&gt;strip()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f78fe7"&gt;print&lt;/span&gt;(encrypt(flag))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;h3 id="aes-ctr-mode"&gt;AES CTR mode&lt;/h3&gt;
&lt;p&gt;AES CTR mode is vulnerable to key reuse. The decryption operation is just: &lt;code&gt;ciphertext_1 xor key_stream = plaintext_1&lt;/code&gt;. This also means that &lt;code&gt;ciphertext_1 xor plaintext_1 = key_stream&lt;/code&gt; and &lt;code&gt;key_stream xor plaintext_1 = ciphertext_1&lt;/code&gt;. When we have the key stream, we can use it to decrypt the second ciphertext as well with &lt;code&gt;ciphertext_2 xor key_stream = plaintext_2&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>