ethical.blue Magazine

// Cybersecurity clarified.

Mowa szesnastkowa (ang. hex speech)

13.04.2022   Dawid Farbaniec
...

Słowem wstępu

Szesnastkowy system liczbowy (nazywany też heksadecymalnym) do zapisu liczb korzysta z cyfr od 0 do 9 oraz liter od A do F. Razem jest to szesnaście znaków. Nie wiem kto, ale ktoś był tak genialny, że wymyślił by z tego zbioru znaków tworzyć słowa. Niektórzy czytelnicy może spotkali w kodzie albo gdzieś indziej zapis np. 0xDEADBEEF, 0xDEADC0DE, 0x00000BAD czy inne. Przedstawione frazy to wartości liczbowe zapisane w systemie szesnastkowym (nazywanym też w skrócie hex). Mimo, że są to liczby to na pierwszy rzut oka da się tam dopatrzeć słów z języka angielskiego. Np. DEADC0DE » dead code » martwy kod. Czy też: DEADBEEF » dead beef » martwa wołowina. Jeśli chodzi o użycie tych wartości to oprócz tego, że fajnie wyglądają, są używane do oznaczania różnych miejsc w kodzie. Taka wartość na pewno bardzo szybko się rzuci w oczy np. analizując program w debuggerze i obserwując wartości rejestrów procesora. Daje to wyraźny sygnał programiście/badaczowi.

Generator słów w C#.NET

Zastanawiając się jakie ciekawe słowa można wymyślić w mowie heksadecymalnej (ang. hex speech) wpadł mi do głowy pomysł, aby napisać generator możliwych słów.
// See https://aka.ms/new-console-template for more information

string inputPath = @"C:\Users\x\Desktop\hex-speech\wordlist.txt";
string outputPath = @"C:\Users\x\Desktop\hex-speech\zz.txt";

var lines = File.ReadAllLines(inputPath).ToList();
var filtered = new List<string>();

char[] validChars = new char[]
{
    'a', 'b', 'c', 'd', 'e', 'f', 'o', 'i', 't'
};

Dictionary<char, char> replaceChars = new ()
{
    { 'o' , '0'}, { 'i' , '1'}, { 't' , '7'}, { 's', '5' }
};

foreach (var line in lines)
{
    foreach (var ch in line.ToLower())
    {
        if (validChars.Contains(ch) == false)
            goto _skipline;
    }
    string formattedline = line;

    foreach (var rch in replaceChars.Keys)
    {
        formattedline = formattedline.Replace(rch, replaceChars[rch]);
    }

    filtered.Add("0x" + formattedline.ToUpper());
_skipline:
    continue;
}

File.WriteAllLines(outputPath, filtered);

Trochę wybranych słów

Powyższy program wygenerował ok. 300 słów. Oczywiście zależy to od użytego słownika i konfiguracji programu.

Najbardziej podobają mi się poniższe słowa i pewnie będę je stosował. 😁

0xAC1D – Acid (pol. kwas)
0xADD – Add (pol. dodawanie)
0xADD1C7ED – Addicted (pol. uzależniony)
0xAFFEC7ED – Affected (pol. dotknięty, zajęty np. affected terrain)
0xBAD – Bad (pol. zły)
0xBA0BAB – Baobab (pol. to chyba takie drzewo?)
0xBEEF – Beef (pol. wołowina)
0xB0B – Bob (pol. takie imię)
0xCAFE – Cafe (pol. kawiarnia)
0xC0C0A – Cocoa (pol. kokos)
0xC0DE – Code (pol. kod)
0xC0FFEE – Coffee (pol. kawa)
0xDEAD – Dead (pol. martwy)
0xDEAF – Deaf (pol. głuchy)
0xDEC0DE – Decode (pol. rozkodować)
0xDEFACED – Defaced (pol. oszpecony)
0xD1ABE71C – Diabetic (pol. cukrzycowy, diabetyk)
0xF00D – Food (pol. jedzenie)
0x1DEA – Idea (pol. pomysł)
0x70BACC0 – Tobacco (pol. tytoń)
0x70FFEE – Toffee (pol. tofi)
Dziękuję za czas poświęcony na przeczytanie tego wpisu.

Wykaz literatury

//old archives