<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Binary Ninja on Blaž Škufca</title><link>https://blazskufca.com/tags/binary-ninja/</link><description>Recent content in Binary Ninja on Blaž Škufca</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 25 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blazskufca.com/tags/binary-ninja/index.xml" rel="self" type="application/rss+xml"/><item><title>Fighting dragons and riding camels (DCTF26)</title><link>https://blazskufca.com/projects/camels-and-dragons/</link><pubDate>Sat, 25 Jul 2026 00:00:00 +0000</pubDate><guid>https://blazskufca.com/projects/camels-and-dragons/</guid><description>&lt;style&gt;
.pz{position:relative;width:100%;max-width:820px;margin:1.5rem auto 0.4rem;border:1px solid rgba(128,128,128,.3);border-radius:8px;overflow:hidden;background:#1e1e1e;}
.pz img{display:block;width:100%;height:100%;object-fit:contain;cursor:grab;}
.pz img:active{cursor:grabbing;}
.pz-hint{max-width:820px;margin:0 auto 1.5rem;text-align:center;font-size:12px;font-family:monospace;opacity:.5;}
/* Large diagrams break out wider than the text column so there's less panning. */
.pz.wide{max-width:none;width:min(1240px,94vw);left:50%;transform:translateX(-50%);}
.pz.wide + .pz-hint{max-width:none;width:min(1240px,94vw);position:relative;left:50%;transform:translateX(-50%);margin:0 0 1.5rem;}
/* Fullscreen button + fullscreen layout (fills the screen so big graphs are actually inspectable). */
.pz-fs{position:absolute;top:8px;right:8px;z-index:5;padding:2px 8px;font:12px/1 monospace;color:#ddd;background:rgba(0,0,0,.55);border:1px solid rgba(255,255,255,.25);border-radius:4px;cursor:pointer;opacity:.55;}
.pz-fs:hover{opacity:1;}
.pz:fullscreen{width:100vw;height:100vh;max-width:none;left:0;transform:none;border:0;border-radius:0;background:#1e1e1e;}
.pz:fullscreen img{height:100%;}
&lt;/style&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/panzoom@9.4.3/dist/panzoom.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
document.addEventListener('DOMContentLoaded', function () {
 var coarse = window.matchMedia &amp;&amp; window.matchMedia('(pointer: coarse)').matches;

 function addFullscreenButton(box, onChange) {
 var btn = document.createElement('button');
 btn.className = 'pz-fs';
 btn.type = 'button';
 btn.textContent = '⛶ fullscreen';
 btn.addEventListener('click', function (e) {
 e.stopPropagation();
 if (document.fullscreenElement === box) { document.exitFullscreen(); }
 else if (box.requestFullscreen) { box.requestFullscreen(); }
 });
 box.appendChild(btn);
 document.addEventListener('fullscreenchange', function () {
 btn.textContent = (document.fullscreenElement === box) ? '⛶ exit' : '⛶ fullscreen';
 if (onChange) { onChange(); }
 });
 }

 document.querySelectorAll('.pz').forEach(function (box) {
 var img = box.querySelector('img');
 if (!img) return;
 var hint = box.nextElementSibling;
 // Mobile / touch (or no library): tap to open the full SVG, keep native page scroll intact.
 if (coarse || !window.panzoom) {
 img.style.cursor = 'zoom-in';
 box.addEventListener('click', function () { window.open(img.src, '_blank', 'noopener'); });
 if (hint &amp;&amp; hint.classList.contains('pz-hint')) hint.textContent = 'tap to open full-size';
 return;
 }
 // Desktop / mouse: inline scroll-zoom + drag-pan. The whole graph is visible at rest
 // (object-fit: contain); minZoom 1 keeps that as the zoomed-out floor, and you zoom in from there.
 box.style.touchAction = 'none';
 var pz = panzoom(img, { maxZoom: 30, minZoom: 1, bounds: true, boundsPadding: 0.05 });
 img.addEventListener('dblclick', function () { pz.moveTo(0, 0); pz.zoomAbs(0, 0, 1); });
 addFullscreenButton(box, function () { pz.moveTo(0, 0); pz.zoomAbs(0, 0, 1); });
 });
});
&lt;/script&gt;
&lt;h1 id="intro"&gt;Intro&lt;/h1&gt;
&lt;p&gt;The goal of this article is to solve one of the &amp;lsquo;hard&amp;rsquo; reverse engineering challenges from &lt;a href="https://dragonsec.si/en/dctf/2026/"&gt;2026 DCTF&lt;/a&gt; called &lt;a href="https://dctf.si/challenges#Camels%20and%20Dragons-27"&gt;&amp;lsquo;Camels and Dragons&amp;rsquo;&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>