Tersine Kod Mühendisliği

Başlatan Reverser, 03 Kasım 2014 - 20:34:00

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

7hr33l3t73r

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

ulupınar

Alıntı yapılan: Reverser - 03 Kasım 2014 - 20:34:00
Arkadaşlar merhaba, bu konuyu benim gibi reverse code enginnering hakkında kendini geliştirmek isteyenler için açtım. Planım şu, C programlama bilen arkadaşlar bir program yazacaklar ve kaynak kodunu paylaşmadan sadece derlenmiş .exe formatlı binary dosyayı paylaşacaklar bizde bu executable dosyaları analiz edip, C kodu haline geri çevirip burada paylaşacağız programı yazan kişi de orijinal kodunu paylaşacak ve nasıl bir iş çıkardığımızı göreceğiz.

Şimdi C kodlama bilen birinden bir program yazıp burada paylaşmasını istiyorum umarım yardım etmek isteyen biri çıkar :)

Tersine kod mühendisliği benim anladığım ve bildiğim kadarıyla ikilik koddan kaynak kodu elde etme amacını gütmez. Kaynak kodu bilinmeyen veya elde edilemeyen yazılımların yaptığı işi simüle etmek için kullanılan bir yöntemdir. Amaç benzer görevleri başaran eşdeğer bir yazılım üretmek olunca bunu birebir hangi kodlarla yapıldığı önemli değildir. Tersine kod mühendisliği bu konuda çok dar bir çerçevede ele alınmış. Tersine kod mühendisliğini merak edenler için farklı kaynaklardan bilgi almalarını tavsiye ederim.

Reverser

@ulupınar, konunun tamamını incelersen, hangi konuları ele aldığımızı, zamanla nerelere kaymış olduğumuzu görürsün. Konu ilk olarak "Reverse code engineering" adı altında paylaşıldı. Bu da demek oluyor ki, konumuzun ilk zamanlarda güttüğü amaç tersine kod mühendisliğiydi.

XFCE ROCKS !
Powered by Thunar & XFWM4



ulupınar

Alıntı yapılan: Reverser - 15 Eylül 2015 - 15:48:02
@ulupınar, konunun tamamını incelersen, hangi konuları ele aldığımızı, zamanla nerelere kaymış olduğumuzu görürsün. Konu ilk olarak "Reverse code engineering" adı altında paylaşıldı. Bu da demek oluyor ki, konumuzun ilk zamanlarda güttüğü amaç tersine kod mühendisliğiydi.

Demek istediğim konunun tersine kod mühendisliğiyle alakası yok, yapmak istediğiniz ile amacınız farklı oluyor bu durumda. Tersine kod mühendisliği iki şekilde yapılır. Birincisi kod zaten bellidir, derlenir çalıştırılır, istenen sonucu vermediği veya yetersiz kaldığı durumlar tespit edilerek var olan kaynak kodda gerekli değişiklikler yapılır, sonuca ulaşır. İkincisi kod elde yoktur, tersine kod mühendisliği ile eşdeğer yazılım kodu tekrar elde edilir.

Reverser


XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

Bu arada arkadaslar bir ricam olacak sizlerden.
Yani cozmeye calisan arkadaslardan.
Lutfen cozum adimlarinizi dosya olustup, ozelden atiniz.
1 hafta sonra aciklanacaktir.Katilan herkese kolayliklar dilerim.
Hediye vermek isterdim ama uzgunum veremiyorum. :)
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

@817c0d3r, çözüldü, anlatımı özelden attım.

XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

#432
Tebrikler @Reverser.
Ilk olarak cozen sizsiniz.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

İlerleyen saatlere doğru kendi çözüm yöntemimi açıklayan bir video hazırlayacağım.

XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

#434
Merhaba Arkadaslar;
Katilan herkese tesekkur ederim.
Kaptir da gelimizin(CTF) cozumunu aciklayalim. :)
Oncelikle verilen adrese girdigimizde  yazilimimiz hakkinda biraz  bilgi veriliyor ama yazilim nerede?
Buradan birsey anlamadik kaynak kodlarda bir ipucu var mi? diye bakiyoruz.
O da ne sag tik yapamiyoruz. :) (Kisayol ^U )
Curl ile kodlarimizi inceleyelim.Bakalim neler var.

$ curl http://817c0d3r.uboxi.com/crkm/
<html xmlns="http://www.w3.org/1999/xhtml">
<iframe width="0" scrolling="no" height="0" frameborder="0" vspace="0" hspace="0" marginheight="0" marginwidth="0" src="CRKM/"></iframe>
<style>td {background-color: #1f1f1f; font-family: Courier New; font-size:9pt; color:#33FF33;
border-color: #33FF33;border-width:1pt; border-style:solid; border-collapse:collapse;padding:0pt
................................................................................................

iframe satiri hemen dikkatimizi cekiyor.Diger satirlar da zaten birsey yok.
CRKM kaynagina ulasmaya calisiyor.
Bakalim.

$ curl http://817c0d3r.uboxi.com/crkm/CRKM/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="http://redirect.main-hosting.com/error404.php/12?domain=817c0d3r.uboxi.com">here</a>.</p>
</body></html>

Pardon. :)

$ curl http://817c0d3r.uboxi.com/CRKM/
LCKDd352e4c823fe6d20a88dbd10f26ea59e.bin#@2B4I
Ð
ß® ­ðý
ð­ð­ðߠ­ïïà¯ßþ­ðßß
ð­ðP
ð­ð
ß
ß­ð@­ð
ß

Bingo :)
Verilen adreste, GDB ile incelenen yazilimin data dosyasina ulastik.
Daha okunabilir bir cikti almak isteyelim ve  strings komutunu ekleyelim.

$ curl http://817c0d3r.uboxi.com/CRKM/ |strings

Ciktisi cok uzun,  dedikten sonra devam edelim. :)
Ciktiya bakinca kafamiz da simsekler cakti galiba :)
Hexdump araci ile yildirimi dusurelim o zaman. :)

$ curl http://817c0d3r.uboxi.com/CRKM/ |hexdump -C
00000000  4c 43 4b 44 01 00 00 00  64 33 35 32 65 34 63 38  |LCKD....d352e4c8|
00000010  32 33 66 65 36 64 32 30  61 38 38 64 62 64 31 30  |23fe6d20a88dbd10|
00000020  66 32 36 65 61 35 39 65  2e 62 69 6e ad 5a 8d 00  |f26ea59e.bin.Z..|
00000030  00 00 00 00 00 00 00 01  0a 98 7d f0 9a 87 d9 8a  |..........}.....|
00000040  7d 09 f8 a7 09 d8 70 a9  8d 7f 9a 87 df 9a df 87  |}.....p.........|
..............................................................................
..............................................................................
000002c0  00 00 00 00 00 00 00 0f  a0 df 00 00 00 01 6c 00  |..............l.|
000002d0  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
000002e0  02 00 03 00 01 00 00 00  b0 80 04 08 34 00 00 00  |............4...|
000002f0  a8 70 00 00 00 00 00 00  34 00 20 00 03 00 28 00  |.p......4. ...(.|
00000300  10 00 0f 00 01 00 00 00  00 00 00 00 00 80 04 08  |................|
00000310  00 80 04 08 7c 67 00 00  7c 67 00 00 05 00 00 00  |....|g..|g......|

..............................................................................
..............................................................................

ELF header gorunce anliyoruz ki,  calistirilabilir dosya.
Hex editor ile ELF header baslangicina kadar olan yerleri silmek yeterli.O zaman ne duruyoruz.
Tabi simdi hex editor gibi uzun islemden kacmak lazim. :)

$ curl http://817c0d3r.uboxi.com/CRKM/ |dd skip=90 bs=8 > CRKM.bin
$ file CRKM.bin
CRKM.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped
$ chmod +x CRKM.bin

Simdi  GDB altinta inceleyelim.

(gdb) > i fil
Symbols from "/home/wolf/CRKM.bin".
Local exec file:
`/home/wolf/CRKM.bin', file type elf32-i386.
Entry point: 0x80480b0
(gdb) > x/12iw 0x80480b0
   0x80480b0: xor    ebp,ebp
   0x80480b2: pop    esi
   0x80480b3: mov    ecx,esp
   0x80480b5: and    esp,0xfffffff0
   0x80480b8: push   eax
   0x80480b9: push   esp
   0x80480ba: push   edx
   0x80480bb: push   0x804d124
   0x80480c0: push   0x8048094
   0x80480c5: push   ecx
   0x80480c6: push   esi
   0x80480c7: push   0x8048190
(gdb) > x/16iw 0x8048190
   0x8048190: sub    esp,0xc
   0x8048193: mov    DWORD PTR [esp],0x804d140
   0x804819a: call   0x8048254
   0x804819f: lea    eax,[esp+0x8]
   0x80481a3: mov    DWORD PTR [esp+0x4],eax
   0x80481a7: mov    DWORD PTR [esp],0x804d149
   0x80481ae: call   0x8049044
   0x80481b3: cmp    DWORD PTR [esp+0x8],0x171717
   0x80481bb: jne    0x80481c6
   0x80481bd: mov    DWORD PTR [esp],0x804d15c
   0x80481c4: jmp    0x80481cd
   0x80481c6: mov    DWORD PTR [esp],0x804d14c
   0x80481cd: call   0x80481d8
   0x80481d2: xor    eax,eax
   0x80481d4: add    esp,0xc
   0x80481d7: ret
(gdb) > x/s 0x804d140
0x804d140: "Parola: "

Evet, bolgemiz burasiymis. :)

   0x80481b3: cmp    DWORD PTR [esp+0x8],0x171717; Girilen deger ile 0x171717'yi karsilastir.
   0x80481bb: jne    0x80481c6 ; Sartlar uygun degilse, Tekrar dene kismina yolla. Yok sartlar uygunsa Oyunu bitir.
(gdb) > x/s 0x804d14c
0x804d14c: "Tekrar Deneyin!"
(gdb) > x/s 0x804d15c
0x804d15c: "Oyun Biter."
(gdb) > b *0x80481b3
Note: breakpoint 1 also set at pc 0x80481b3.
Breakpoint 1 at 0x80481b3
(gdb) > r
Starting program: /home/wolf/CRKM.bin
Parola: 11559977
Breakpoint 1, 0x080481b3 in ?? ()
(gdb) > p/d 0x171717
$1 = 1513239
(gdb) > x/d $esp+0x8
0xffffc668: 11559977

Game over.

$ ./CRKM.bin
Parola: 1513239
Oyun Biter.

Not=> Yarismayi erken bitirdigim icin ozur dilerim.
Bazi sorunlar yuzunden bitirmek zorunda kaldim.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

betseg

Ben sitenin kodlarını incelemek için adres çubuğunun başına  view-source:  ekledim, sayılır mı? :D

7hr33l3t73r

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

Vidyo geldi sıcak sıcak, kusura bakmayacaksınız ama zira bu saatte bu kadar oluyor. :D
[1] http://www.dosya.tc/server3/zy8npz/reverse_me_tut.zip.html

XFCE ROCKS !
Powered by Thunar & XFWM4



oasln

#438
Öldünüz mü beyler. Bir tane de ben hazırladım: http://s6.dosya.tc/server3/wab37d/sifreyi_bul_01.zip.html

Çok basit değildir umarım :)

Edit: en kisa sifreyi bulan kazanir
--

Promethium

Alıntı yapılan: Reverser - 18 Eylül 2015 - 01:58:01
Vidyo geldi sıcak sıcak, kusura bakmayacaksınız ama zira bu saatte bu kadar oluyor. :D
[1] http://www.dosya.tc/server3/zy8npz/reverse_me_tut.zip.html

Tarayıcıda uygulamalarım yer imini kaldırmak için üstüne sağ tıklayıp kaldırabilirsiniz.. :D
  • Üretmeden tüketen millet, ezilmeye mahkum millettir.

7hr33l3t73r

#440
Ben vaktim varken biraz bakindim yazilima da, asagidaki gibi sifreler buldum.Ornek olmasi acisindan.
Cozen olmamis herhalde. yazilimi.
Hazir yazmisken,  ipucu da vereyim.
Sakin turkce harf kullanmayin. Direk cok buyuksun abi moduna giriyor yoksa .:)

Sifreyi gir:
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
Buldun!
**********************************
Sifreyi gir:
AAAAAAAAA1111111111111111111111111
Buldun!

**********************************
Sifreyi gir:
HHHHHHH1111111111
Buldun!

Siz artik cogaltirsiniz. :)
Hadi bir tane de daha da kisa sifresini  yazayim.

Sifreyi gir:
qqHH
Buldun!
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

oasln

Tebrikler 817c0d3r. Çok da zor değildi aslında :) Sözde biraz daha zormuş gibi yazmıştım da yaptığım bir mantık hatası nedeniyle neredeyse sonsuz sayıda geçerli şifre var :) Program şuydu:

use std::io;
use std::cmp::Ordering;

fn main() {
    println!("Sifreyi gir: ");
    let mut guess = String::new();
    io::stdin().read_line(&mut guess).unwrap();
    let mut acc = 0;
    for &b in guess.trim().as_bytes() {
        let b = (b as u32) - 48;
        match b {
            2 => acc /= b,
            5 => acc *= b,
            _ => acc += b
        }
    }

    match acc.cmp(&178) {
        Ordering::Less    => println!("Çok küçük!"),
        Ordering::Greater => println!("Çok büyük!"),
        Ordering::Equal   => println!("Buldun!"),
    }

}


Bir de şifre üretici yazdım, 3 karakterli geçerli (bazı) şifreler: https://ideone.com/cMT9pd

Sadece match ve integrated testleri kullanmış olsam da rust'a aşık oldum.
--

7hr33l3t73r

Ben aslinda isteksiz olarak incelemeye aldim(zaman sorunu) ama. Sonra rust dilinde oldugunu gorunce sasirdim.Ilginc bir inceleme olacak dedim(ilgim artti birden) ama.Cok basit cikti. :)

$ ./sifreyi_bul_01.zip
Sifreyi gir:
-1
thread '<main>' panicked at 'arithmetic operation overflowed', sifreyi_bul_01.rs:17
$ ldd sifreyi_bul_01.zip
linux-vdso.so.1 (0x00007ffefa555000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f5630b16000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f56308f9000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f56306f1000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f56304db000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f5630137000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5630d1a000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f562fe39000)

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

oasln

Neyse artık bir dahaki sefere daha iyisini denerim :p
--

7hr33l3t73r

Merhaba arkadaslar,
Konuya hareketlilik gelmesi adina, crackme paylasiyorum.
Vakti olan arkadaslara biraz meskale olmasi adina.


$ ./crackme2
UYARI: Icinden gecicem senin derken, gereksiz bolumlere takilmayin! :)
Kullanici: wolf
Parola   :

Cozmeye calisanlara kolay gelsin diyerek.Yontemlerinizi cekinmeden aciklayabilirsiniz. :)
Iyi sanslar.

http://s3.dosya.tc/server5/9c2vvt/crackme2.zip.html
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

7hr33l3t73r

#445
Sanirim ipucu vermek lazim.
Verilen 2 grafik, donen dolabi anlatmakta :)
https://ptpb.pw/-YGa
https://ptpb.pw/eEqD

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

7hr33l3t73r

#446
Ilk programin sifresini paylasayim.Cozem olmazsa ikincisinde cozum yontemini paylasarim.
1.programin sifresi
1. karakter= w
2. karakter= Herhangi bir karakter olabilir.
3. karakter= o
4. karakter= Herhangi bir karakter olabilir.
5. karakter= l
6. karakter= Herhangi bir karakter olabilir.
7. karakter= f
Sonuc:

UYARI: Icinden gecerken, gereksiz bolumlere takilmayin! :)
Kullanici: wolf
Parola   : w0o1lFf
Bravoo dogru sifre :)
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

neynefes


7hr33l3t73r

@neynefes, evet cok sessiz kaldi bence de :) ama sorun degil.Sonucta zaman meselesi.
Bu arada, 2'inci yazilimda ufak bir kodlama hatasi yapmisim. :)
O yuzden yeni yazilimi paylasiyorum.
wget https://ptpb.pw/Wpfq -O CrackmeGUI
ama merak edenler yada indirenler icin cozumu paylasayim. Hemde bir ipucu olsun. Biraz zorluyorum herhalde:)
sed 's/\x38\xc1/\x38\xc0/' CrackmeGUI > CrackmeGUI_OK
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser


XFCE ROCKS !
Powered by Thunar & XFWM4