2009. augusztus 4., kedd

Titkosítás b64-el

Íme a "szegény ember" titkosítása :

Veszünk egy titkosítandó állományt (lehet szöveg vagy bináris is)
Elkódoljuk base64 kódolással. Majd az így kapott szöveget tetszőleges számú transzláción engedjük át.
A transzlációhoz tetszőleges számú karakter használhatunk.

Kicserélhetjük az összes karaktert, de csak egy-két karaktert is lecserélhetünk a szövegben.
Az 1-2 csere binárisoknál működőképes, mert így a fájl eredeti formája megmarad (pl egy exe-t lehet így "titkosítani" elváltoztatni úgy, hogy más ne tudja lefuttatni. hiába próbálja meg disassemblálni. Mert szinte lehetetlen "kitalálni", hogy mik a "hibás bájtok" és mit kéne a helyére tenni...
A teljes karakterek vagy karaktersorozatok cseréje pedig szövegeknél működőképes.

perl-ben a tr/// parancs kiválóan alkalmas erre :

while ($line = ) {
$line =~ tr/AFSDHGLJQKTRWEIUYMZNCBVqlkwmenrothygafsdbzvxc/FADSGHJLKQRTIEYUZMCNVBlqwkemrntoyhagsfbbvzcx/;
print $line;
}


A "Hello World"-ből b64 kódolás után ez lesz :

IkhlbGxvIFdvcmxkIiANCg==

A fenti program konverziója után ez :

YkhwvHxcYAbcxmxkYiFNVg==


Ezt simán b64-el dekódolva már bináris outputot kapunk.
Most egy sima ROT13 eltolással (/A-Za-z/N-ZA-Mn-za-m/) ezt kapjuk :


LxujiUkpLNopkzkxLvSAIt==


Ezt az előző transzláción átengedve ezt kapjuk :

JxujiUkpJNopkzkxJcDFYy==


Ez csak 3 sima lépés volt csak egy "kulcs" van a második az egy sima eltolás (persze lehet azt is tologatni ide-oda) A visszafejtéshez csak az egy kulcs kell ami a transzlációban volt.
Visszaállításnkor a tr-ben szerepló mezőket kell csak kicserélni pl :

while ($line = ) {
$line =~ tr/FADSGHJLKQRTIEYUZMCNVBlqwkemrntoyhagsfbbvzcx/AFSDHGLJQKTRWEIUYMZNCBVqlkwmenrothygafsdbzvxc/;
print $line;
}


Persze lehet csinálni tetszőleges számú ilyen transzlációt amiben a cserék számát lehet variálni a teljes cserétől a néhány karakter cseréjéig. Van egy előre előállított ilyen tábla, csak azt kell megjegyezni, hogy mi a PIN kód (azaz, hogy milyen sorrendben vannak az eltolások. visszafejtésnél a pin kódhoz képest visszafelé alkalmazzuk az egyes transzlációs láncokat. 10 ilyen transzlációs sor elfér egy kis papíron. Úgyhogy, ha minden törlődik, papírból még visszafejthető a dolog. Persze, ha valaki ellopja a papírt, akkor azzal tud variálni, de ha nincs meg valakinek a kulcs, akkor eltart egy ideig, míg kisilabizálja, hogy mi a túró volt az eredeti állomány.

4 megjegyzés:

  1. Már rég foglalkoztam ilyesmivel, de az rémlik, hogy ha csak az egyes karaktereket változtatod meg - eltolással - a rejtett üzenet továbbra is eredményesen támadható a statisztikai eljárásokkal.

    Ha bitszinten lennének összekavarva a dolgok, az növelné a hatékonyságot. Ettől függetlenül a módszer jó, nem kell hozzá semmilyen speciális alkalmazás.

    VálaszTörlés
  2. Próbáld ki egy exe programmal. b64 kódolod, kicserélsz 1-2 karaktert, visszakódolod és elindítod. Ki fog írni valami szabvány hibaüzenetet. Ha meg is szerzi valaki, elkezdi majd nézegetni, hogy moért nem fut le. Hol van a hiányzó dll, meg ilyen hülyeségek. És a célod már el is érted. Az utolsó dolog lesz, hogy elkezdi b64-be kódolni és úgy cserélgetni a karaktereket. De úgy se fog egyhamar rájönni ;-)

    Egyszóval ez erre való: elterelésre. Csak te tudod, hogy mit kell a fájllal csinálni, hogy működjön. Még egy Forensic ügynök is inkább a disassemblálással kezdené -> úgy meg nem igen sikerülhet szegénynek :-) Ellopás ellen, meg ha lefoglalják a gépedet ez nagyon jó. Nézegethetik, hogy mi van ott úgyse jönnek rá, hogy mit kell vele csinálni.

    De ha te vissza tudod fejteni disassemblálással amit így elbarmoltál, akkor meséld el, hogy hogy csináltad, mert érdekelne.

    Ez is steganográfia ;-) csak nem kell hozzá semmi plusz progi. Az a lényeg, hogy tök másnak látszódjon a dolog mint ami :-)

    VálaszTörlés
  3. Érdekes koncepció. Szimpla szöveg esetén szerintem is nehezen elképzelhető, de binárisnál tényleg működhet.

    VálaszTörlés
  4. Szöveg rejtése binárisba : Írsz egy programot (c-be, akármibe) amiben definiálsz egy jó nagy adattáblát egy tömböt, amin műveleteket hajtasz végre (de mondjuk kiíratni nem iratod ki a tartalmát)A tömböt fel is töltöd induló adatokkal Lefordítod a kódot. Az exe-ben egy fix helyen ott lesz az adat-stack. Ide simán beteszed a szöveg hexa-ba kódolt verzióját.
    Ha jól van megírva a program (pl bit műveleteket végez a tömbön) akkor akármit beteszel oda nem fog kiakadni. Lefut azt kész.
    Te viszont innen szépen ki tudod venni a hexa kódot, azt meg egy mozdulattal visszaalakítöd szöveggé. Erre azért nehéz rájönni, mert eszébe nem jut senkinek, hogy van ott valami ami nem oda való, hisz a program hibátlanul fog lefutni a belerakött szöveg után is :-)

    VálaszTörlés

Megjegyzés: Megjegyzéseket csak a blog tagjai írhatnak a blogba.