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

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 :)

XFCE ROCKS !
Powered by Thunar & XFWM4



siberoloji

#1
?

Reverser


XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

#3
En kisa surede bir program kodllari ekleyecegim.
Guzel bir fikir. :)
Ama basligi turkce olarak ayarlarsak daha iyi olur .
Tersine kod muhendisligi

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

Reverser

Alıntı yapılan: Z3r0nU11 - 03 Kasım 2014 - 23:00:25
En kisa surede bir program kodllari ekleyecegim.
Guzel bir fikir. :)
Ama basligi turkce olarak ayarlarsak daha iyi olur .
Tersine kod muhendisligi

Moderatörlerden rica edelim o zaman düzeltilsin :)
Hocam bekliyorum çok komplike olmasına gerek yok bu gece boşum eğlence olsun bana :)

XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

Suan disardayim telden yaziyorum.Iletiyi gorunce cevap yazmak istedim.
Ama gecte olsa ekleme yapacagim.
Windows altinda degilde linux altinda derleme yapalim linux altinda calisalim. Boyle daha iyi olur bence.
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Reverser

Alıntı yapılan: Z3r0nU11 - 03 Kasım 2014 - 23:15:58
Suan disardayim telden yaziyorum.Iletiyi gorunce cevap yazmak istedim.
Ama gecte olsa ekleme yapacagim.

Tamamdır hocam beklemedeyim.

XFCE ROCKS !
Powered by Thunar & XFWM4



siberoloji

@Reverser;
.exe dosyaları paylaşmak sıkıntılı olabilir diye geçmişti aklımdan ancak o an söyleyip söylememekte kararsız kaldığım için ? koydum sonra doldurmak için.
Bence de linux altında derlenmiş dosyalar daha uygun olur.

Reverser

Alıntı yapılan: siberoloji - 03 Kasım 2014 - 23:55:03
@Reverser;
.exe dosyaları paylaşmak sıkıntılı olabilir diye geçmişti aklımdan ancak o an söyleyip söylememekte kararsız kaldığım için ? koydum sonra doldurmak için.
Bence de linux altında derlenmiş dosyalar daha uygun olur.

Sıkıntı olacağını sanmıyorum ama linux altında derlenmiş executable paylaşalım o halde. Bu arada hala birinin dosya paylaşmasını bekliyorum :D

XFCE ROCKS !
Powered by Thunar & XFWM4



mozhan

ekleyeceğim şuan dropbox da oluşturuyorum arkadaşlar bekleyin biraz
When we ride on our enemies..

https://github.com/mustafaozhan

siberoloji


mozhan

https://www.dropbox.com/s/afbhs5ym337nekg/datastrctrs.tar.gz?dl=0

Çalıştırılabilir dosya ve çalışması için gereken metin belgesi içinde.Hem metin belgesi biraz fikir ve ip ucu verir sana :D kodlar da bende :D
When we ride on our enemies..

https://github.com/mustafaozhan

Reverser

Alıntı yapılan: siberoloji - 04 Kasım 2014 - 00:05:31
https://www.dropbox.com/s/zzr1m18o2mz2od0/reverse?dl=0
Basit bir program ama yine de paylaşayım...

64 bitlik exe umarım doğrudur

/****************************

   Reversed source code
   - Reverser

****************************/


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



int main(int argc, char *argv[])
{
    puts("Hello, World!");
    return 0;
}



@mr.ozhan inceliyorum hemen

XFCE ROCKS !
Powered by Thunar & XFWM4



siberoloji

reverse kodları
#include <stdio.h>
int main()
{
printf("Hello, World! \n");
return 0;
}

mozhan

diğerinin cevabını gördümde şimdi istersen başka bi dosya atayım çünkü içinde baya bi kod var ?
When we ride on our enemies..

https://github.com/mustafaozhan

Reverser

Alıntı yapılan: mr.ozhan - 04 Kasım 2014 - 00:25:49
diğerinin cevabını gördümde şimdi istersen başka bi dosya atayım çünkü içinde baya bi kod var ?

Diğer dosyayı da atın. Bu attığınız çok uğraştıracak çünkü :D Belki de reverse edemeyeceğim ...

XFCE ROCKS !
Powered by Thunar & XFWM4



mozhan

When we ride on our enemies..

https://github.com/mustafaozhan

Reverser

Alıntı yapılan: mr.ozhan - 04 Kasım 2014 - 00:43:39
https://www.dropbox.com/s/fx9glxrihhzbca4/asd?dl=0
https://www.dropbox.com/s/2oynrcjyfimp7g5/asdf?dl=0
iki tane kodu kısa mantığı güzel :D

Hocam ilk verdiğinizi hallettim diğerine yarın bakacağım kod aşağıda

/****************************

   Reversed source code
   - Reverser

****************************/


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

typedef struct koord_1 {
int x;
int y;
}koord_1;

typedef struct koord_2 {
int x;
int y;
}koord_2;

int main(int argc, char *argv[])
{
    float sonuc;
    koord_1 koord_1;
    koord_2 koord_2;
    printf("birinci noktanin kordinatlarini giriniz...");
scanf("%d",&koord_1.x);
scanf("%d",&koord_1.y);
printf("ikinci noktanin kordinatlarini giriniz...");
scanf("%d",&koord_2.x);
scanf("%d",&koord_2.y);

sonuc = sqrt(pow((koord_1.x-koord_2.x),2)+pow((koord_1.y-koord_2.y),2));

printf("girilen noktalar arasi uzaklik: %.2f\n",sonuc);
       
      return 0;
}

XFCE ROCKS !
Powered by Thunar & XFWM4



mozhan

bu da orjinali :D
#include<stdio.h>
#include<math.h>
struct nokta
{
    int x;
    int y;
};
main()
{
    float mesafe;
    struct nokta a,b;
    printf("birinci noktanin kordinatlarıni giriniz:\n");
    scanf("%d%d",&a.x,&a.y);
    printf("ikinci noktanın kordinatlarıni giriniz:\n");
    scanf("%d%d",&b.x,&b.y);
    mesafe=sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2));
    printf("girilen noktalar arası uzaklık: %.2f\n",mesafe);// noktadan sonra sadece iki basamak göster
}
When we ride on our enemies..

https://github.com/mustafaozhan

Reverser

#19
Alıntı yapılan: heartsmagic - 04 Kasım 2014 - 05:34:17
Alıntı yapılan: Reverser - 04 Kasım 2014 - 01:16:20
Şimdi farkettim ayrıca üslubunuzu beğenmedim.

Mimiklerin görünmediği ve karşı tarafın da kullanmadığı zamanlarda, şu sanal dünyada yazılan şeyleri azarlar mahiyette anlamak yerine "Kendi başlığını düzenlemede bir sıkıntı mı yaşıyorsun?" şeklinde anlamak en doğru yaklaşımdır zannımca.

Bu sekilde yazilabilirdi kanisindayim. Neyse hocam konuyu dagitmayalim. Mobildeyim suan aksam diger dosyalari inceleyecegim.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 04 Kasım 2014 - 17:09:54

Alıntı yapılan: mr.ozhan - 04 Kasım 2014 - 00:08:26
https://www.dropbox.com/s/afbhs5ym337nekg/datastrctrs.tar.gz?dl=0

Çalıştırılabilir dosya ve çalışması için gereken metin belgesi içinde.Hem metin belgesi biraz fikir ve ip ucu verir sana :D kodlar da bende :D

Programın çalışma mantığını çözdüm kod haline dönüştürmedim ama özetle Pseudocode şeklinde açıklayayım.

program birden çok fonksiyondan oluşuyor (update, diz, main) ve bir de ogrenci struct'ı barındırıyor ad soyad ve numara şeklinde anladığım kadarıyla.


main fonksiyonda

"Please select an operation for sorting:"...

"1=> Ascending sort by student numbers"
"2=> Descending sort by student numbers"
"3=> Ascending sort by student names"
"4=> Descending sort by student names"
"5=> Ascending sort by student surnames"
"6=> Descending sort by student surnames"...
"7=> Update Student Data"
"0=> Exit\n"



daha sonra seçim için klavyeden girdi alınıyor,

>>>>> Your Choice:


örnek olarak , update fonksiyonunu inceleyelim

update(struct ogrenci /*??*/ *unk1)
{

" Give Student Number For Updating:"

   öğrenci numarası girilir,

   numara dosya icinde varsa devam edilir,

   "New Number: "
   " New Name:"
   "New Surname:"

    *** The Record has been updated!


   yoksa işlem sonlanır

" Error: Student does not exist  "

 
}



genel olarak program, main'de bulunan seçeneklere göre student.txt dosyası içindeki veriler üzerinden işlem yapmakta. sıralama, güncelleme vs. gibi

XFCE ROCKS !
Powered by Thunar & XFWM4



mozhan

@Reverser Gönderdiğin kodlar doğru. Benim merak etiğim bu olayın işleyişi nasıldır acaba. Kodları sen mi tahmin ediyorsun yoksa bi programla mı ?
When we ride on our enemies..

https://github.com/mustafaozhan

7hr33l3t73r

#21

.file "loto.c"
.intel_syntax noprefix
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "L O T O\n"
.section .rodata.str1.4,"aMS",@progbits,1
.align 4
.LC1:
.string "Bu haftaki numaralari almak icin Enter'a basiniz:"
.section .rodata.str1.1
.LC2:
.string "Iste geliyor: "
.LC3:
.string "%d"
.LC4:
.string "\n\nIyi Sanslar!"
.section .text.unlikely,"ax",@progbits
.LCOLDB5:
.section .text.startup,"ax",@progbits
.LHOTB5:
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB21:
.cfi_startproc
lea ecx, [esp+4]
.cfi_def_cfa 1, 0
and esp, -16
push DWORD PTR [ecx-4]
push ebp
.cfi_escape 0x10,0x5,0x2,0x75,0
mov ebp, esp
push edi
push esi
push ebx
push ecx
.cfi_escape 0xf,0x3,0x75,0x70,0x6
.cfi_escape 0x10,0x7,0x2,0x75,0x7c
.cfi_escape 0x10,0x6,0x2,0x75,0x78
.cfi_escape 0x10,0x3,0x2,0x75,0x74
mov esi, 6
mov ebx, 1402438301
sub esp, 228
push OFFSET FLAT:.LC0
call puts
mov DWORD PTR [esp], 0
call time
mov DWORD PTR [esp], eax
call srand
lea edx, [ebp-220]
xor eax, eax
mov ecx, 49
mov edi, edx
rep stosd
mov DWORD PTR [esp], OFFSET FLAT:.LC1
call printf
pop edx
push DWORD PTR stdin
call _IO_getc
mov DWORD PTR [esp], OFFSET FLAT:.LC2
call puts
add esp, 16
.p2align 4,,10
.p2align 3
.L2:
call rand
mov ecx, eax
imul ebx
mov eax, ecx
sar eax, 31
sar edx, 4
sub edx, eax
imul edx, edx, 49
sub ecx, edx
mov eax, DWORD PTR [ebp-220+ecx*4]
mov edx, ecx
test eax, eax
jne .L2
sub esp, 8
add edx, 1
mov DWORD PTR [ebp-220+ecx*4], 1
push edx
push OFFSET FLAT:.LC3
call printf
add esp, 16
sub esi, 1
jne .L2
sub esp, 12
push OFFSET FLAT:.LC4
call puts
add esp, 16
lea esp, [ebp-16]
xor eax, eax
pop ecx
.cfi_restore 1
.cfi_def_cfa 1, 0
pop ebx
.cfi_restore 3
pop esi
.cfi_restore 6
pop edi
.cfi_restore 7
pop ebp
.cfi_restore 5
lea esp, [ecx-4]
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE21:
.size main, .-main
.section .text.unlikely
.LCOLDE5:
.section .text.startup
.LHOTE5:
.section .text.unlikely
.LCOLDB6:
.text
.LHOTB6:
.p2align 4,,15
.globl rnd
.type rnd, @function
rnd:
.LFB22:
.cfi_startproc
sub esp, 12
.cfi_def_cfa_offset 16
call rand
cdq
idiv DWORD PTR [esp+16]
add esp, 12
.cfi_def_cfa_offset 4
mov eax, edx
ret
.cfi_endproc
.LFE22:
.size rnd, .-rnd
.section .text.unlikely
.LCOLDE6:
.text
.LHOTE6:
.section .text.unlikely
.LCOLDB7:
.text
.LHOTB7:
.p2align 4,,15
.globl seedrnd
.type seedrnd, @function
seedrnd:
.LFB23:
.cfi_startproc
sub esp, 24
.cfi_def_cfa_offset 28
push 0
.cfi_def_cfa_offset 32
call time
mov DWORD PTR [esp], eax
call srand
add esp, 28
.cfi_def_cfa_offset 4
ret
.cfi_endproc
.LFE23:
.size seedrnd, .-seedrnd
.section .text.unlikely
.LCOLDE7:
.text
.LHOTE7:
.ident "GCC: (GNU) 4.9.2"
.section .note.GNU-stack,"",@progbits
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

Amenofis

Alıntı yapılan: mr.ozhan - 08 Kasım 2014 - 01:26:15
@Reverser Gönderdiğin kodlar doğru. Benim merak etiğim bu olayın işleyişi nasıldır acaba. Kodları sen mi tahmin ediyorsun yoksa bi programla mı ?

Decompiler denen bir program kullanılıyor. Bu programlar önce kodu disassembly eder sonra da asm kodundan "tahmini" bir C kodu üretir. Fakat arkadaş yeterince tecrübeli ise programı sadece disassembly eder, tahmini kaynak kodunu kendisi çözebilir.

Eğer programı debug modda derlediyseniz kaynak kodunuzdaki semboller dosyaya ekleneceğinden tersleme işlemi çok daha basit olur. Yok eğer -O3 gibi bir optimizasyon ile derlediyseniz derleyici kaynak kodla alakasız bir çıktı üretebilir. Bu durumda tersleme zor olur. Birde kodunuzu düzenli değil de spagetti kod diye tabir edilen düzensiz şekilde yazıyorsanız tersleyip algoritmanızı çalmak zorlaşır.

Bu işlemi önlemek için de çeşitli araçlar var ama hiçbiri tam çözüm değil tabiki. Mesela obfuscator denilen araçlarla binary dosyanızı karıştırabilirsiniz. Ya da upx ile sıkıştırabilirsiniz. Ama her halukarda bellekte programın orjinali görünecektir.

ekremsenturk

@revers takma isimli arkadaşımız, sanırım internet'ten benzer bir örnek bulup, kopyalayıp yapıştırıyordu.

mozhan

hmm anladım aslında güzel işmiş makina kodundan yararlanarak çözmek. Makina kodunun işleyişi ni öğremek içinde kullanılabilir o zaman :D ikinci dönem buna ihtiyacım olacak :D
When we ride on our enemies..

https://github.com/mustafaozhan