ROT13 Converter ve ROT13 Şifreleme Yöntemi

Kategori Assembly, Belgeler
16.01.2010
14428 Okunma

ROT13 (Rotate13) forumlarda ve web proxy sayfalarında sıkça görülen ayrıca, çeşitli puzzle, riddle, bulmaca türlerinde karşımıza çıkan bir şifreleme türüdür. Daha önce dergilerimizde kriptografiye giriş yapmış ancak çeşitli sebeplerden devamını getirememiştim. Şimdi kaldığım yerden yavaş yavaş devam etmek istiyorum. Öncelikle ROT13 nedir onu bir öğrenelim, yazının sonundaki ROT13 Converter ve kaynak kodları ile de hem kriptografi bilgimizi hem de assembly bilgimizi artıralım.

ROT13 Nasıl Çalışır?
ROT13 (Rotate13) yer değiştirme yöntemi kullanan bir Caesar(Sezar) şifreleme türüdür. Mantık olarak ingiliz alfabesindeki bir harfin 13 harf sonraki harf ile eşleşmesidir. Harflerin eşleşme tablosunu resimden göre bilirsiniz.

ROT13 Eşleştirme tablosu

Resimde de görüldüğü gibi bluedevil = oyhrqrivy olarak şifrelenir.

ROT13 Converter (Encoder/Decoder)
Assembly çalışmalarıma bir yenisini de küçük bir ROT13 Dönüştürücüsü ekleyerek devam etmek istiyorum. Mantık olarak ingilizce alfabesindeki bir harfin 13 sonraki harf ile yer değiştirmesi ile oluşan ROT13 şifreleme yöntemini assembly dilinde şöyle kullandım. Girilen metnin her bir karakterini bir döngüye soktum. Bu döngü ilk önce o karakterin bir harf mi yoksa faklı bir karakter mi olduğunu karşılaştırıyor. Eğer harf değilse doğrudan ekrana onu yazıyor eğer bu bir harf ise a-m ile A-M arasında olanların hex değerine “13” ekleyip yazıdırıyor, eğer n-z ya da N-Z arasında ise 13 çıkartıp ekrana yazdırıyor.

Not: Bu küçük programcığı yazarken arkadaşlarım öncelikle bir ASCII tablosunu incelemelisiniz:

[dm]91[/dm]

Comments of this post

infinie

infinie
19 January 2010

Merhabalar, aşağıda DOSta NASM ile kullanılarak oluşturulan COM dosyasının çalıştırılmasıyla kullanılabilen eskiden yazdığım bir ROT13 kaynağı vardır.

[bits 16]
org 100h
[SECTION .text]
mov si,inFinie
mov di,oStr
xor cx,cx
call Rot13
call afterROT

mov di,sStr
kbrd:
mov ah, 0x10 ;get character
int 0x16
cmp al,0x0d
je enter_key
stosb
call putch
jmp kbrd

enter_key:
mov al,0x0d
call putch
mov al,0x0a
call putch

xor al,al ;append 0x00
stosb

mov si,sStr
mov di,oStr
xor cx,cx ;reset counter
xor ax,ax
call Rot13
call afterROT
int 0x20

Rot13:
inc cx
lodsb
or al,al
jz exit
fir:
cmp al,’A’
jl noop
cmp al,’Z’
jle rangeOK

cmp al,’a’
jl noop
cmp al,’z’

rangeOK:
sub al,13
cmp al,’a’
jge noop
add al,26

noop:
stosb
jmp Rot13

exit:
ret

afterROT:
xor al,al
stosb
sub di,cx
mov si,di
call print
ret

print: ;at si
lodsb
or al,al
jz .bit
call putch
jmp print
.bit:
ret

putch: ;in al
xor bh,bh
mov bl,7
mov ah,0x0E
int 0x10
ret

[SECTION .data]
inFinie db “EBG13 pbqre ol vaSvavr”,0x0d,0x0a,0
[SECTION .bss]
sStr resb 0x1000
oStr resb 0x1000

admin

admin
20 January 2010

İşte bu sitede görmek istediğim yorumlar. Çok çok teşekkürler!!

KUTALMIS

KUTALMIS
21 January 2010

Bir kod da ben vereyim o zaman :)
Derleme : nasm kod.asm -o kod.com
;———————————
org 0x100

jmp basla

_yazi dd 0x0
_i dd 0x0
_j dd 0x0

LC0 db “BLUEDEVIL”,0xD,0xA, 0
LC1 db “KUTALMIS”,0xD ,0xA,0

basla:

mov si,LC0
call yazi_yaz

mov dword[_yazi],LC0
mov dword[_j],9
call _cevir

mov si,LC0
call yazi_yaz
;——————————–
mov si,LC1
call yazi_yaz

mov dword[_yazi],LC1
mov dword[_j],8
call _cevir

mov si,LC1
call yazi_yaz
;——————————–
mov ah,0x0
int 0x16
;——————————–

_cevir:
mov dword [_i], 0
L7:
mov ecx, dword [_i]
mov edx, dword [_yazi]
movzx eax, byte [ecx+edx]
cmp al, 78
jle L5
sub al, 13
jmp L10
L5:
add al, 13
L10:
mov byte [ecx+edx], al
mov eax, dword [_i]
inc eax
mov dword [_i], eax
cmp eax, [_j]
jne L7
ret
;——————————–

yazi_yaz:
mov ah,0xe
.tekrar_yaz:
mov al,byte[si]
int 0x10

inc si
cmp byte [si],0x0
jne .tekrar_yaz
ret

KUTALMIS

KUTALMIS
21 January 2010

Bu arada aklıma gelmişken yazayım, bir haftadır bir boot loader üzerinde çalışıyordum, iki gün önce bitti, yazısını da yazdıktan sonra sana yollasam dergide ya da burda yayınlar mısın?

Ne iş yaptığını kısaca anlatacak olursam, 3 dosyadan oluşuyor. boot, pro.com, ayarlar.ini bu üç dosyadan boot, başlangıç sektörüne yazılacak, bunlar boot edilecek medyaya yazıldıktan sonra, açılışta boot, pro.com u belleğe yüklüyor, o da ayarlar.ini yi belleğe yüklüyor ve ayarlar.ini içinde yazan tüm dosya isimlerini medyadan buluyor, hepsini yanında yazan adreslerine yüklüyor, daha sonra ayarlar dosyasındaki atlanması istenen adrese atlıyor.

Anlayacağın baya gelişmiş bir loader (grub değil tabi :) )
Aslında kendi sistemimi boot etmek için yazdım ama genel amaçlı bir kod sonuçta, birilerinin işine yarayabilir, özellikle sistem programcılarının.

İyi çalışmalar blue görüşmek üzere : )

KUTALMIS

KUTALMIS
21 January 2010

Flood gibi oldu ama : ) blog kodları bozuyor, o nedenle buradan kopyalanan direkt çalışmıyor, farkettiklerim “” ve 0x deki x ler, onları düzeltince çalışıyor, bilgine.

admin

admin
22 January 2010

Kutalmış çok isterim. Yazıyı bitirir bitirmez yolla hemen yayınlayalım. Bu arada Buradan değil de e-posta kullanalım mesajlaşmak için ;)