<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://blog.elmo.sg/</id><title>Elma</title><subtitle>a rant of my technical adventures</subtitle> <updated>2026-06-14T20:46:25+08:00</updated> <author> <name>Elma</name> <uri>https://blog.elmo.sg/</uri> </author><link rel="self" type="application/atom+xml" href="https://blog.elmo.sg/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://blog.elmo.sg/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 Elma </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>Reflections of CDDC 2026 and my thoughts on AI in CTFs</title><link href="https://blog.elmo.sg/posts/cddc-2026-post-mortem-and-ai/" rel="alternate" type="text/html" title="Reflections of CDDC 2026 and my thoughts on AI in CTFs" /><published>2026-06-11T20:00:00+08:00</published> <updated>2026-06-11T20:00:00+08:00</updated> <id>https://blog.elmo.sg/posts/cddc-2026-post-mortem-and-ai/</id> <content src="https://blog.elmo.sg/posts/cddc-2026-post-mortem-and-ai/" /> <author> <name>Elma</name> </author> <category term="general" /> <summary> This year marks my fifth year playing in Cyber Defender’s Discovery Camp (CDDC), the largest-scale jeopardy CTF in Singapore, organized by DSTA. CDDC over the years Allow me to reminisce 2021 was the year when I first stepped into anything tech and cyber related, to be greeted by this mess of a CDDC to set my expectations for my first CDDC ever. That set the bar pretty low. 2023 was when I ... </summary> </entry> <entry><title>Why does zsteg not work on JPEG files?</title><link href="https://blog.elmo.sg/posts/why-zsteg-doesnt-work-on-jpeg-files/" rel="alternate" type="text/html" title="Why does zsteg not work on JPEG files?" /><published>2026-02-08T21:45:00+08:00</published> <updated>2026-02-08T21:45:00+08:00</updated> <id>https://blog.elmo.sg/posts/why-zsteg-doesnt-work-on-jpeg-files/</id> <content src="https://blog.elmo.sg/posts/why-zsteg-doesnt-work-on-jpeg-files/" /> <author> <name>Elma</name> </author> <category term="Research" /> <summary> If you’ve been playing CTFs for some time like me, you would be somewhat familiar with what Steganography is (or at least know what hail mary stego tools to throw image files at to hopefully obtain a flag). Yesterday, when I was trying to write a simple steganography challenge for a beginner CTF, I faced some problems where I tried to encode LSB data into a JPEG image file but did not get the ... </summary> </entry> <entry><title>Flare-On 12 — Uncovering Key Functionalities within Obfuscated Binaries using WinDBG 🌀</title><link href="https://blog.elmo.sg/posts/flare-on-12-challenge-8/" rel="alternate" type="text/html" title="Flare-On 12 — Uncovering Key Functionalities within Obfuscated Binaries using WinDBG 🌀" /><published>2025-10-25T00:00:00+08:00</published> <updated>2025-10-25T00:00:00+08:00</updated> <id>https://blog.elmo.sg/posts/flare-on-12-challenge-8/</id> <content src="https://blog.elmo.sg/posts/flare-on-12-challenge-8/" /> <author> <name>Elma</name> </author> <category term="Writeups" /> <summary> The annual Flare-On has just concluded recently and I did not manage to find enough time to finish the final challenge. Regardless, here is a brief writeup for challenge 8 FlareAuthentiactor to showcase how I used Time Travel Debugging and WinDBG to solve the challenge quickly without much de-obfuscation. Overview We are given a program FlareAuthenticator.exe that is using Qt6 for the interfa... </summary> </entry> <entry><title>Decrypting and parsing HTTP/3 traffic in Wireshark</title><link href="https://blog.elmo.sg/posts/parsing-decrypted-quic-traffic-in-wireshark/" rel="alternate" type="text/html" title="Decrypting and parsing HTTP/3 traffic in Wireshark" /><published>2025-09-07T00:00:00+08:00</published> <updated>2025-09-07T00:00:00+08:00</updated> <id>https://blog.elmo.sg/posts/parsing-decrypted-quic-traffic-in-wireshark/</id> <content src="https://blog.elmo.sg/posts/parsing-decrypted-quic-traffic-in-wireshark/" /> <author> <name>Elma</name> </author> <category term="Challenge Creation" /> <category term="Research" /> <summary> I was writing a forensics CTF challenge for a CTF organized by ISC2 SG Youth Wing and I wanted to write a challenge where the participants had to decrypt some HTTPS traffic with a SSLKEYLOGFILE to be able to view and export the HTTP objects within the decrypted traffic. However, this soon proved to be more difficult than I thought due to the recent and quick adoption of HTTP/3 in modern browse... </summary> </entry> <entry><title>Control Flow Obfuscation — What happens if we modify callee-saved registers? 🙈</title><link href="https://blog.elmo.sg/posts/the-art-of-hiding-code-by-modifying-non-volatile-registers/" rel="alternate" type="text/html" title="Control Flow Obfuscation — What happens if we modify callee-saved registers? 🙈" /><published>2025-08-18T00:00:01+08:00</published> <updated>2025-08-19T11:44:17+08:00</updated> <id>https://blog.elmo.sg/posts/the-art-of-hiding-code-by-modifying-non-volatile-registers/</id> <content src="https://blog.elmo.sg/posts/the-art-of-hiding-code-by-modifying-non-volatile-registers/" /> <author> <name>Elma</name> </author> <category term="Research" /> <summary> I’ve always had much appreciation for all the low-level things from assembly to compilers and more. In my pursuit to better understand these mechanisms, I’m often left with many questions on what happens if we challenge the different assumptions and conventions that our compilers are built upon. In this post, we will question the following conventions and break some assumptions made by disas... </summary> </entry> </feed>
