← Nieuwste papers
💻 computer science

Erlang Binary and Source Code Obfuscation

Dit artikel onderzoekt effectieve obfuscatietechnieken voor Erlang-programma's op verschillende niveaus, van broncode tot bytecode, door gebruik te maken van de representatiekloof tussen de hoge-level semantiek en het lagere uitvoeringsmodel om reverse engineering te bemoeilijken zonder de functionaliteit te schaden.

Oorspronkelijke auteurs: Gregory Morse, Tamás Kozsik

Gepubliceerd 2026-04-16
📖 5 min leestijd🧠 Diepgaand

Oorspronkelijke auteurs: Gregory Morse, Tamás Kozsik

Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer

Stel je voor dat Erlang-code een heel strakke, ordelijke fabriek is. Alles wat er gebeurt, wordt zorgvuldig geregistreerd, gecontroleerd en uitgevoerd volgens een strikt boekje met regels. De mensen die deze fabriek bouwen (de programmeurs) en de mensen die erin werken (de computer) spreken dezelfde taal: het BEAM-systeem.

Deze paper, geschreven door Gregory Morse en Tamás Kozsik, gaat over hoe je die fabriek kunt "verwarren" zonder dat hij stopt met werken. Het is een handleiding voor obfuscatie: het kunstmatig moeilijk maken om te snappen hoe de machine precies werkt, zodat hackers of concurrenten het niet zomaar kunnen kopiëren of aanpassen.

Hier is de uitleg in gewone taal, met een paar creatieve vergelijkingen:

1. De Vertaal-machine (Van Broncode tot Machinecode)

Normaal gesproken vertaalt de Erlang-fabriek je code stap voor stap:

  • Broncode: Het recept dat je schrijft (in mensentaal).
  • AST: Een schets van het recept (een logische structuur).
  • BEAM Assembly: De instructies voor de machines (een beetje zoals een bouwpakket).
  • BEAM Bytecode: Het eindproduct dat de machine eet.

De auteurs zeggen: "Wacht even, er zitten gaten in deze vertaling." Tussen die stappen zitten kleine verschillen in hoe de computer denkt dat iets werkt versus hoe het echt werkt. Obfuscatie is het spelen met die gaten. Het is alsof je een recept schrijft dat er normaal uitziet, maar als de kok (de compiler) het leest, doet hij iets heel anders dan jij verwacht, terwijl het gerecht er toch hetzelfde uitziet.

2. De "Valse" Regels (Register-gebruik)

In de fabriek zijn er speciale planken (registers) waar tijdelijke spullen op worden gelegd. De fabrieksregels zeggen: "Alles wat je teruggeeft, moet op plank 0 liggen."

  • De truc: De auteurs tonen aan dat je soms plank 1 of 2 kunt gebruiken. De computer (de emulator) doet het misschien wel, maar de controleur (de validator) die de code checkt voordat hij het laat draaien, roept direct: "Fout! Niet op plank 0!"
  • De oplossing: Je kunt de code "opvullen" met nep-bewegingen die eruitzien alsof je aan de regels voldoet, maar in werkelijkheid doe je iets anders. Het is alsof je een valse paspoortfoto plakt op een identiteitskaart: voor de controleur ziet het er goed uit, maar de portier (de machine) accepteert het toch.

3. De Lijst met Brieven (De receive-lus)

Erlang-processen communiceren via een postvakje (mailbox). Normaal gesproken is een lus (een herhaling) heel simpel: "Doe dit, doe dat, ga terug naar begin."

  • De truc: De auteurs laten zien dat je een lus kunt bouwen door te wachten op brieven in je postvakje. Je stuurt een brief naar jezelf, wacht tot hij er is, en gebruikt die om de volgende stap te zetten.
  • Het effect: Voor een decompiler (een programmeur die probeert de code terug te vertalen) is dit een nachtmerrie. Het ziet eruit alsof de code stopt en wacht, terwijl het eigenlijk een oneindige loop is. Het is alsof je een rondje lopen in een park simuleert door telkens een brief te sturen naar je buurman, die je weer een brief terugstuurt. Het lijkt geen loop, maar het is er één.

4. De Onzichtbare Muur (Try/Catch en Controle)

Normaal gesproken zijn "probeer-dit" en "als het misgaat, doe-dan-dit" blokken heel duidelijk.

  • De truc: Je kunt deze blokken zo door elkaar halen dat ze meerdere ingangen en uitgangen hebben. Het is alsof je in een huis een gang bouwt die via de zolder, de kelder en de achterdeur naar dezelfde kamer leidt.
  • Het probleem: Een decompiler probeert de "logische structuur" te vinden (zoals een plattegrond). Maar als de plattegrond vol staat met verborgen deurtjes en trappen die nergens naartoe lijken te leiden, raakt de decompiler in de war en kan hij de code niet meer lezen.

5. De "Kleurveranderende" Doos (Mutability)

Erlang is een taal waar dingen onveranderlijk zijn. Als je een doos met appels hebt, kun je er geen appel uit halen en een peer in doen. Je moet een nieuwe doos maken.

  • De truc: De auteurs tonen aan dat je op het laagste niveau (BEAM) toch een doos kunt "hacken" en er een peer in kunt doen zonder een nieuwe doos te maken. Dit is veel sneller, maar het is verboden in de normale taal.
  • Het gevaar: Als iemand deze code reverse-engineert en weer in normale Erlang vertaalt, zal diegene denken: "Oh, hij maakt een nieuwe doos." De code werkt dan nog steeds, maar is ontzettend traag. Het is alsof je een raceauto hebt, maar de decompiler denkt dat het een fiets is. Hij bouwt de fiets na, en die is veel te langzaam om de race te winnen.

6. De Spiegelfabriek (Zelf-modificerende code)

Erlang staat bekend om "hot-swapping": je kunt code updaten terwijl de fabriek draait.

  • De truc: Je kunt een programma schrijven dat zichzelf leest, verandert, en zichzelf opnieuw laadt terwijl het draait. Het is een programma dat zichzelf herschrijft.
  • Het resultaat: Als je probeert de code te analyseren, kijk je naar een versie die al niet meer bestaat. Het is alsof je een boek probeert te lezen, maar elke keer als je een pagina omdraait, verandert de tekst op de vorige pagina.

De Grote Les

De kernboodschap van dit papier is: Vertrouw niet op wat je ziet.

De meeste tools die code proberen te lezen (decompileren), kijken naar de "hoofdlijnen" en de logische structuur. Maar de echte kracht (en het gevaar) zit in de gaten tussen de regels.

  • De computer denkt: "Dit is een lus."
  • De validator denkt: "Dit is een wacht-actie."
  • De obfuscator weet: "Het is allebei, en ik kan het gebruiken om je te verwarren."

Het is een strijd tussen wat de tools denken dat er gebeurt, en wat de machine echt toestaat. De auteurs laten zien dat je Erlang-code kunt veranderen in een raadsel dat voor de computer werkt, maar voor de mens (of de software die de mens schrijft) onleesbaar blijft.

Verdrinkt u in papers in uw vakgebied?

Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.

Probeer Digest →