Tersine Kod Mühendisliği

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

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Reverser

yine geç kalmışım.... hocam keşke birini çevirseydiniz....

XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

Ben sizi goremeyince ikisini de aradan cikartayim dedim :)
crackme var.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

#177
üstünde uğraşıyorum :)

Edit:

@84d80y5, tamamen reverse etmeyi başardım iki adet şifre var biri "istanbul" diğeri "1453"


//Reversed source code - Reverser

#include <stdio.h>
#include <stdlib.h>

int pass_control (char *unk_0);

//0x080484fd
int main(int argc, char *argv[])
{

if(argc <= 1 )
{
printf("Kullanim %s <parola>\n",argv[0]);
}
else
{
if (pass_control(argv[1]) == 0)
{
printf("\nGiris Basarili");
}
else
{
    printf("\nGiris basarisiz");
}

}
return 0;
}

//0x0804849b
int pass_control (char *unk_0)
{

if(strcmp(unk_0, "1453") == 0)
{
return 0;
}
else if (strcmp(unk_0, "istanbul") == 0)
{
return 0;
}
else
{
return 1;
}
}


XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

Dogru sifreler.
BIrde su var.



0804849b <pass_control>:
.....
80484ef: 75 07                jne    80484f8 <pass_control+0x5d>
.....

parola kontrolunu push edersek iki kontrolu de asmis oluruz.
Gerci  75 'i 74 yapark da asabilirzi ama iki kontrolude degistirmemiz gerekir.
en kestirme yolu  75'i 6a yapark cozmek.
Birde icerisinde buffer  var ama o daha ileri ki zamanlarda. Suan kafa karistirmaktan baska biseye yaramaz.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

evet buffer'ı farkettim ilk etapta unk_0 pass_controle gönderiliyor ardından strcpy(buffer,unk_0) ile bufferlanıyor ardından strcmp işlemi buffer üzerinden yapılıyor ama gereksiz olduğunu düşündüğümden çevirmedim.

bu de bufferlı hali.


//Reversed source code - Reverser

#include <stdio.h>
#include <stdlib.h>

int pass_control (char *unk_0);

//0x080484fd
int main(int argc, char *argv[])
{

if(argc <= 1 )
{
printf("Kullanim %s <parola>\n",argv[0]);
}
else
{
if (pass_control(argv[1]) == 0)
{
printf("\nGiris Basarili");
}
else
{
    printf("\nGiris basarisiz");
}

}
return 0;
}

//0x0804849b
int pass_control (char *unk_0)
{

     char buffer[256];
strcpy(buffer,unk_0);

if(strcmp(buffer, "1453") == 0)
{
return 0;
}
else if (strcmp(buffer, "istanbul") == 0)
{
return 0;
}
else
{
return 1;
}
}



XFCE ROCKS !
Powered by Thunar & XFWM4



-DıLgEş-

Ben şu şifreyi nasıl bulduğunuzu anlamadım. Yarın 5-6 tane paylaşacağım.
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

Reverser

@nurullahisrgan, string araması ile görebilirsiniz aşağıdaki şekilde.
strings crackme_game
ya da
disas pass_control
x/s 0x8048605
x/s 0x8048600
şeklinde görebilirsiniz.

Bir tane paylaşımda ben yapayım ama bu sefer ki biraz daha farklı olacak.

Öyle bir yöntem uygulayın ki, şifre kontrol mekanizmasını değiştirmeden ya da doğru şifreyi girmeden koruma aşılabilsin. (yani şifre yanlış olsa bile, koruma aşılmış olmalı. Unutmayın assembly edit yok!)
şu şekilde olmalı:



indirme bağlantısı: http://s5.dosya.tc/server/mFAVdb/pwn_it.zip.html



XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

#182
@Reverser sifrenin 16 karakter olmasi yeterli.fazlasi puff  :)
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

@84d80y5, aynen öyle hocam bir önceki örnekte strcpy(); fonksiyonu kullanınca aklıma buffer overflow geldi :) peki 16 karakteri aşarsak ne olur ? Mesela 35 adet A karakteri girsek ?


Starting program: /home/reverser/Masaüstü/pwn_it

Sifreyi girin :
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Sifre yanlis.

Tebrikler! Koruma asildi.


Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()


ebp            0x41414141 0x41414141

0x41 -> 'A'

Bu durumda base pointerımız overwritten olmuş oldu :) Aslında buffer overflow exploting ile ilgilide bilgi verebiliriz ilerleyen zamanlarda ama şimdilik kafa karıştırmayalım.


XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

#184
Buffer icin ben hem video hemde anlatim hazirlamistim. Mantigi anlamak isteyenler icin video adresi calismiyor ama anlatim yerinde. :)Kardesimin hesabindan ama artik tek hesap kullaniyoruz ortak. :)
Onceki ornekte 29 karakterli bir sifre yeterliydi :)
Soyle giris yapabilirdiniz?

$ echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAA|xargs ./crackme_game
Giris Basarili
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

evet farketmiştim yukarıda belirttiğim gibi strcpy(); fonksiyonunu görünce direkt aklıma buffer overflow geldi. :)

XFCE ROCKS !
Powered by Thunar & XFWM4



-DıLgEş-

Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

Reverser

#187
4-) sifre.zip


//Reversed source code - Reverser
//file: sifre x32

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
int inpt_0;
int pw_0 = 852460; //signed int
int pw_1 = 951753; //signed int
printf("Sifreyi giriniz: ");

scanf("%d",&inpt_0);

if(inpt_0 != pw_0 && inpt_0 != pw_1)
{
printf("\nSifre yanlis...\n");
}
else
{
printf("\nSifre dogru...\n");
}
return 0;
}


1-)string.zip


//Reversed source code - Reverser
//file: string x32

#include<stdio.h>
#include<string.h>

#define MAX 256

int main(int argc, char *argv[])
{
   char kelime[MAX], temp;
   char temp_buffer[MAX];
   int i, j = 0;

   printf("Kelime giriniz: \n");
   gets(kelime);
   
   sprintf(temp_buffer,kelime);
   
   i = 0;
   j = strlen(kelime) - 1;

   while (i < j) {
      temp = kelime[i];
      kelime[i] = kelime[j];
      kelime[j] = temp;
      i++;
      j--;
   }

   printf("%s Tersi: %s\n", temp_buffer,kelime);
   return 0;
}


5-) asal.zip


//Reversed source code - Reverser
//file: asal x32

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int a = 0;
int b, i, j, flag;
    int counter = 0;

    printf("0-x arasindaki asal sayilari bulan, x giriniz: \n");
    scanf("%d",&b);
    for(i=a+2; i<b; ++i)
    {
        flag=0;
        for(j=2; j<=i/2; ++j)
        {
            if(i%j==0)
            {
                flag=1;
                break;
            }
        }
        if(flag==0)
{
            counter++;       
            printf("%d\n", i);
        }
           
    }
printf("%d tane asal sayi bulundu!\n",counter);
return 0;
}

zaman buldukça mesajı güncelleyeceğim.

XFCE ROCKS !
Powered by Thunar & XFWM4



-DıLgEş-

@Reverser, Hocam değişken isimleri geri kalanlar doğru. Hatırlıyorum da ben bu kodları yazarken 2 gün uğraşmıştım. Çözmesi daha kolaymış meğer.
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

Reverser

#189
kolay demeyelim, zamanla pratiklik kazanıyor insan. :)

ogrkuruk.zip

bu dosyayi henüz C koduna çevirmedim ama anladığım kadarıyla C++ ile yazılmış

bir structure var bu yapı içinde öğrenciler için alınacak değişkenler ilişkilendiriliyor. Main dışında 3 adet fonksiyon daha var

struct struct_0 {
    float unk_0;
    float unk_1;
};


int SinifiYazdir(struct struct_0 * v_1, float v_2);
int Student(int a1);
int Student_1(int a1);

ardından öğrenciler için istenen veriler girilip, kuyruk ile işlemler yapılıyor.



XFCE ROCKS !
Powered by Thunar & XFWM4



-DıLgEş-

O uygulamaları yazarken daha yeni öğreniyordum. Şimdi bir kuyruk yapısı yazayım dersem en fazla 3-4 saatimi alıyor. Gerçekten de pratikleştikçe artıyor tecrübe.

Koda gelince C++ ile yazmıştım.
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

Reverser

Mesaji yeni gördüm gözümden kaçmış konu bu aralar sessiz kaldı.

XFCE ROCKS !
Powered by Thunar & XFWM4



-DıLgEş-

Alıntı yapılan: ReverserMesaji yeni gördüm gözümden kaçmış konu bu aralar sessiz kaldı.
Evet haklısınız bu aralar yeni bir tane yazıp yollayacağım bu seferkini biraz daha zor yapacam.
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

Reverser


XFCE ROCKS !
Powered by Thunar & XFWM4



-DıLgEş-

Alıntı yapılan: Reversertamamdır, beklemedeyiz.
ogrkuyruk.zip'i çözdünüz mü?
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

Reverser

çalışma mantığını çözdüm ama C ye çevirmedim henüz zira kuyruk yapısını ve pointerları analiz etmem biraz uzun sürecek.

XFCE ROCKS !
Powered by Thunar & XFWM4



-DıLgEş-

Alıntı yapılan: Reverserçalışma mantığını çözdüm ama C ye çevirmedim henüz zira kuyruk yapısını ve pointerları analiz etmem biraz uzun sürecek.
Tabi beklerim. 
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

Reverser

Konunun canlanması için bir adet reverse_me paylaşıyorum.
İstenen: GDB kullanarak dosyayı analiz etmek, C ya da başka bir dile çevirmek.
İndirme bağlantısı: http://s4.dosya.tc/server2/mke6tw/reverse_me.zip.html

XFCE ROCKS !
Powered by Thunar & XFWM4



betseg

Bir denklem buldum, onu da sıkıntıdan bir programa çevirdim. Denklemi bulmaya çalışın :)

http://s3.dosya.tc/server3/pd7xpf/orthesaplama.zip.html

Reverser

@betseg, programı 32bit olarak derleme imkanınız var mı acaba ?

XFCE ROCKS !
Powered by Thunar & XFWM4