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 :)
?
En kisa surede bir program kodllari ekleyecegim.
Guzel bir fikir. :)
Ama basligi turkce olarak ayarlarsak daha iyi olur .
Tersine kod muhendisligi
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 :)
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.
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.
@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.
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
ekleyeceğim şuan dropbox da oluşturuyorum arkadaşlar bekleyin biraz
https://www.dropbox.com/s/zzr1m18o2mz2od0/reverse?dl=0 (https://www.dropbox.com/s/zzr1m18o2mz2od0/reverse?dl=0)
Basit bir program ama yine de paylaşayım...
https://www.dropbox.com/s/afbhs5ym337nekg/datastrctrs.tar.gz?dl=0 (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
Alıntı yapılan: siberoloji - 04 Kasım 2014 - 00:05:31
https://www.dropbox.com/s/zzr1m18o2mz2od0/reverse?dl=0 (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
reverse kodları
#include <stdio.h>
int main()
{
printf("Hello, World! \n");
return 0;
}
diğerinin cevabını gördümde şimdi istersen başka bi dosya atayım çünkü içinde baya bi kod var ?
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 ...
https://www.dropbox.com/s/fx9glxrihhzbca4/asd?dl=0 (https://www.dropbox.com/s/fx9glxrihhzbca4/asd?dl=0)
https://www.dropbox.com/s/2oynrcjyfimp7g5/asdf?dl=0 (https://www.dropbox.com/s/2oynrcjyfimp7g5/asdf?dl=0)
iki tane kodu kısa mantığı güzel :D
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/fx9glxrihhzbca4/asd?dl=0)
https://www.dropbox.com/s/2oynrcjyfimp7g5/asdf?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;
}
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
}
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 (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
@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ı ?
.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
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.
@revers takma isimli arkadaşımız, sanırım internet'ten benzer bir örnek bulup, kopyalayıp yapıştırıyordu.
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
Alıntı yapılan: Amenofis - 11 Kasım 2014 - 10:24:00
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 * tabi ki. 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.
Dediğiniz gibi farklı yöntemler mevcut özellikle offsetler üzerinden fonksiyonları bulmak oldukça uğraştırmakta. Basit bir disassembler kullanıyorum sadece decompiler kullanmıyorum. Bu işin zevki burada zaten.. Tek satır C kodu için bazen 10 satır asm okumak zorunda kalıyorsunuz.
Alıntı yapılan: ekremsenturk - 11 Kasım 2014 - 11:49:52
@revers takma isimli arkadaşımız, sanırım internet'ten benzer bir örnek bulup, kopyalayıp yapıştırıyordu.
Programın nasıl çalıştığını bilmeden nasıl kopyala yapıştır yapayım :) ? Bu iş için yeteri kadar ASM ve C bilgim var..
O kısımı ben okuduğumda soru olarak anlıyorum bence bakış açısı bu sen öyle görmek istersen öyledir, uslübte terbiyesiz bir durum yok bence ama tercih meselesi siz öyle o an yorumlamış olabilirsiniz algı farklı olabilir tabikide...
Merhaba , bu dropbox'ta paylaştığınız dosyaları indirdim bende yapmak için fakat dosya ayarlarında "allow executing .." kutusunu işaretlememe rağmen hiç bir tepki vermiyor açmaya çalıştığımda, anlayamadım neden böyle ?
Uçbirimden çalıştırmalısın. Dosyanın home dizininde olduğunu varsayarak, aşağıdaki örneği kullanabilirsin.
./çalıştırlacak_dosyanın_adı
Alıntı yapılan: ekremsenturk - 17 Kasım 2014 - 17:20:17
Uçbirimden çalıştırmalısın. Dosyanın home dizininde olduğunu varsayarak, aşağıdaki örneği kullanabilirsin.
./çalıştırlacak_dosyanın_adı
Teşekkür ederim bende uğraşıyorum açmak için, kullanıcı arayüzü var sandım :)
Zor bir asm kodu paylastim herhalde :)
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.
Bende kendi başlığımı düzeltemiyorum :D
Alıntı yapılan: Z3r0nU11 - 29 Aralık 2014 - 16:08:50
Zor bir asm kodu paylastim herhalde :)
Çok zor random sayı türettirmece :)
Alıntı yapılan: ahmetvural32 - 29 Aralık 2014 - 16:22:21
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.
Bende kendi başlığımı düzeltemiyorum :D
Hangi başlığı? Düzenleyememe nedenin nedir?
:d
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 30 Aralık 2014 - 14:47:26
Alıntı yapılan: heartsmagic - 30 Aralık 2014 - 00:56:57
Alıntı yapılan: ahmetvural32 - 29 Aralık 2014 - 16:22:21
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.
Bende kendi başlığımı düzeltemiyorum :D
Hangi başlığı? Düzenleyememe nedenin nedir?
Ubuntuda C yazamamak başlığını
Konuyu canlandırmak amacıyla, ilerleyen saatlere doğru bir binary paylaşacağım daha doğrusu kolaydan zora doğru birden çok binary olacak içinde şifrelenmiş halde bir text formatı barındıracak ya da bir tür koruma önlemi olacak ve bu korumayı aşmaya çalışacağız bu konuyla oyalanmak isteyenler için eğitici olacağı kanısındayım :)
Debugger olarak Gdb'mi kullanıyorsunuz acaba? Yoksa kullandığınız Hata Ayıklayıcı IDE'nin içinde mi geliyor?
Alıntı yapılan: kaansef - 31 Aralık 2014 - 16:12:28
Debugger olarak Gdb'mi kullanıyorsunuz acaba? Yoksa kullandığınız Hata Ayıklayıcı IDE'nin içinde mi geliyor?
Ağırlıklı olarak GDB ve hex editor kullanıyorum.
Teşekkür ederim @Reverser. Peki GDB için önerebileceğiniz Türkçe kaynak var mı? Belgeler'de gördüm ama eski diye bakmadım. Eğer bir çok şey değiştiyse eskiyi öğrenmenin bir anlamı yok çünkü. (İnternette arama yaptığım kaynaklar genelde çok basit oluyor. Benim aradığım tam anlamıyla öğrenebileceğim bir kaynak.)
Alıntı yapılan: kaansef - 31 Aralık 2014 - 16:22:14
Teşekkür ederim @Reverser. Peki GDB için önerebileceğiniz Türkçe kaynak var mı? Belgeler'de gördüm ama eski diye bakmadım. Eğer bir çok şey değiştiyse eskiyi öğrenmenin bir anlamı yok çünkü. (İnternette arama yaptığım kaynaklar genelde çok basit oluyor. Benim aradığım tam anlamıyla öğrenebileceğim bir kaynak.)
Türkçe kaynak bu konuda neredeyse yok enderunix bir zamanlar güzel anlatımlar yapmıştı özellikle gdb kullanımı ve buffer overflow exploiting tekniğiyle ilgili. Hala duruyor mu bilmiyorum. Yabancı kaynaklara bakın daha çok.
O kaynağı biliyorum. İkisinide okudum. Keşke GDB'yi tam anlamıyla anlatan bir Türkçe kaynak olsa. Cevabınız için teşekkür ederim @Reverser. İyi yıllar bu arada herkese.
Alıntı yapılan: ahmetvural32 - 30 Aralık 2014 - 14:44:42
Ubuntuda C yazamamak başlığını
Bu konuyu baltalıyoruz ancak senin o başlığın kapatılmış durumda ve seni bir ankete yönlendiriyor. İstediğin soruların cevabını o ankette bulabilirsin.
Arkadaşlar ilk örneği paylaşıyorum biraz kolay ama olsun :) Uğraşmak isteyenler için hedefiniz şu, programın işleyişini çözerek içeriğinde ham binary olarak bulunan dosyayı dışarı çıkartıp içinde ki şifreyi çözmek ilk örnek için fazlasıyla kolay olduğunu düşünüyorum herkese kolay gelsin :)
http://www.dosya.tc/server37/qPBrkC/crack_me.zip.html
sifre=991244 olabilir mi?
Ogrenmeye calisiyorum ama ozellikle sizden bu dosyanin asm kodlarini aciklayici bir sekilde anlatmanizi bekliyorum sonra ogrenmek acisindan.
Yani soyle
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FLYQ340.png&hash=9dcb28494aec5ef743b907f294f18440775ec4a1) (http://hizliresim.com/LYQ340)
satirlari bize ne demek istemis olabilir ornegin.
asm konusunda daha yeniyim de.
Bu konuda detayli bir asm kod yorumlamasi yaparsaniz sevinirim.
Alıntı yapılan: h454n - 02 Ocak 2015 - 01:51:32
sifre=991244 olabilir mi?
Ogrenmeye calisiyorum ama ozellikle sizden bu dosyanin asm kodlarini aciklayici bir sekilde anlatmanizi bekliyorum sonra ogrenmek acisindan.
Yani soyle
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FLYQ340.png&hash=9dcb28494aec5ef743b907f294f18440775ec4a1) (http://hizliresim.com/LYQ340)
satirlari bize ne demek istemis olabilir ornegin.
asm konusunda daha yeniyim de.
Bu konuda detayli bir asm kod yorumlamasi yaparsaniz sevinirim.
evet, arkadaşım şifre 991244. Aslında örnek tam istediğim gibi olmadı ne yazık ki eğer anlatım olacaksa en baştan başlamalıyım diye düşünüyorum en basit işlemlerden yani.. bu şekilde temel kavramlar yerine oturacaktır. Bu arada asm öğrenmek için disassembler kullanmak iyi bir başlangıç olabilir.
@Reverser, konuyu dağıtmak istemem fakat uzun zamandır merak ettiğim bir konu var. Çift bellek adreslerine tek bellek adreslerinden daha hızlı erişilir diye bir konu var. Bunun nedenini açıklayabilir misiniz? İsterseniz özel mesaj olarak gönderin. Veya buraya yazalım ki tüm herkes faydalansın. (Alignment - Hizalam diye geçiyor.)
Alıntı yapılan: kaansef - 02 Ocak 2015 - 16:12:36
@Reverser, konuyu dağıtmak istemem fakat uzun zamandır merak ettiğim bir konu var. Çift bellek adreslerine tek bellek adreslerinden daha hızlı erişilir diye bir konu var. Bunun nedenini açıklayabilir misiniz? İsterseniz özel mesaj olarak gönderin. Veya buraya yazalım ki tüm herkes faydalansın. (Alignment - Hizalam diye geçiyor.)
Bu konu hakkında hiçbir fikrim yok ne yazık ki...
Cevapladığınız için çok teşekkür ederim. İnternetten araştırdığımda çıkan kaynakların neredeyse hepsi İngilizce maalesef.
Alıntı yapılan: kaansef - 02 Ocak 2015 - 17:06:23
Cevapladığınız için çok teşekkür ederim. İnternetten araştırdığımda çıkan kaynakların neredeyse hepsi İngilizce maalesef.
kaynakların linkini alabilir miyim acaba ? Merak ettim doğrusu.
Tabii ki
Linkler:
Wikipedia'daki anlatım.
http://en.wikipedia.org/wiki/Data_structure_alignment (http://en.wikipedia.org/wiki/Data_structure_alignment)
IBM'deki anlatım.
http://www.ibm.com/developerworks/library/pa-dalign/ (http://www.ibm.com/developerworks/library/pa-dalign/)
MSDN'deki anlatım
http://msdn.microsoft.com/en-us/library/ms253949.aspx (http://msdn.microsoft.com/en-us/library/ms253949.aspx)
Anahtar kelime olarak "data alignment", "memory alignment" gibi anahtar kelimeleri kullandım. Ayrıca Stackoverflow'da bir çok kez tartışılmış.
Alıntı yapılan: kaansef - 02 Ocak 2015 - 16:12:36
@Reverser, konuyu dağıtmak istemem fakat uzun zamandır merak ettiğim bir konu var. Çift bellek adreslerine tek bellek adreslerinden daha hızlı erişilir diye bir konu var. Bunun nedenini açıklayabilir misiniz? İsterseniz özel mesaj olarak gönderin. Veya buraya yazalım ki tüm herkes faydalansın. (Alignment - Hizalam diye geçiyor.)
Doğrudur ama çift değil. İşlemcinin word uzunluğunun katları olursa daha hızlı erişirler. Mesela işlemci 32 bitse 4' ün katı olan adreslere daha hızlı erişilir. Bazı mimariler hizasız adresleri hiç desteklemez, hizalı olması şarttır. Örneğin Arm işlemcilerde word yanlızca 2' nin katlarına, dword ise 4' ün katlarına yazılmak zorunda. Bazı mimarilerse hizalı ya da hizasız aynı hızda erişebilmektedir. Mesela Intel core mimarisinde bu sorunu çözdü. Kısacası donanıma bağlı olarak durum değişiyor.
Alıntı yapılan: Amenofis - 02 Ocak 2015 - 18:46:59
Alıntı yapılan: kaansef - 02 Ocak 2015 - 16:12:36
@Reverser, konuyu dağıtmak istemem fakat uzun zamandır merak ettiğim bir konu var. Çift bellek adreslerine tek bellek adreslerinden daha hızlı erişilir diye bir konu var. Bunun nedenini açıklayabilir misiniz? İsterseniz özel mesaj olarak gönderin. Veya buraya yazalım ki tüm herkes faydalansın. (Alignment - Hizalam diye geçiyor.)
Doğrudur ama çift değil. İşlemcinin word uzunluğunun katları olursa daha hızlı erişirler. Mesela işlemci 32 bitse 4' ün katı olan adreslere daha hızlı erişilir. Bazı mimariler hizasız adresleri hiç desteklemez, hizalı olması şarttır. Örneğin Arm işlemcilerde word yanlızca 2' nin katlarına, dword ise 4' ün katlarına yazılmak zorunda. Bazı mimarilerse hizalı ya da hizasız aynı hızda erişebilmektedir. Mesela Intel core mimarisinde bu sorunu çözdü. Kısacası donanıma bağlı olarak durum değişiyor.
Amenofis, aydınlattığın için teşekkürler kaansef'in sorusunu yanlış anlamışım yazdıklarına katılıyorum. Mimariyle ilgili birazda özellikle MIPS mimarisinde buna benzer bir durumla karşılaşmıştım yanlış hatırlamıyorsam.
Alıntı yapılan: Reverser - 02 Ocak 2015 - 15:39:23
Alıntı yapılan: h454n - 02 Ocak 2015 - 01:51:32
sifre=991244 olabilir mi?
Ogrenmeye calisiyorum ama ozellikle sizden bu dosyanin asm kodlarini aciklayici bir sekilde anlatmanizi bekliyorum sonra ogrenmek acisindan.
Yani soyle
satirlari bize ne demek istemis olabilir ornegin.
asm konusunda daha yeniyim de.
Bu konuda detayli bir asm kod yorumlamasi yaparsaniz sevinirim.
evet, arkadaşım şifre 991244. Aslında örnek tam istediğim gibi olmadı ne yazık ki eğer anlatım olacaksa en baştan başlamalıyım diye düşünüyorum en basit işlemlerden yani.. bu şekilde temel kavramlar yerine oturacaktır. Bu arada asm öğrenmek için disassembler kullanmak iyi bir başlangıç olabilir.
Hocam vallah anlatimda bulunursaniz cok iyi olur.Genel olrak da ogrenmis oluruz.Ozetle siz bu dosyada nasil bir yol izlerdiniz?(mumkunse vidyo'lu olarak sesli olmasa da olur :) )
Gdb yukleme konusunda neler yapardiniz.Ben bazi sorunlar ile karsilastim da.
objdump ile dinamik analiz bile yapamadim. :)
extrack_meh fonksiyonun nasil. kaynak kodlari da paylasabilirmisiniz.
Daha cok sorum var da fazla uzakmayim takildikca buradan yardim isterim. :)
Peki neden böyle oluyor? Mesela RAM dediğimiz 1 Byte'lık bölümlere ayrılmış bir veri deposu (kabaca). Yani ben 0'ıncı adresede erişsem, 1. adresede erişsem aynı şekilde getirilecekler. Adres Yolu'na veriyi almak istediğim yerin adresini yazacağım, Kontrol Yolu'na okuma isteği yazacağım ve Veri Yolu'ndan veri işlemciye gelecek. Aslında bu mantığı bir zamanlar oturtmuştum, anlamıştım fakat uzun süredir uğraşmadığım için unuttum ve şimdi nedenini çözemedim.
Alıntı yapılan: kaansef - 03 Ocak 2015 - 00:13:38
Peki neden böyle oluyor? Mesela RAM dediğimiz 1 Byte'lık bölümlere ayrılmış bir veri deposu (kabaca). Yani ben 0'ıncı adresede erişsem, 1. adresede erişsem aynı şekilde getirilecekler. Adres Yolu'na veriyi almak istediğim yerin adresini yazacağım, Kontrol Yolu'na okuma isteği yazacağım ve Veri Yolu'ndan veri işlemciye gelecek. Aslında bu mantığı bir zamanlar oturtmuştum, anlamıştım fakat uzun süredir uğraşmadığım için unuttum ve şimdi nedenini çözemedim.
Bunun nedenini amenofis benden çok daha anlaşılabilir bir dil kullanarak anlatmak ister umarım :)
Alıntı yapılan: h454n - 02 Ocak 2015 - 20:20:19
Alıntı yapılan: Reverser - 02 Ocak 2015 - 15:39:23
Alıntı yapılan: h454n - 02 Ocak 2015 - 01:51:32
sifre=991244 olabilir mi?
Ogrenmeye calisiyorum ama ozellikle sizden bu dosyanin asm kodlarini aciklayici bir sekilde anlatmanizi bekliyorum sonra ogrenmek acisindan.
Yani soyle
satirlari bize ne demek istemis olabilir ornegin.
asm konusunda daha yeniyim de.
Bu konuda detayli bir asm kod yorumlamasi yaparsaniz sevinirim.
evet, arkadaşım şifre 991244. Aslında örnek tam istediğim gibi olmadı ne yazık ki eğer anlatım olacaksa en baştan başlamalıyım diye düşünüyorum en basit işlemlerden yani.. bu şekilde temel kavramlar yerine oturacaktır. Bu arada asm öğrenmek için disassembler kullanmak iyi bir başlangıç olabilir.
Hocam vallah anlatimda bulunursaniz cok iyi olur.Genel olrak da ogrenmis oluruz.Ozetle siz bu dosyada nasil bir yol izlerdiniz?(mumkunse vidyo'lu olarak sesli olmasa da olur :) )
Gdb yukleme konusunda neler yapardiniz.Ben bazi sorunlar ile karsilastim da.
objdump ile dinamik analiz bile yapamadim. :)
extrack_meh fonksiyonun nasil. kaynak kodlari da paylasabilirmisiniz.
Daha cok sorum var da fazla uzakmayim takildikca buradan yardim isterim. :)
Kusura bakmayın anca yanıtlayabiliyorum.
extract_meh(char *data);
fonksiyonu char tipli argüman alıyor (bu argüman, dosyanın ismi) dosya dökümü, (hex formatlı) "sifre.h" headerı içinde daha sonra aşağıdaki kod bloğu ile dosya yazılıyor.
void
extract_meh(char *data)
{
FILE *handleWrite=fopen(data,"wb");
fwrite(sifre_bin, 1, 772, handleWrite);
fclose(handleWrite);
}
Hocam kodlar icin tesekkur ederim.
BIr sorum daha var.
edb'e yuklemede sorun yok ve digerlerinde.(ida)
yalniz gdb de bir turlu programi yukleyemedim.
Bu konuda ne yapmam lazim acaba bilgilendirebilirmisiniz.
Bir onlem mi var? Yeni yeni ogreniyorum daha.
Alıntı yapılan: h454n - 12 Ocak 2015 - 19:04:14
Hocam kodlar icin tesekkur ederim.
BIr sorum daha var.
edb'e yuklemede sorun yok ve digerlerinde.(ida)
yalniz gdb de bir turlu programi yukleyemedim.
Bu konuda ne yapmam lazim acaba bilgilendirebilirmisiniz.
Bir onlem mi var? Yeni yeni ogreniyorum daha.
Bence IDA ile başlamak güzel. Herhangibir koruma önlemi yok fakat, hex editor ile nop byteları editleyerek string girmiştim yanlış bir editleme yaparak programın yapısını bozmuş olabilirim emin değilim gdb ile hata alıyor musunuz ?
Düzeltme:
Kusura bakmayın yanlış editlenmiş versiyonu paylaşmışım ::) birde bunu deneyin http://s3.dosya.tc/server30/QcBQcB/crack_me.zip.html
reverser@reverser:~/Masaüstü$ gdb ./crack_me
./crack_me'den semboller okunuyor...(no debugging symbols found)...done.
(gdb) info functions
All defined functions:
Non-debugging symbols:
0x08048350 _init
0x08048390 printf@plt
0x080483a0 fclose@plt
0x080483b0 fwrite@plt
0x080483c0 puts@plt
0x080483d0 __gmon_start__@plt
0x080483e0 __libc_start_main@plt
0x080483f0 fopen@plt
0x08048400 _start
0x08048430 __x86.get_pc_thunk.bx
0x08048440 deregister_tm_clones
0x08048470 register_tm_clones
0x080484b0 __do_global_dtors_aux
0x080484d0 frame_dummy
0x080484fd main
0x08048536 extract_meh
0x080485a0 __libc_csu_init
0x08048610 __libc_csu_fini
0x08048614 _fini
(gdb) disassemble main
Dump of assembler code for function main:
0x080484fd <+0>: push %ebp
0x080484fe <+1>: mov %esp,%ebp
0x08048500 <+3>: and $0xfffffff0,%esp
0x08048503 <+6>: sub $0x20,%esp
0x08048506 <+9>: movl $0x4,0x1c(%esp)
0x0804850e <+17>: cmpl $0x4,0x1c(%esp)
0x08048513 <+22>: jne 0x8048523 <main+38>
0x08048515 <+24>: movl $0x8048984,(%esp)
0x0804851c <+31>: call 0x80483c0 <puts@plt>
0x08048521 <+36>: jmp 0x804852f <main+50>
0x08048523 <+38>: movl $0x80489c0,(%esp)
0x0804852a <+45>: call 0x8048536 <extract_meh>
0x0804852f <+50>: mov $0x0,%eax
0x08048534 <+55>: leave
0x08048535 <+56>: ret
End of assembler dump.
(gdb) disassemble extract_meh
Dump of assembler code for function extract_meh:
0x08048536 <+0>: push %ebp
0x08048537 <+1>: mov %esp,%ebp
0x08048539 <+3>: sub $0x28,%esp
0x0804853c <+6>: movl $0x80489ca,0x4(%esp)
0x08048544 <+14>: mov 0x8(%ebp),%eax
0x08048547 <+17>: mov %eax,(%esp)
0x0804854a <+20>: call 0x80483f0 <fopen@plt>
0x0804854f <+25>: mov %eax,-0xc(%ebp)
0x08048552 <+28>: movl $0x80489cd,(%esp)
0x08048559 <+35>: call 0x8048390 <printf@plt>
0x0804855e <+40>: mov -0xc(%ebp),%eax
0x08048561 <+43>: mov %eax,0xc(%esp)
0x08048565 <+47>: movl $0x304,0x8(%esp)
0x0804856d <+55>: movl $0x1,0x4(%esp)
0x08048575 <+63>: movl $0x8048680,(%esp)
0x0804857c <+70>: call 0x80483b0 <fwrite@plt>
0x08048581 <+75>: mov -0xc(%ebp),%eax
0x08048584 <+78>: mov %eax,(%esp)
0x08048587 <+81>: call 0x80483a0 <fclose@plt>
0x0804858c <+86>: movl $0x80489e9,(%esp)
0x08048593 <+93>: call 0x80483c0 <puts@plt>
0x08048598 <+98>: leave
---Type <return> to continue, or q <return> to quit---return
0x08048599 <+99>: ret
End of assembler dump.
(gdb) Quit
aldigim hata hocam
crack_me/./crack_me": not in executable format: File format not recognized
Alıntı yapılan: h454n - 12 Ocak 2015 - 20:35:25
aldigim hata hocam
crack_me/./crack_me": not in executable format: File format not recognized
Yeni paylaştığım dosyada hata olmaması lazım...
Simdi denedim onda sorun yok hocam.
pekâlâ sorun yok o halde
Sorun cozuldu hocam da.
simdi kafamda soru isareti olustu. diger programlarla acilirken gdb ile niye acilmiyor. Bu gdb de acmak icin ne yapmamiz lazim.
Nasil bir ayar yada degisiklik yaparsak gdb ile acabiliriz.Kisaca boyle durumlarda ne yapmamiz lazim.
Alıntı yapılan: h454n - 12 Ocak 2015 - 22:02:56
Sorun cozuldu hocam da.
simdi kafamda soru isareti olustu. diger programlarla acilirken gdb ile niye acilmiyor. Bu gdb de acmak icin ne yapmamiz lazim.
Nasil bir ayar yada degisiklik yaparsak gdb ile acabiliriz.Kisaca boyle durumlarda ne yapmamiz lazim.
Dosya bölümündeki bir kısım bozuktu o yüzden gdb yürütemedi demekki bunun için başka bir disassembler ile denemekten başka yapacak bir şey yok. Bu arada crack_me çözümünü adım adım paylaşayım mı ?
Vallah cok iyi olur anlatim hocam.
Bekliyorum.
Öncelikle programın kaynak kodu aşağıdaki gibidir sifre.bin içeriği sifre.h headerı içinde barındırılmaktadır. Basit GDB işlevleri ve komutları hakkında detaylı açıklamaları google üzerinden bulabilirsiniz.
/***************************
crack_me
coded by Reverser
***************************/
#include <stdio.h>
#include <stdio.h>
#include "sifre.h"
//func prototype
void extract_meh(char *data);
int
main (int argc, char *argv[])
{
int hack_meh = 4;
if (hack_meh == 4)
{
printf("Turkce crack_me.exe anlatim forumda mevcuttur.\n\n- Reverser.\n");
}
else
{
extract_meh("sifre.bin");
}
return 0;
}
void
extract_meh(char *data)
{
FILE *handleWrite=fopen(data,"wb");
printf("\n sifre.bin cikartiliyor...");
fwrite(sifre_bin, 1, 772, handleWrite);
fclose(handleWrite);
printf(" Tamam !\n");
}
main içindeki
int hack_meh = 4;
if (hack_meh == 4)
{
printf("Turkce crack_me.exe anlatim forumda mevcuttur.\n\n- Reverser.\n");
}
else
{
extract_meh("sifre.bin");
}
kısmına dikkatli bakalım. Program normal rutininde başlıyor ve else if doğrultusunda bize printf("Turkce crack_me.exe anlatim forumda mevcuttur.\n\n- Reverser.\n"); çıktısını veriyor. Bize lazım olan kısım bu "sorguyu" değiştirmek ve ardından "extract_meh("sifre.bin");" fonksiyonunu döndürmek.
konsola geçiyoruz ve ardından srırasıyla komutlarımızı veriyoruz
gdb crack_me
info functions ile fonksiyon adlarını görebilir ve "disassemble fonksiyon_adı" şeklinde disassemble edebilirsiniz.
info functions
start ile execution'ı başlatalım
start
disassemble main ile main fonksiyonumuza bir bakalım
disassemble main
ve çıktımız aşağıdaki şekilde olmalı
Dump of assembler code for function main:
0x080484fd <+0>: push %ebp
0x080484fe <+1>: mov %esp,%ebp
=> 0x08048500 <+3>: and $0xfffffff0,%esp
0x08048503 <+6>: sub $0x20,%esp
0x08048506 <+9>: movl $0x4,0x1c(%esp)
0x0804850e <+17>: cmpl $0x4,0x1c(%esp)
0x08048513 <+22>: jne 0x8048523 <main+38>
0x08048515 <+24>: movl $0x8048984,(%esp)
0x0804851c <+31>: call 0x80483c0 <puts@plt>
0x08048521 <+36>: jmp 0x804852f <main+50>
0x08048523 <+38>: movl $0x80489c0,(%esp)
0x0804852a <+45>: call 0x8048536 <extract_meh>
0x0804852f <+50>: mov $0x0,%eax
0x08048534 <+55>: leave
0x08048535 <+56>: ret
End of assembler dump.
Azıcık çıktı okuyalım ve (kaynak kodu bilsekte) ne olduğunu anlamaya çalışalım. Bunun için temel x86 ASM bilmeniz gerekmekte bu da google'da bolca bulunmakta
*extract_meh fonksiyonu ile ilgili gözüme çarpan bir şey bulunmakta "0x80489c0" bu adres nedir ne değildir bir inceleyelim
aşağıda ki şekilde bakıyoruz
printf "%s\n",0x80489c0
çıktı olarak
sifre.bin
vermekte yani, extract_meh fonksiyonu char tipinde bir argüman almakta...
"if (hack_meh == 4) " kısmına geri dönelim, ve sonrasında assembly çıktısına bakalım şu kısıma dikkat ettiniz mi ?
0x08048513 <+22>: jne 0x8048523 <main+38>
JNE-> jump if not equal bu kısımda JNE olan kısmı JE -> jump if equal yaparsak, else if condition akışı değişecek ve program ekrana yazı yazdırmak yerine, "extract_meh(sifre.bin)" fonksiyonunu döndürecek bu şekilde de sifre.bin dosyasına ulaşacağız.
Devam edelim,
x/4x 0x08048513
ile opcode analizi yapıyoruz
0x04c70e75
aldığımız çıktıda en sonda bulunan "75" JNE'nin opcodudur. Intel instruction set konusuyla ilgili detaylı bilgi için: http://ref.x86asm.net/coder32.html
amacımız JNE yi JE yapmak. JE'nin opcodu ise 0x74 bu halde olması gereken ise ,
0x04c70e74
gdb konsolumuza geri dönüyoruz ve
set *(char*)0x08048513=0x04c70e74
yazıp enterlıyoruz bu işlemden sonra JNE , JE ile değiştirildi ve extract_meh(); fonksiyonu çalıştırılmaya hazır.
continue
ile devam ediyoruz
(gdb) continue
Devam ediyor.
sifre.bin cikartiliyor... Tamam !
[Inferior 1 (process 2986) exited normally]
(gdb)
ve mutlu son sifre.bin masaüstüne çıkartıldı. Anlatımı elimden geldiği kadarıyla açıklayıcı yapmaya çalıştım umarım bir yanlışlık yapmamışımdır şimdiden herkese kolay gelsin !
Vidyo cekmeyi sevdigim icin vidyo da benden olsun.
http://youtu.be/c9UU8CFPRlc (http://youtu.be/c9UU8CFPRlc)
Alıntı yapılan: Z3r0nU11 - 14 Ocak 2015 - 19:59:44
Vidyo cekmeyi sevdigim icin vidyo da benden olsun.
http://youtu.be/c9UU8CFPRlc (http://youtu.be/c9UU8CFPRlc)
Video için teşekkürler çok güzel olmuş. Aslında şifre dosyasını encrypt etmeliydim herneyse ilk örnek için gayet yeterli ve eğlenceli oldu bir sonraki örnek daha çok uğraştıracak tekrar teşekkür ederim @Z3r0nU11 :)
Alıntı yapılan: Reverser - 14 Ocak 2015 - 20:46:36
Alıntı yapılan: Z3r0nU11 - 14 Ocak 2015 - 19:59:44
Vidyo cekmeyi sevdigim icin vidyo da benden olsun.
http://youtu.be/c9UU8CFPRlc (http://youtu.be/c9UU8CFPRlc)
Video için teşekkürler çok güzel olmuş. Aslında şifre dosyasını encrypt etmeliydim herneyse ilk örnek için gayet yeterli ve eğlenceli oldu bir sonraki örnek daha çok uğraştıracak tekrar teşekkür ederim @Z3r0nU11 :)
Aslinda senaryo seklinde ben de hazirlamak isterim ama forum kurallari geregi sorun olabilir .Yonetime sormak lazim.Ilgilenen de bulmak lazim tabi kendin pisir kendin ye de olmaz :)
ilgilenen mutlaka çıkacaktır da forum kuralları açısından nasıl olur bilmiyorum daha doğrusu ne olabilir ?
Alıntı yapılan: Reverser - 14 Ocak 2015 - 20:56:47
ilgilenen mutlaka çıkacaktır da forum kuralları açısından nasıl olur bilmiyorum daha doğrusu ne olabilir ?
Konu hakkinda yonetimden bilgi talep edebiliriz aslinda.Neyse @heartmagic okuyunca konu hakkinda bilgi verecektir bize.Olmadi ozelden bir sorariz.Iyicene crack forumuna donmesin sonra :)
Alıntı yapılan: Z3r0nU11 - 14 Ocak 2015 - 21:09:15
Alıntı yapılan: Reverser - 14 Ocak 2015 - 20:56:47
ilgilenen mutlaka çıkacaktır da forum kuralları açısından nasıl olur bilmiyorum daha doğrusu ne olabilir ?
Konu hakkinda yonetimden bilgi talep edebiliriz aslinda.Neyse @heartmagic okuyunca konu hakkinda bilgi verecektir bize.Olmadi ozelden bir sorariz.Iyicene crack forumuna donmesin sonra :)
Kendi yazdığımız uygulamalar üzerinde çalışıyoruz sorun olacağını sanmıyorum yinede @heartsmagic'in geri dönüşünü bekleyelim o halde.
Konu bu şekilde devam ettiği sürece kendi adıma hiçbir sorun olmaz. Netice olarak "crack" mevzunun temeli de dile, kodlamaya bakan bir şey ve ortada olan bir şeyi yasaklamanın bir anlamı yok. Haliyle bu ve benzeri bir başlıkta da "X uygulamasının kırılması lazım bana" diyen de çıkmayacağına göre sorun olacağını düşünmüyorum.
Fakat, konu tek başıma karar verebileceğim bir konu değil, ben fikir yürütebilecek insanlardan sadece birisiyim. Arkadaşlardan da fikir alır, eğer bir sorun olursa konuya tekrar dönüş yaparım veya kendileri de yorum yapabilirler elbette.
"Tersine kod mühendisliği"ne vakıf olmasam da soruya verilen açıklamalı cevaplarınızı okumak, bunların yapılışının videosunu seyretmek çok zevkli. :)
Tesekkur ederim hocam cozum icin.
Alıntı yapılan: kodadiirem - 16 Ocak 2015 - 02:40:57
"Tersine kod mühendisliği"ne vakıf olmasam da soruya verilen açıklamalı cevaplarınızı okumak, bunların yapılışının videosunu seyretmek çok zevkli. :)
Alıntı yapılan: h454n - 17 Ocak 2015 - 00:53:27
Tesekkur ederim hocam cozum icin.
rica ederim konunun ilgi görmesi çok güzel. Yeni bir crack_me hazırlayıp, ilerleyen günlerde paylaşmayı düşünüyorum reverse engineering ile ilgilenenlerin haberi olsun.
Sabirsizlikla bekliyorum hocam...
Bu paylasimda benden olsun.
http://s3.dosya.tc/server30/aH4p0m/crackme1.zip.html (http://s3.dosya.tc/server30/aH4p0m/crackme1.zip.html)
Alıntı yapılan: Z3r0nU11 - 17 Ocak 2015 - 18:38:55
Bu paylasimda benden olsun.
http://s3.dosya.tc/server30/aH4p0m/crackme1.zip.html (http://s3.dosya.tc/server30/aH4p0m/crackme1.zip.html)
Uygulamaya gdb üzerinden müdahale etmek neredeyse mümkün değil en azından ben şimdilik bir yol bulamadım. @Z3r0nU11 gdb ile müdahale etmek mümkün mü ?
b *0x8048091
Denemekte fayda var. :)
Alıntı yapılan: Z3r0nU11 - 18 Ocak 2015 - 16:08:39
b *0x8048091
Denemekte fayda var. :)
entry point'e ulaşamadım bir türlü teşekkürler :D stripped oluşu çok zahmetli...
0x8048091
bu adrese nasıl ulaştınız açıklayabilir misiniz ?
readelf -l crackme
Elf file type is EXEC (Executable file)
Entry point 0x8048091
There are 2 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000074 0x08048074 0x08048074 0x00126 0x00126 R E 0x1000
LOAD 0x00019a 0x0804919a 0x0804919a 0x00100 0x00100 RW 0x1000
Alıntı yapılan: Z3r0nU11 - 18 Ocak 2015 - 16:56:31
readelf -l crackme
Elf file type is EXEC (Executable file)
Entry point 0x8048091
There are 2 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000074 0x08048074 0x08048074 0x00126 0x00126 R E 0x1000
LOAD 0x00019a 0x0804919a 0x0804919a 0x00100 0x00100 RW 0x1000
main'e ulaştım yalnız şöyle bir şey var password sorgusunu düzenlediğim zaman password yanlış olsada herhangi bir şey olmuyor program sonlanıyor bu kadar mı ? Yani, No dışında göreceğim bir string var mı ? "password:" ve "No" dışında başka bir string bulamadım.
Özetleyecek olursak, şifre doğruysa return 0 ile program sonlandırılıyor mu ? Bunu öğrenmek istiyorum.
Dogru sifre de "OK" string var.
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FJ7VORo.png&hash=588a481a34545018f34e9424af03273ed334aaae) (http://hizliresim.com/J7VORo)
Alıntı yapılan: Z3r0nU11 - 18 Ocak 2015 - 18:44:09
Dogru sifre de "OK" string var.
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FJ7VORo.png&hash=588a481a34545018f34e9424af03273ed334aaae) (http://hizliresim.com/J7VORo)
crackme analiz
1)main
=> 0x8048091: call 0x8048074
0x8048096: mov $0x801919b,%eax
0x804809b: mov $0x13,%edx
0x80480a0: call 0x8048115
0x80480a5: mov $0x80491ad,%ecx
0x80480aa: mov $0xb,%edx
0x80480af: call 0x8048115
0x80480b4: mov $0x3,%eax
0x80480b9: mov $0x1,%ebx
0x80480be: mov $0x80491d8,%ecx
0x80480c3: mov $0x8,%edx
0x80480c8: int $0x80
0x80480ca: call 0x8048122
0x80480cf: mov $0x9,%ecx
0x80480d4: call 0x8048185
0x80480d9: mov $0x4,%ecx
0x80480de: mov $0x8048096,%esi
0x80480e3: mov $0x8049289,%edi
0x80480e8: repz cmpsb %es:(%edi),%ds:(%esi)
0x80480ea: je 0x80480fd
0x80480ec: mov $0x8048157,%ecx
0x80480f1: mov $0x4,%edx
0x80480f6: call 0x8048115
0x80480fb: jmp 0x804810c
0x80480fd: mov $0x8048142,%ecx
0x8048102: mov $0x4,%edx
0x8048107: call 0x8048115
0x804810c: mov $0x1,%eax
0x8048111: xor %ebx,%ebx
0x8048113: int $0x80
password stringi
0x80491ad
No stringi
0x8048157
scanf() ?
0x8048185
Asıl önemli kısım
0x80480de: mov $0x8048096,%esi
0x80480e3: mov $0x8049289,%edi
0x80480e8: repz cmpsb %es:(%edi),%ds:(%esi)
0x80480ea: je 0x80480fd
OK stringine ulaşmak için gerekli olan adres
0x80480ea
Adresin dökümü
0x80480ea: je 0x80480fd
0x80480ec: mov $0x8048157,%ecx
0x80480f1: mov $0x4,%edx
0x80480f6: call 0x8048115
0x80480fb: jmp 0x804810c
0x80480fd: mov $0x8048142,%ecx
0x8048102: mov $0x4,%edx
0x8048107: call 0x8048115
0x804810c: mov $0x1,%eax
0x8048111: xor %ebx,%ebx
0x8048113: int $0x80
0x8048115: mov $0x4,%eax
0x804811a: mov $0x1,%ebx
0x804811f: int $0x80
0x8048121: ret
sifre?
Alıntı yapılan: Z3r0nU11 - 19 Ocak 2015 - 00:07:51
sifre?
Şifreye ulaşamadım ama şifre sorgusunu bypass edebiliyorum. ip ucu alabilir miyim ? :D
8048096
Kontrol sart... :)
Alıntı yapılan: Z3r0nU11 - 19 Ocak 2015 - 01:21:37
8048096
Kontrol sart... :)
Kontrol şart farkındayım önceki mesajımda da önemli yer olarak belirttim zaten ama çıkamadım işin içinden bir türlü :-X
4 bayt karsilastirma....
Alıntı yapılan: Z3r0nU11 - 19 Ocak 2015 - 01:40:46
4 bayt karsilastirma....
Çıkamadım işin içinden anlatırsanız çok sevinirim...
son 4 bayt karsilastirması
0x8048096
0x8049289
yukarıdakiler için mi ?
Kodlar;
0x08048079 BF0A810408 mov edi, 0x0804819a
0x0804807e 31C0 xor eax, eax
0x08048080 31DB xor ebx, ebx
0x08048082 8A1E mov bl, byte ptr [esi]
0x08048084 01D8 add eax, ebx
0x08048086 46 inc esi
0x08048087 39FE cmp esi,edi
0x08048089 76F5 jbe 0x08048080
0x0804808b A392920408 mov dword ptr [0x08049292],eax
0x08048090 C3 ret
0x08048091 B8FEFFFFFF call section.ehdr
0x08048074() ; section.phdr0
0x08048096 B89B910108 mov eax, 0x801919b
0x0804809b BA13000000 mov edx, 0x13
0x080480a0 E870000000 call 0x8048115
0x08048115() ; section_end.ehdr
0x080480a5 B9AD910408 mov ecx, 0x80491ad ; "Password: " @ 0x80491ad
0x080480aa BA0B000000 mov edx, 0xb
0x080480af E861000000 call 0x8048115
0x08048115() ; section_end.ehdr
0x080480b4 B803000000 mov eax, 3
0x080480b9 BB01000000 mov ebx, 1
0x080480be B9D8910408 mov ecx, 0x80491d8
0x080480c3 BA08000000 mov edx, 8
0x080480c8 CD80 int 0x80
0x080480ca E853000000 call 0x8048122
0x08048122() ; section_end.ehdr
0x080480cf B909000000 mov ecx, 9
0x080480d4 E8AC000000 call 0x8048185
0x08048185() ; section_end.ehdr
0x080480d9 B904000000 mov ecx, 4
0x080480de BE96800408 mov esi, 0x8048096
0x080480e3 BF89920408 mov edi, 0x8049289
0x080480e8 F3A6 rep cmpsb byte [esi], byte ptr es:[edi]
0x080480ea 7411 je 0x80480fd
0x080480ec B957810408 mov ecx, 0x8048157
0x080480f1 BA04000000 mov edx, 4
0x080480f6 E81A000000 call 0x8048115
0x08048115() ; section_end.ehdr
0x080480fb EB0F jmp 0x804810c
0x080480fd B942810408 mov ecx, 0x8048142
0x08048102 BA04000000 mov edx, 4
0x08048107 E809000000 call 0x8048115
0x08048115() ; section_end.ehdr
0x0804810c B801000000 mov eax, 1
0x08048111 31DB xor ebx, ebx
0x08048113 CD80 int 0x80
0x08048115 B804000000 mov eax, 4
0x0804811a BB01000000 mov ebx, 1
0x0804811f CD80 int 0x80
0x08048121 C3 ret
0x08048122 8B2D96920408 mov ebp, dword [0x8049296] ; [:4]=0xffffff00
0x08048128 BBE8800408 mov ebx, 0x80480e8
0x0804812d BF01000000 mov edi, 1
0x08048132 8B03 mov eax, dword [ebx]
0x08048134 31E8 xor eax, ebp
0x08048136 75D4 jne 0x804810c
0x08048138 BDD8910408 mov ebp, 0x80491d8
0x0804813d B8B8910408 mov eax, 0x80491b8
0x08048142 4F dec edi
0x08048143 4B dec ebx
0x08048144 0A00 or al, byte [eax]
0x08048146 31DB xor ebx, ebx
0x08048148 BE01000000 mov esi, 1
0x0804814d 83ff00 cmp edi, 0
0x08048150 740E je 0x8048160
0x08048152 B8BC910408 mov eax, 0x80491bc
0x08048157 4E dec esi
0x08048158 6F outsd dx, dword [esi]
0x08048159 0A00 or al, byte [eax]
0x0804815b 83FE00 cmp esi, 0
0x0804815e 751E jne 0x804817e
0x08048160 8B4500 mov eax, dword [ebp]
0x08048163 25FF000000 and eax, 0xff
0x08048168 3C46 cmp al, 0x46 ; 'F'
0x0804816a 7712 ja 0x804817e
0x0804816c 2C30 sub al, 0x30
0x0804816e 720E jb 0x804817e
0x08048170 3C0A cmp al, 0xa
0x08048172 7202 jb 0x8048176
0x08048174 2C07 sub al, 7
0x08048176 C1E304 shl ebx, 4
0x08048179 01C3 add ebx, eax
0x0804817b 45 inc ebp
0x0804817c EBE2 jmp 0x8048160
0x0804817e 891D89920408 mov dword [0x8049289], ebx ; [:4]=0xffffff00
0x08048184 C3 ret
0x08048185 BBCE9A5713 mov ebx, 0x13579ace
0x0804818a B8B8910408 mov eax, 0x80491b8
0x0804818f 3118 xor dword [eax], ebx
Cozum;
0x08048079 BF0A810408 mov edi, 0x0804819a
0x0804807e 31C0 xor eax, eax
0x08048080 31DB xor ebx, ebx
0x08048082 8A1E mov bl, byte ptr [esi]
0x08048084 01D8 add eax, ebx
0x08048086 46 inc esi
0x08048087 39FE cmp esi,edi
0x08048089 76F5 jbe 0x08048080
0x0804808b A392920408 mov dword ptr [0x08049292],eax
0x08048090 C3 ret
Yukarida ki islem kodu da bastan baslayarak dword 804819A daha az olana kadar
depolanir
0x0804808b A392920408 mov dword ptr [0x08049292],eax
Sonra
0x08049292 adresinde hex degere donustur.
0x08048122 8B2D96920408 mov ebp, dword [0x8049296] ; [:4]=0xffffff00
0x08048128 BBE8800408 mov ebx, 0x80480e8
0x0804812d BF01000000 mov edi, 1
0x08048132 8B03 mov eax, dword [ebx]
0x08048134 31E8 xor eax, ebp
0x08048136 75D4 jne 0x804810c
0x08048138 BDD8910408 mov ebp, 0x80491d8
0x0804813d B8B8910408 mov eax, 0x80491b8
0x08048142 4F dec edi
0x08048143 4B dec ebx
0x08048144 0A00 or al, byte [eax]
0x08048146 31DB xor ebx, ebx
0x08048148 BE01000000 mov esi, 1
0x0804814d 83FF00 cmp edi, 0
0x08048150 740E je 0x8048160
0x08048152 B8BC910408 mov eax, 0x80491bc
0x08048157 4E dec esi
0x08048158 6F outsd dx, dword [esi]
0x08048159 0A00 or al, byte [eax]
0x0804815b 83FE00 cmp esi, 0
0x0804815e 751E jne 0x804817e
0x08048160 8B4500 mov eax, dword [ebp]
0x08048163 25FF000000 and eax, 0xff
0x08048168 3C46 cmp al, 0x46 ; 'F'
0x0804816a 7712 ja 0x804817e
0x0804816c 2C30 sub al, 0x30
0x0804816e 720E jb 0x804817e
0x08048170 3C0A cmp al, 0xa
0x08048172 7202 jb 0x8048176
0x08048174 2C07 sub al, 7
0x08048176 C1E304 shl ebx, 4
0x08048179 01C3 add ebx, eax
0x0804817b 45 inc ebp
0x0804817c EBE2 jmp 0x8048160
0x08048142 4F dec edi
0x08048143 4B dec ebx
0x08048144 0A00 or al, byte [eax]
0x08048146 31DB xor ebx, ebx
0x08048148 BE01000000 mov esi, 1
0x0804814d 83FG00 cmp edi, 0
0x08048150 740E je 0x8048160
4F O OK
4B K
0A 00 or al, [eax]
0x08048157 4E dec esi
0x08048158 6F outsd dx, dword [esi]
0x08048159 0A00 or al, byte [eax]
0x0804815b 83FE00 cmp esi, 0
0x0804815e 751E jne 0x804817e
4E N NO
6F O
0A 00 or al, [eax]
Sifre Kontrolu
girilen degeri 0x08048096 adreste 4 bayti karsilastir.
0x080480d9 B904000000 mov ecx, 4
0x080480de BE96800408 mov esi, 0x8048096
0x080480e3 BF89920408 mov edi, 0x8049289
0x080480e8 F3A6 rep cmpsb byte [esi], byte ptr es:[edi]
0x080480ea 7411 je 0x80480fd
0x080480ec B957810408 mov ecx, 0x8048157
0x080480f1 BA04000000 mov edx, 4
0x080480f6 E81A000000 call 0x8048115
0x08048115() ; section_end.ehdr
0x080480fb EB0F jmp 0x804810c
0x080480fd B942810408 mov ecx, 0x8048142
0x08048102 BA04000000 mov edx, 4
0x08048107 E809000000 call 0x8048115
0x08048115() ; section_end.ehdr
0x0804810c B801000000 mov eax, 1
0x08048111 31DB xor ebx, ebx
0x08048113 CD80 int 0x80
0x08048115 B804000000 mov eax, 4
0x0804811a BB01000000 mov ebx, 1
0x0804811f CD80 int 0x80
Iste little endian farki :)
0x08048096 B89B910108 mov eax, 0x801919B
B89B9101
01919BB8
mutlu son(sifre)
Yama offset'i 0x-080480e8
0x080480e8 f3a6 rep cmpsb byte [esi], byte ptr es:[edi]
0x080480ea 7411 je 0x80480fd
Benden bu kadar vidyo sizden olsun bu sefer.
Teşekkürler anlatım için gdb kullanımı sırasında nasıl olduysa bu baytları hiç endian olarak değerlendirmedim hatta bir ara hex değerleri decimal değerlere dönüştürdüm şu anda çözüme ulaştım zaman bulduğumda video eklerim
Düzeltme:
Video eklendi: http://s3.dosya.tc/server30/Paxlwy/crackme.ogv.zip.html
Vidyo icin tesekkur ederim.
Alıntı yapılan: Z3r0nU11 - 19 Ocak 2015 - 18:57:40
Vidyo icin tesekkur ederim.
Rica ederim hocam, unutmadan crackme kaynak kodunu paylaşabilir misiniz ?
:) Programlama dili zaten asm.
Alıntı yapılan: Z3r0nU11 - 19 Ocak 2015 - 22:55:35
:) Programlama dili zaten asm.
Saf ASM halini merak etmiştim
Online vidyo
http://youtu.be/woDfWvsBU_w (http://youtu.be/woDfWvsBU_w)
Olayi kacirmisiz iyimi :)
ama herkese cok tesekkur ederim. Guzel olmus.
Devamini bekliyorum...
Bu sefer ki biraz farkli olsun istedim ve olabildigince basite kactim.
Program icine flag yerlestirdim.
Bakalim kim cozecek. :)
Ugrasmak isteyenler icin kiyida kose de dursun.
http://www.dosya.tc/server38/eWDJjM/crackme2.zip.html (http://www.dosya.tc/server38/eWDJjM/crackme2.zip.html)
İlerleyen saatlere doğru linux makinam'da inceleyeceğim istenen nedir ?
Amac program icinde ki kelimeyi bulmak.
Çok fazla bakma imkanım olmadı fakat anladığım kadarıyla "g&ue+2|w}z" şeklinde bir string var. Bu string bir buffer içine alınıyor daha sonra bir for döngüsü ile bu stringin karakter sayısı kadar(10) döngü işliyor ardından tam olarak anlayamadığım bir decrypting algoritması ile (xor gibi duruyor) işleniyor.
psuedo code
//i döngü elemanı str_len();
string = string_a(&buffer,i);
string_a = string ^ (signed int x) + (i) % 34);
umarım doğrudur geldiğim yere kadar :D
Evet dogru @Reverser.(xor)
Cok kolay mi? oldu ne :)
Algoritmayı doğru anlamışım demek ki yalnız,
Alıntı yapılan: 84d80y5 - 12 Şubat 2015 - 20:24:27
Amac program icinde ki kelimeyi bulmak.
demiştiniz ben henüz düzgün bir kelime elde edemedim.
Cok zor olmasa gerek sonucta encrypto bir kelime yok.
Kelime zaten decrypto edilmis. Nereye saklanabilirki :)
Kafam karıştı... Kelimeyi bulmak derken "Cok gizli aman ha kimse gormesin :D"
bu mesajdan bahsediyor olamazsınız herhâlde ? Zira flag koydum demiştiniz strings aramasında ortaya çıkan tek anlamlı string bu.
Yok o kadar da basit yapmadim. :)
g&ue+2|w}z
string decrypto ediliyor ve aciga cikiyor. Iste bizim aradigimiz flag ta kendisi :)
Tamam o halde sorun yok :)
Abi ne yapıyorsunuz siz ya :) . Mesaj burda dursun , konuyu musait zamanımda baştan okuyacağım . Çok eğlenceli duruyor ve eğleniyor görünüyorsunuz :)
Alıntı yapılan: karboran - 13 Şubat 2015 - 16:27:25
Abi ne yapıyorsunuz siz ya :) . Mesaj burda dursun , konuyu musait zamanımda baştan okuyacağım . Çok eğlenceli duruyor ve eğleniyor görünüyorsunuz :)
Hocam buyrun sizide bekleriz katılım az oldu. :)
Alıntı yapılan: 84d80y5 - 13 Şubat 2015 - 04:22:38
Yok o kadar da basit yapmadim. :)
g&ue+2|w}z
string decrypto ediliyor ve aciga cikiyor. Iste bizim aradigimiz flag ta kendisi :)
Flag'a ulaşmam yeterli mi değil mi şimdi ? Zira, decrypt işlemi flag ve flag karakter sayısı olan 10 ile işlendiğinde ortaya anlamlı bir şey çıkmıyor.
psuedo code
for(i = 0; i < strlen(); i++)
{
cikti[i] = flag[i]^key[i];
}
key "(signed int) 65535" olabilir mi ?
Alıntı yapılan: Reverser - 13 Şubat 2015 - 16:39:23
Flag'a ulaşmam yeterli mi değil mi şimdi ? Zira, decrypt işlemi flag ve flag karakter sayısı olan 10 ile işlendiğinde ortaya anlamlı bir şey çıkmıyor.
psuedo code
for(i = 0; i < strlen(); i++)
{
cikti[i] = flag[i]^key[i];
}
key "(signed int) 65535" olabilir mi ?
g&ue+2|w}z encrypt kelimemiz.
Ne oluyor du decrypt ediiyordu.
Decrypt edilen kelime anlamli bir kelimedir.(Bu kesin :) )
kelime cozulmus olrak sizin onu bulmanizi bekliyor.
Gelelim verdiginiz flag'in ne olduguna
Değiştirici = signed
Veri Türü = int
Alabileceği maksimum değer = 65535
Bu durumda kelime olamaz herhalde. :) Keygen Meygen olaylarina hic girmiyorum kafa karismasin diye o yuzden program icinde cozdum.
Tavsiyem programi gerekirse defalarca calistirin adim adim analiz(buraya dikkat) edin sonucta kelime cozuldukten sonra bir adreste saklaniyordur :)
o değer ile kelime tutamaz tabii ki :)
key = "xxxy" (ya da "yxxx" little endian)
string = "g&ue+2|w}z"
10 tekrar ile şifreye ulaşamıyorum. Amacım memory adresi üzerinden şifreye ulaşmak değil şimdilik. Bu mantığı C koduna çevirip, şifreye ulaşmak.
Simdiden kolay gelsin.
Biraz kostek olayim o zaman :)
for(i = 0; i < strlen(); i++)
Burada islem sonrasi arttirma var ya ben islem oncesi yaptiysam. Olabilir mi? :)
key = "xxxy" (ya da "yxxx" little endian)
Evet bir anahtar tanimlamasi bulunmakta.(08048972)
Bu kadar bilgi yeterli.Diger eksikler icin muracatlar asm amca. optimusbraynlar yaniltabilir :)
optimusbrayn derken :D ? Bu arada işlem öncesi zaten psuedo yu yanlış yazmışım ++i şeklinde.
İyi akşamlar,
Bende bir zamanlar Asm'ye bakmıştım. Karmaşayı görünce bıraktım. http://crackmes.de/ http://www.sctzine.com/crackme/ gibi sitelerden bahseden hiç olmamış. Ben yazayım dedim. Şu anlatımda başlangıç için yeterli görünüyor: http://abdullahog.lu/index.php/hoo-assembly/assembly-giristen-once-son-cikis
Alıntı yapılan: karakartala - 14 Şubat 2015 - 23:14:35
İyi akşamlar,
Bende bir zamanlar Asm'ye bakmıştım. Karmaşayı görünce bıraktım. http://crackmes.de/ http://www.sctzine.com/crackme/ gibi sitelerden bahseden hiç olmamış. Ben yazayım dedim. Şu anlatımda başlangıç için yeterli görünüyor: http://abdullahog.lu/index.php/hoo-assembly/assembly-giristen-once-son-cikis
Crackme.de adlı siteden haberim var bilmeyenler için iyi oldu bildirim için teşekkürler.
ASM öğrenmesi pek kolay degil çünkü anlaşılması daha doğrusu, okunması biraz zor.
Alıntı yapılan: karakartala - 14 Şubat 2015 - 23:14:35
İyi akşamlar,
Bende bir zamanlar Asm'ye bakmıştım. Karmaşayı görünce bıraktım. http://crackmes.de/ http://www.sctzine.com/crackme/ gibi sitelerden bahseden hiç olmamış. Ben yazayım dedim. Şu anlatımda başlangıç için yeterli görünüyor: http://abdullahog.lu/index.php/hoo-assembly/assembly-giristen-once-son-cikis
Bilgi icin tesekkurler @karakartala.
Kendisinin yazilarini okumuslugum var sahsen. Ozellkle kernel bolumu.
decrypted text: knim ?
:( Uzgunum.
10 harften olusuyor kendileri.
Bu arada
Sayin Mert SARICA hocamiz odullu bir yarisma duzenliyor .
Pi hediyem var adli.
Biz burada hediye veremiyoruz :(
Yanliz katilim sarti universite ogrencisi olmak.
Crackme'yi cozun, Raspi'nin B modelini kapin.
Katilacak herkese kolay gelsin.
Adres:https://www.mertsarica.com/pi-hediyem-var/ (https://www.mertsarica.com/pi-hediyem-var/)
Kendilerini severek takip ediyorum.
Hocam gercekten de bir kelime var mi ya :)
ara ara hicbirsey bulamadim ben.
Ayrica paylastiginiz odullu yarismaya baktim hocam benim harcim degil :)
Daha zip dosyasini acamadim birde crackme'yi cozmek var.Kim bilir o crackme de ne entrikalar var :)
Sonuc hazirlayan ahlakli korsan :)
@84d80y5, hocam sistem değiştirdiğim için bakamadım bir süre sizden biraz daha zaman rica ediyorum çözümü paylaşmak gibi bir planınız varsa :)
@h454n
Son ipucunu veriyorum.
Programin sonlarina dogru breakpoint atayarak calistrin sonra kelimeyi bulmaya calisin ki encrypt olan kelime decrypt olsun.
@Reverser
Zaman bol senin isin de zor. :)
Hocam verdiğiniz son ipucundan sonra buldum kelimeyi :)
Kaç gündür ne uğraştırdı hocam bu ya:)
(gdb) > x/s 0x804a084
0x804a084: "s3cr3+flag"
Tebrikler @h454n dogru flag :)
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 26 Şubat 2015 - 00:31:19
Bu arada Sayin Mert SARICA hocamizin odullu yarismasinla ilgilenen var mi?
28 subat son gun.
Cok zor mu? yapmis ne :)
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2Fbl6gDd.png&hash=d29b463c69248b3177ca039cd7f6ffc58b53da1d) (http://hizliresim.com/bl6gDd)
Basitinden bende bir tane crackme ekleyim sayın hocalarım.
Çok kolay bir crackme oldu ama en azından boş kalmasın burası.
http://s4.dosya.tc/server/3ZScm3/crackme_test.zip.html (http://s4.dosya.tc/server/3ZScm3/crackme_test.zip.html)
Alıntı yapılan: Reverser - 14 Şubat 2015 - 19:26:34
optimusbrayn derken :D ? Bu arada işlem öncesi zaten psuedo yu yanlış yazmışım ++i şeklinde.
optimus prime ' dır o :)
Alıntı yapılan: h454n - 08 Mart 2015 - 00:24:19
Basitinden bende bir tane crackme ekleyim sayın hocalarım.
Çok kolay bir crackme oldu ama en azından boş kalmasın burası.
http://s4.dosya.tc/server/3ZScm3/crackme_test.zip.html (http://s4.dosya.tc/server/3ZScm3/crackme_test.zip.html)
//Reversed source code -Reverser
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char string[10];
int value;
printf("Dogru cevap nedir: ");
scanf("%s",&string);
if(strcmp(string, "deneme") == 0) // ret val if=0 ise string1 = string2
{
printf("Supersin");
}
else
{
printf("Cok kotusun, daha iyi olabilirdin.\n");
}
return 0;
}
Fazla basit olmuş :D
gdb'ye yükleyebildiniz mi? hocam.
Anti debug tekniği kullanmıstım. :)
Nasıl aştığınızı anlatırsanız çok iyi olur.
@h454n cok zamete girmissin ama stringlerde de sifre gorunuyor ;)
Alıntı yapılan: 84d80y5 - 08 Mart 2015 - 20:17:54
@h454n cok zamete girmissin ama stringlerde de sifre gorunuyor ;)
aynen öyle string araması ile ortaya çıkıyor zaten şifre. Stripped olsaydı biraz daha uğraşırdık breakpoint ile aşılabilir ptrace(); kontrol fonksiyonu.
@Reverser paylasimlardan elinizi cektiniz.
Gerci ben islerimi biraz hafifleteyim guzel bir crackme hazirlamayi dusunuyorum.
soyle yanarli donerli bol entrika ve aksiyonlu :)
icinde ne arasaniz bol bol serpecem pack anti-debug vs.
Ugrasmak isteyen de cikacak mi bi de o var ama dursun kiyida kosede.
Duzenleme:
Neyse ben yatmadan once bir paylasim da bulunayim.
http://s5.dosya.tc/server/U2c0ae/crackme3.zip.html (http://s5.dosya.tc/server/U2c0ae/crackme3.zip.html)
bu sefer ipucu falan yok cok cabuk cozuluyor sonra.
Yakinda yazilim yetistiremiyecez :)
işlerim çok yoğun bu aralar ama aklımda... Paylaşacağım bende güzel bir crackme. Bu arada yine uğraştıracak bir crackme paylaşmışsınız şöyle bir cipher buldum
0123456789abcdef
bakalım çözebilecekmiyiz :)
@Reverser;
Dogrudur biraz ugrastiracak cinsten kendisi. :)
Unutmadan bu arada Ufak bir kac degisiklik yaptim.
Yeni adresi↵
http://s2.dosya.tc/server/mkl0xg/crackme3.zip.html (http://s2.dosya.tc/server/mkl0xg/crackme3.zip.html)
Duzenleme;
Biraz kelimesi hafif kalabilir :)
Alıntı yapılan: 84d80y5 - 09 Mart 2015 - 23:44:29
@Reverser;
Dogrudur biraz ugrastiracak cinsten kendisi. :)
Unutmadan bu arada Ufak bir kac degisiklik yaptim.
Yeni adresi↵
http://s2.dosya.tc/server/mkl0xg/crackme3.zip.html (http://s2.dosya.tc/server/mkl0xg/crackme3.zip.html)
Duzenleme;
Biraz kelimesi hafif kalabilir :)
Çoklu fonksiyonlar görüyorum... Hocam peki bu kadar komplike olmayan başka crackmeler oluştursak ? Seviye yükselince katılımda olmuyor sanki. Yani işi biraz daha basite indirgesek ve zaman ilerledikçe üstüne bir şeyler koydukça seviyeyi yükseltsek daha iyi olabilir gibi siz ne düşünüyorsunuz ?
Olur aslinda yada paylasimlara seviye de getirebiliriz.
1,2,3 gibi
3 yuksek bilgi
2 orta seviye
Vs gibi.
Surekli basit yapmakta ilgi kaybina neden olabilir diye dusunuyorum ben yada yanlis dusunup sogutuyor da olabilirim. Bilemedim.
(Gerci ben son crackme de cok abartmisim kabul ediyorum)
Bu konuda kararsizim ben size birakiyorum basit diyorsaniz basit hazirlayalim.
Alıntı yapılan: 84d80y5 - 10 Mart 2015 - 00:25:01
Olur aslinda yada paylasimlara seviye de getirebiliriz.
1,2,3 gibi
3 yuksek bilgi
2 orta seviye
Vs gibi.
Surekli basit yapmakta ilgi kaybina neden olabilir diye dusunuyorum ben yada yanlis dusunup sogutuyor da olabilirim. Bilemedim.
(Gerci ben son crackme de cok abartmisim kabul ediyorum)
Bu konuda kararsizim ben size birakiyorum basit diyorsaniz basit hazirlayalim.
Yok hocam estağfurullah, hakkını veriyorsunuz bu işin :D Bana kalırsa seviyeli yapalım en basitten başlayalım. Hello world falan değil de, matematiksel işlemler, döngüler temel compare işlemi jumplar gibi.. ?
Sayin Mert SARICA hocamizin yarismasini paylasmistim buradan.
Simdi hazir vaktim varken vidyosunu cekip paylasmak istedim.
Ben biraz farkli yol izlemistim cunku.Belki ayni yolu izleyenlerde vardir bilmiyorum.
http://youtu.be/4g7-qk3Os9k (http://youtu.be/4g7-qk3Os9k)
ilk reverse_me yi paylaşıyorum arkadaşlar özel olarak herhangi bir derleme methodu kullanılmadı seviye olarak çok kolay tek yapmanız gereken gdb ile açmanız ASM kodunu anlamanız ve ASM kodunu C ya da benzeri başka bir dile çevirmeniz. Konun başlığı ile tam ilişkili olarak bu sefer ASM kodunu başka bir dile çevirmenizi istiyorum. Katılım oldukça ve bir önce paylaştığım dosya reverse edildikce seviye yükselecek.
ekran görüntüsü:
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2Fq4nJgD.png&hash=80669b7d3b7eeb7cc71db888bb6ec5b9842f7145)
reverse_me hakkında bilgi:
ELF Başlığı:
Sihir: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Sınıf: ELF32
Veri: 2's complement, little endian
Sürüm: 1 (current)
OS/ABI: UNIX - System V
ABI Sürümü: 0
Tip: UYGU (Uygulama dosyası)
Makine: Intel 80386
Sürüm: 0x1
Girdi noktası adresi: 0x8048320
Yazılım başlıkları başlangıcı: 52 (bayt dosya içinde)
Bölüm başlıkları başlangıcı: 4428 (bayt dosya içinde)
Seçenekler: 0x0
Bu başlığın boyu: 52 (bayt)
Yazılım başlık boyu: 32 (bayt)
Number of program headers: 9
Bölüm başlık boyu: 40 (bayt)
Bölüm başlıkları sayısı: 30
Bölüm başlığı dizge tablo endeksi: 27
indirme bağlantısı: http://s5.dosya.tc/server/kqLnnI/reverse1.zip.html
Seriye bagladim :)
#include <stdint.h>
#include <stdio.h>
int main(int argc, char ** argv) {
puts("\x52\x65\x76\x65\x72\x73\x65\x5F\x6D\x65\x20\x4E\x6F\x3A\x20\x30\x31\x0A\x53\x65\x76\x69\x79\x65\x20\x5B\x4B\x6F\x6C\x61\x79\x5D\x0A\x69\x73\x74\x65\x6E\x65\x6E\x3A\x20\x41\x53\x4D\x20\x6B\x6F\x64\x75\x6E\x75\x2C\x20\x43\x20\x79\x61\x20\x64\x61\x20\x62\x65\x6E\x7A\x65\x72\x69\x20\x62\x61\xC5\x9F\x6B\x61\x20\x62\x69\x72\x20\x64\x69\x6C\x65\x20\xC3\xA7\x65\x76\x69\x72\x6D\x65\x6B\x2E\x0A\x2D\x52\x65\x76\x65\x72\x73\x65\x72\x2E");
return 0;
}
Alıntı yapılan: 84d80y5 - 14 Mart 2015 - 00:23:16
Seriye bagladim :)
#include <stdint.h>
#include <stdio.h>
int main(int argc, char ** argv) {
puts("\x52\x65\x76\x65\x72\x73\x65\x5F\x6D\x65\x20\x4E\x6F\x3A\x20\x30\x31\x0A\x53\x65\x76\x69\x79\x65\x20\x5B\x4B\x6F\x6C\x61\x79\x5D\x0A\x69\x73\x74\x65\x6E\x65\x6E\x3A\x20\x41\x53\x4D\x20\x6B\x6F\x64\x75\x6E\x75\x2C\x20\x43\x20\x79\x61\x20\x64\x61\x20\x62\x65\x6E\x7A\x65\x72\x69\x20\x62\x61\xC5\x9F\x6B\x61\x20\x62\x69\x72\x20\x64\x69\x6C\x65\x20\xC3\xA7\x65\x76\x69\x72\x6D\x65\x6B\x2E\x0A\x2D\x52\x65\x76\x65\x72\x73\x65\x72\x2E");
return 0;
}
Hocam eminim çoktan halletmişsinizdir siz. Katılım yapacak arkadaşlar için, yukarıda ki gibi shellcode şeklinde değilde normal şekilde(okunabilir halde) ya da en azından psuedo kod bekliyorum.
Edit: @84d80y5, eksik olmuş bu arada geri kalanı nerede ? yazı çevrilmeyecek tabii ki :)
Tablet ile online servis araciyla bu kadar.
Kalani pc basinda. :) Tam inceleme sansim olmadi ne yazik ki. :( insallah musait bir zamanda.
Bu kopyala yapistir sadece :)
Online servisler de is yapiyormus ya ben bu kadar zannetmiyordur yaklassin. :)
konsol şart :)
Evet konsol birde egitim sart :)
çözüm için bekleyeyim mi biraz daha ?
Bir şey soracam bu işi nasıl yapıyorsunuz. Yani hangi prıogram tersine çeviriyor.
@nurullahisrgan, sadece GDB kullanarak disassemble edilmiş assembly kodunu, okuması daha kolay olan başka bir dile çeviriyoruz.
Çözüm:
Kendi yazdığım binary'i reverse etmem biraz komik oldu ama olsun en azından merak edenler ya da başlamak isteyenler için en kolay haliyle anlatıyorum.
Dump of assembler code for function main:
0x0804841d <+0>: push %ebp
0x0804841e <+1>: mov %esp,%ebp
0x08048420 <+3>: and $0xfffffff0,%esp
0x08048423 <+6>: sub $0x20,%esp
0x08048426 <+9>: movl $0xf,0x14(%esp)
0x0804842e <+17>: movl $0x5,0x18(%esp)
0x08048436 <+25>: movl $0x80484f0,(%esp)
0x0804843d <+32>: call 0x80482f0 <puts@plt>
0x08048442 <+37>: mov 0x18(%esp),%eax
0x08048446 <+41>: mov 0x14(%esp),%edx
0x0804844a <+45>: add %edx,%eax
0x0804844c <+47>: mov %eax,0x1c(%esp)
0x08048450 <+51>: mov $0x0,%eax
0x08048455 <+56>: leave
0x08048456 <+57>: ret
End of assembler dump.
reverse1 sadece main fonksiyondan oluşuyor ve dikkatli bakıldığında sadece toplama işlemi yaptığı anlaşılıyor.
0x0804844a <+45>: add %edx,%eax
hangi iki değeri topladığını bulmak için toplama işlemine breakpoint koyuyoruz. (rutin, program toplama işlemi yapamadan kırılacak)
b *0x0804844a
ardından run ile devam ediyoruz.
run
sonrasında info reg ile registerları ve değerlerini göreceğiz.
info reg
eax 0x5 5
ecx 0xb7fd8000 -1208123392
edx 0xf 15
ebx 0xb7fc1000 -1208217600
esp 0xbffff100 0xbffff100
ebp 0xbffff128 0xbffff128
esi 0x0 0
edi 0x0 0
eip 0x804844a 0x804844a <main+45>
eflags 0x282 [ SF IF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
eax ve edx'in değerlerine dikkat ! [eax -> 0x5 5] - [edx -> 0xf 15] bu durumda toplanan iki adet değerinde integer olduğunu birinin 5, diğerin 15 olduğunu söylemek mümkün. Birde toplama işleminden hemen sonra eax'ın değerine bakalım. :)
eax 0x14 20
ecx 0xb7fd8000 -1208123392
edx 0xf 15
ebx 0xb7fc1000 -1208217600
esp 0xbffff100 0xbffff100
ebp 0xbffff128 0xbffff128
esi 0x0 0
edi 0x0 0
eip 0x804844c 0x804844c <main+47>
eflags 0x216 [ PF AF IF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
görüldüğü gibi
eax 0x14 20
bu durumda şöyle kod yazılabilir.
//reversed source code
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int eax = 0x5; // 5
int edx = 0xf; // 15
int toplam;
toplam = eax + edx;
}
derleyip, çalıştırırsak Process returned 20 (0x14) uyarısını görebiliriz. :)
Dip Not: Yeni başlayanlar için, çok güzel bir örnek oldu. Bundan sonraki seri bu şekilde kolaydan başlayıp zor'a doğru devam edecek bu nedenle merak eden herkesin katılımını bekliyorum.
Hocam, bu gdbyle nasıl gösteriyoruz dissamble kodunu. Dün birşeyler yaptım ama sonuç 0
önceki mesajlarda video paylaşmıştım şuradan ulaşabilirsin. [1] Google'da fazlasıyla örnek mevcut.
[1] http://s3.dosya.tc/server30/Paxlwy/crackme.ogv.zip.html
örnek:
gdb reverse1
disas main
dersen main'i disassemble edersin.
<html>
<head>
<script>
function foo(e) {
var srchstr = new RegExp(document.getElementById("srchstr").value,'gi');
var replstr = document.getElementById("replstr").value;
var infile = document.getElementById('input').files[0];
var reader = new FileReader();
reader.addEventListener("loadend", function() {
var str = reader.result;
document.getElementById("intext").innerHTML = str;
var newstr = str.replace(srchstr,replstr);
document.getElementById("outtext").innerHTML = newstr;
window.location.href = "data:application/x-download;charset=utf-8," + encodeURIComponent(newstr);
});
reader.readAsText(document.getElementById("input").files[0]);
};
</script>
</head>
<body >
<h4>Select a Text File</h4>
<input type="file" id="input" onchange="foo(this.files)" ></input>
<h4> Enter Search String </h4>
<input type="text" id="srchstr"> </input>
<h4> Enter Replace String </h4>
<input type="text" id="replstr"> </input>
<pre><h4> PreMod PostMod </h4></pre>
<textarea id = "intext" rows ="9" cols = "8" > </textarea>
<textarea id = "outtext" rows ="9" cols = "8" > </textarea>
</body>
</html>
@ata, Amaç nedir ? Ayrıca lütfen code etiketi içinde paylaş.
tamam haklısın etıketlere alısamadım
FileWriter standart olmayan şimdi geri isimli yazma şekilde ??
ama mod veri indirilebilir kullanarak uri (HACK)
Alıntı yapılan: ata - 20 Mart 2015 - 19:54:42
tamam haklısın etıketlere alısamadım
FileWriter standart olmayan şimdi geri isimli yazma şekilde ??
ama mod veri indirilebilir kullanarak uri (HACK)
dafuq what u mean rofl ?
Alıntı yapılan: ata - 20 Mart 2015 - 19:54:42
tamam haklısın etıketlere alısamadım
FileWriter standart olmayan şimdi geri isimli yazma şekilde ??
ama mod veri indirilebilir kullanarak uri (HACK)
Robot sanırım. Google translate ile mesaj yazıyor olabilir. Paylaştığı Js kodunun konunun alakası yok.
Bu arada tersine kod mühendisliği ile usb sürücülü oyuncağı nasıl kullanılacağını anlatan bir yazı mevcut. İlginç bir yazı.
http://www.linuxvoice.com/drive-it-yourself-usb-car-6/
Hocam adam aynı şu durum olmuş
'the person you have loved cannot be reached at the moment, please try again later' :D
aslında foruma post atmadan önce stackflowover'daki gibi arada yapmak lazım 'Ben Robot Değilim' diye bir chech :D
mesajı atmış kaçmış gibi gözüküyor daha çok :D
Arkadaşın bu başlıktan sonra birçok iletisi var. Artık buraya dönüp ne amaçladığını yazar mı bilemiyorum tabi.
Alıntı yapılan: Reverserönceki mesajlarda video paylaşmıştım şuradan ulaşabilirsin. [1] Google'da fazlasıyla örnek mevcut.
[1] http://s3.dosya.tc/server30/Paxlwy/crackme.ogv.zip.html
örnek:
Kod: [Seç]gdb reverse1
Kod: [Seç]disas main
dersen main'i disassemble edersin.
Çok teşekkürler.
Yarın bir crack_me paylaşırım.
Alıntı yapılan: ReverserAlıntı yapılan: nurullahisrgan - 23 Mart 2015 - 16:53:25Yarın bir crack_me paylaşırım.
bugün paylaşın
Dün yanımda değildi buyrun indirme linki:
http://s2.dosya.tc/server/neEbA3/crack_me.zip.htmlİstenen: Bir sayı var, ve bu sayıya bir işlem yapılıp yeni sonuc sonuc değişkenine aktarılıyor. Bu sayıyı, yapılan işlemi ve sonucu bulunuz.
Edit: Yanlışlıkla windowtaki dosyası aktarmışım sorun olur mu acaba.
Benim icin sıkıntı yok eve gecince bakicam cozumu bulan paylasmasin hemen :D
Alıntı yapılan: ReverserBenim icin sıkıntı yok eve gecince bakicam cozumu bulan paylasmasin hemen
Bu arada çözümü nasıl yaptığınızı da anlatır mısınız? bulunca. Çünkü ben sonuç değişkenini bulamadım.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 24 Mart 2015 - 16:23:38
Sorun çıkarsa ubuntu için:
http://s2.dosya.tc/server/zSKzdm/crack_me.zip.html
Cozum
push ebp
mov ebp, esp
sub esp, 0x10
{
mov dword [ss:ebp+var_8], 0x6
mov eax, dword [ss:ebp+var_8]
imul eax, dword [ss:ebp+var_8]
mov dword [ss:ebp+var_4], eax
a = 6
b = a * a
mov eax, 0x0
leave
ret
return 0;
}
Sonuc b =36
hocam keşke direkt paylaşmasaydınız tam ben paylaşıyordum. :D
//Reversed source code
#include <stdio.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
int val = 0x6;
int total = val * val; //0x24 - 36
return 0;
}
değişkeni bulmak için break point kullanın ilk hali 6.
b *0x080483fb
çarpma işleminden sonrası için
b *0x080483ff
Aslinda vaktim yoktu @Reverser.
Ama bir goz atinca incelemis oldum.Inceleyince de paylasmamak olmaz :)
@84d80y5, haklısın hocam herneyse aynı kapıya çıkıyor sonuçta. :)
Alıntı yapılan: nurullahisrganYarın bir crack_me paylaşırım.
Yalniz bu crackme olmamis.Daha dogrusu crackme demek dogru olmaz.Sadece belirtmek istedim.
Aynen daha çok "reverse me" olmuş.
Vallah ben de bilmiyorum ne olduğunu neyse bende buldum. for döngüsü kullanılmış bir programı bulabiliyor musunuz?
Evet buluyoruz bir tane daha bekliyoruz sizden.
Onu da yarına aktarırım. GDB kullanımı için ingilizce dersler var googlede türkçe varsa bir link ile belirtebilir misiniz?
Edit: İngilizce olarak en güzeli burası bence: http://visualgdb.com/gdbreference/commands/disassemble
kaynak için teşekkürler bilmeyen arkadaşlar için faydalı olacaktır.
Basit bir crackme.
6a, 75' e karsi :) + birde parolalari bulabilirsiniz :)_
http://s3.dosya.tc/server/m8wkuh/crackme_game.zip.html (http://s3.dosya.tc/server/m8wkuh/crackme_game.zip.html)
Hadi iki tane benden old,sun. Zorluk seviyesi zor.
http://s2.dosya.tc/server/MNc3GE/ornek.zip.html
Burada istenen for içinde dönen kodu bulunuz.
http://s2.dosya.tc/server/MNc3GE/ornek2.zip.html
Burada c ve i ilk değer atanmamış iki değer. i for için. toplam 10 döngü gerçekleştiriliyor. Ekrana ilk olarak 1 ve 2 yazılıyor ardından gelenler bunun devamı olacaktır. Bunu c veya başka bir dile çeviriniz.
Bunları henüz çözmedim eve gidince bugün uğraşırım.
@84d80y5 bugün onunla da uğraşırım.
Basit bir crackme zaten @nurullahisrgan
Sizinkilerin ben kodlarini paylasayim.
ornek
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i;
int j;
for ( i = 0; i != 9; ++i )
{
for ( j = 0; j != 9; ++j )
printf("(%d, %d) ", i, j);
putchar(10);
}
return 0;
}
ornek2
#include <stdio.h>
#include <stdio.h>
int main(int argc, const char *argv[])
{
int v;
signed int i;
signed int a;
signed int b;
a = 1;
b = 2;
printf("%d \n%d \n", 1, 2);
for ( i = 1; i <= 14; ++i )
{
v = a + b;
a = b;
b = v;
}
return 0;
}
yine geç kalmışım.... hocam keşke birini çevirseydiniz....
Ben sizi goremeyince ikisini de aradan cikartayim dedim :)
crackme var.
ü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;
}
}
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.
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;
}
}
Ben şu şifreyi nasıl bulduğunuzu anlamadım. Yarın 5-6 tane paylaşacağım.
@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ı:
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FGvOOB7.png&hash=bce319edfca5ae1dca4a75647741ecaf435c4565)
indirme bağlantısı: http://s5.dosya.tc/server/mFAVdb/pwn_it.zip.html
@Reverser sifrenin 16 karakter olmasi yeterli.fazlasi puff :)
@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.
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
evet farketmiştim yukarıda belirttiğim gibi strcpy(); fonksiyonunu görünce direkt aklıma buffer overflow geldi. :)
1-> http://s2.dosya.tc/server2/OVJGSP/string.zip.html
2-> http://s2.dosya.tc/server2/OVJGSP/ogrkuyruk.zip.html
3-> http://s2.dosya.tc/server2/OVJGSP/ornek.zip.html
4-> http://s2.dosya.tc/server2/OVJGSP/sifre.zip.html
5-> http://s2.dosya.tc/server2/OVJGSP/asal.zip.html
İstenen: Paylaşımları C veya daha farklı bir dile çevirmek. Kodlar 2-3 tanesi C++ ile yazıldı.
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.
@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.
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.
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.
Mesaji yeni gördüm gözümden kaçmış konu bu aralar sessiz kaldı.
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.
tamamdır, beklemedeyiz. :)
Alıntı yapılan: Reversertamamdır, beklemedeyiz.
ogrkuyruk.zip'i çözdünüz mü?
ç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.
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.
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
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 (http://s3.dosya.tc/server3/pd7xpf/orthesaplama.zip.html)
@betseg, programı 32bit olarak derleme imkanınız var mı acaba ?
@Reverser http://www.dosya.tc/server2/f9zz8s/ort32.zip.html (http://www.dosya.tc/server2/f9zz8s/ort32.zip.html) umarım olmuştur.
olmamış ne yazık ki... http://www.cyberciti.biz/tips/compile-32bit-application-using-gcc-64-bit-linux.html
Geç yanıt yüzünden özür dilerim. Umarım bu sefer olmuştur. gcc-multilib indirdim. http://www.dosya.tc/server2/q8un5b/ort32.zip.html (http://www.dosya.tc/server2/q8un5b/ort32.zip.html)
Alıntı yapılan: betseg - 03 Temmuz 2015 - 21:57:37
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 (http://s3.dosya.tc/server3/pd7xpf/orthesaplama.zip.html)
Girilen iki rakamın toplamını ikiye mi bölüyor?
@ekremsenturk değil :)
olmuş bu sefer :)
//Reversed source code - Reverser
//file: ort32 x86
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
float x,y;
double z;
printf("ORTALAMA HESAPLAMA\nBir sayi girin:");
scanf("%f",&x);
printf("Baska bir sayi girin:");
scanf("%f",&y);
z = sqrt(x * y + (y - x) / 2.0 * (y - x) / 2.0);
printf("Ortalamalari: %.1f\n",z);
return 0;
}
Böyle aslında: sqrt( gb * gi + ( ( ( gi - gb ) / 2 * ( ( gi - gb ) / 2 ) ) ) )
gb=girilen birinci sayı
gi=girilen ikinci sayı
:)
y - 3 değil y - x. x yerine 3 yazdınız herhalde.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 04 Temmuz 2015 - 01:15:47
Neden bu kadar parantez var derseniz, parantez olmayınca gcc hata verdi. Nedenini bilmiyorum.
disassemble ederken değerleri d1,d2,d3 şeklinde kenara not alıyorum yanlış geçirmişim :) y - x olacak tabii ki.
Bu denklemi nasıl buldum, bilmiyorum. Bir anda aklıma geliverdi. Ortalama almak için oldukça uzun bir yöntem.
olsun, güzel oldu konu canlansın :) var mı biraz daha ?
@Reverser c de bu olayın nasıl yapıldığına dair bizi biraz bilgilendirebilirsen iyi olur diye düşünüyorum ? Basit bi örneği anlatarak yapabilirsin mesela. Şahsım adına makbule geçer :)
@karboran, readelf, strace ve özellikle GDB kullanarak assembly okuyup, anladıktan sonra C diline çeviriyorum işin aslı bu. Önceki sayfalarda bir kaç örnek paylaşmıştım, sonrasında katılım pek olmadığı için paylaşımda bulunmadım.
@Reverser dikkatimden kaçmış demekki , bi bakayım ben paylaştıklarınıza . Teşekkürler :)
@Reverser mayıstaki reverse_me ne acaba? time, srand, rand filan gördüm ama çözemedim :D
inan ben de bilmiyorum üzerinden uzun zaman geçmiş bir bakalım.
//Reversed source code - Reverser
//file: reverse_me x86
#include <stdio.h>
#include <stdlib.h>
int resolver(int param_0);
//0x0804849d main
int main(int argc, char *argv[])
{
srand(time(NULL));
int number;
printf("Reverser*");
number = rand() % 10 + 1;
resolver(number);
return 0;
}
//0x08048507 resolver
int resolver(int param_0)
{
return (param_0 + 2) * (param_0 + 5);
}
Amaç: can sıkıntısını gidermek
İstek: üsttekiyle aynı
http://s2.dosya.tc/server2/ah71p0/negatiftenpozitife.zip.html (http://s2.dosya.tc/server2/ah71p0/negatiftenpozitife.zip.html)
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 04 Temmuz 2015 - 18:02:55
Not: ondalık basamak sorunu olmasın diye tamsayı girilmesini istedim programda.
merhaba, 32bitlik versiyonda sıkıntı var sanırım. Execute ve disassemble edemedim. Her neyse, 64 bitlik olanı inceledim sonuç aşağıda.
//Reversed source code - Reverser
//file: negatiftenpozitife x64
#include <math.h>
#include <stdint.h>
#include <stdio.h>
int main(int argc, char *argv) {
printf("NEGATIF SAYIYI POZITIFE CEVIRME\nNegatif bir tamsayi girin: ");
float v0;
scanf("%f",&v0);
pow(v0,2);
printf("Pozitif hali: %.0f",v0 * -v0 / v0);
}
Dip not: programda bug mevcut pozitif girersem negatif çıktı veriyor gözünüzden kaçtı sanırım.
Üs alma filan olduğu için pozitif yazınca daha büyük bir pozitif sayı çıkar diye düşünmüştüm ama yanılmışım. Ayrıca öyle değildi :)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define k 2
int main(int argc, char *argv[])
{
float g;
printf("NEGATIF SAYIYI POZITIFE CEVIRME\nNegatif bir tamsayi girin: ");
scanf("%f",&g);
float s1 = pow(g,k);
float s2 = s1 / g;
float s3 = g - g - g;
float s4 = s2 * s3 / g;
printf("Pozitif hali: %.0f\n",s4);
return 0;
}
Tam olarak aynısı olamaz zaten. Çünkü benzer işlemler benzer assembly çıktılarını verebiliyor.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 05 Temmuz 2015 - 15:38:56
basit bir işlem bu da benden olsun.
http://www.dosya.tc/server2/riaj1o/reverse_me_x.zip.html
1-2 saat içinde bakıyorum.
İpucu:
20 satır. İki fonksiyon var. sadece <stdio.h> include edilmiş. Ufak bir hile yaptım. Bol şans :D
http://s2.dosya.tc/server2/uglrg8/a.zip.html
Not: Hayatımda ikinci kez assembly'yi anlamaya çalışıyorum. Hatta ilk C programımı da 2 hafta önce yazdım.
main'de puts("Reverser*");
var.
Sanırım 8*12+1 yapılıyor _start_fake'de.
Başka da bir şey bilmiyorum. :D
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 05 Temmuz 2015 - 16:40:25
Hatta bunları bildiğimden bile şüpheliyim :D
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 05 Temmuz 2015 - 16:44:03
@thoron 42 :)
@betseg, hayır :D biraz daha uğraş bakalım ne çıkacak ?
@thoron, dosyayı 32 bit olarak paylaşabilir misiniz ?
5*12 de olabilir. Şimdi şeyettim.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 05 Temmuz 2015 - 16:58:47
gcc-multilib indirip gcc a.c -m32 -o a32
yaparsanız 32 bit olur.
@Reverser
Hm, o kod hazırda vardı. 32 bit için uğraşmam gerek biraz. Kısaca fonksiyonun döneceği yerin adresini arttırıp satır atlıyordu. Haliyle disas edince değerin değiştiğini görecektiniz ama fonksiyon o satıra dönmeyeceğinden o satır yokmuş gibi çıktı verecekti. Gıcık bi koddu :D Mimari değişince cortladı tabi. :)
@betseg
;D
Buldum! 5*3+1
@betseg, doğru ! Kod haline çevirin şimdi :D
http://s2.dosya.tc/server2/69wwiy/asdfg.zip.html (http://s2.dosya.tc/server2/69wwiy/asdfg.zip.html) İşsizlikte sınır tanımıyorum :D
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 05 Temmuz 2015 - 18:28:42
Kod haline çevirin yazdığınızı görmemişim.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 05 Temmuz 2015 - 18:43:49
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
puts("Reverser*");
return _start_fake(5,3);
}
int _start_fake(int a, int b) {
return a * b + 1;
}
İnternette biraz bakındım "C examples" yazdım, bunun gibileri derleyip çalıştırdım ve bunun doğru olduğuna karar verdim. Olmuş mu?
@betseg, verdiğiniz programın kaynak kodu (muhtemelen siz, değişkenleri structure kullanmadan direkt main scope içinde tanımladınız. Ben structure kullanmayı sevdiğim için bu şekilde tanımladım.)
//Reversed source code - Reverser
//file asdfg32 x86
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct elemanlar { float x; float y; double z; } elemanlar;
int main(int argc, char *argv[])
{
elemanlar elemanlar;
printf("GEOMETRIK ORTALAMA HESAPLAMA\nBir sayi girin: ");
scanf("%f",&elemanlar.x);
printf("Baska bir sayi girin: ");
scanf("%f",&elemanlar.y);
pow((elemanlar.y - elemanlar.x) * 0.5, 2.0);
elemanlar.z = sqrt(elemanlar.x * elemanlar.y);
printf("Ortalamalari: %.5f\n",elemanlar.z);
return 0;
}
size verdiğim reverse_me'nin kaynak kodu ise şu şekilde:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("Reverser*\n");
int x;
int y;
x = 5;
y = 3;
_start_fake(x,y);
}
int _start_fake(int x, int y)
{
return x * y + 1;
}
pow((elemanlar.y - elemanlar.x) * 0.5, 2.0);
elemanlar.z = sqrt(elemanlar.x * elemanlar.y);
printf("Ortalamalari: %.5f\n",elemanlar.z);
burayı uzatmıştım ama yanlış dosyayı vermişim :D
pow((elemanlar.y - elemanlar.x) * 0.5, 2.0);
bunun sonuçla alakası olmadığını anlamışsınızdır.
anladım ama bozmayayım dedim :D Diğerinide atabilirsiniz.
http://www.dosya.tc/server2/vrxzff/asdfg.zip.html (http://www.dosya.tc/server2/vrxzff/asdfg.zip.html)
Buyurun efinim.
İlk paylaştığım denklem gerçekten bir anda aklıma geldi ama sonrakiler zorlama.
biraz fazla değişken var ama olsun.
//Reversed source code - Reverser
//file asdfg32 x86
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct elemanlar
{
double unk0;
double unk1;
double unk2;
double unk3;
double unk4;
float unk6;
float unk7;
float unk8;
float unk9;
float unk10;
float unk11;
}elemanlar;
int main(int argc, char *argv[])
{
elemanlar elemanlar;
printf("GEOMETRİK ORTALAMA HESAPLAMA\nBir sayi girin: ");
scanf("%f",&elemanlar.unk7);
printf("Baska bir sayi girin: ");
scanf("%f",&elemanlar.unk6);
elemanlar.unk11 = pow((elemanlar.unk6 - elemanlar.unk7) * 0.5, 4.0);
elemanlar.unk10 = elemanlar.unk11 + elemanlar.unk11;
elemanlar.unk0 = sqrt(elemanlar.unk11);
elemanlar.unk1 = sqrt(elemanlar.unk0);
elemanlar.unk9 = elemanlar.unk1 + elemanlar.unk1 + elemanlar.unk7;
elemanlar.unk2 = sqrt(elemanlar.unk11);
elemanlar.unk3 = sqrt(elemanlar.unk2);
elemanlar.unk8 = elemanlar.unk3 + elemanlar.unk3 + elemanlar.unk7 + elemanlar.unk7 - elemanlar.unk6;
elemanlar.unk4 = sqrt(elemanlar.unk9 * elemanlar.unk8);
printf("Ortalamalari: %.5f\n", elemanlar.unk4);
return 0;
}
#include <math.h>
#include <stdint.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("GEOMETRİK ORTALAMA HESAPLAMA\nBir sayi girin: ");
float a; scanf("%f", &a);
printf("Baska bir sayi girin: ");
float b; scanf("%f", &b);
float c; c = pow(0.5 * (b - a), 4);
float d; d = c * 2;
float y; y = (sqrt(sqrt(c)) * 2) + a;
float z; z = (sqrt(sqrt(c)) * 2) + 2 * a - b;
printf("Ortalamalari: %.5f\n", sqrt(y * z));
return 0;
}
Böyleydi. İyice karıştırmışım :D
@betseg, biraz. :)
Biraz mola verelim, gece güzel bir reverse_me paylaşacağım.
Gece olmadı mı? :)
Böyle bir şey yaptım: http://s2.dosya.tc/server2/0kztlt/a2.zip.html (http://s2.dosya.tc/server2/0kztlt/a2.zip.html)
@betseg, işlerim vardı haledicem. :)
Onun dışında assembly okuyorum ama doğru olmayan şeyler var, kodlamanda hatalar var gibi.
Bu örnek için kod paylaşamayacağım, çünkü mantık operatörlerine bir anlam veremedim ayrıca mantık operatörleriyle birlikte bolca if kullanılmış ama else yok gibi.
Program hakkında (a2-86) detaylıca bilgi vereyim;
iki adet fonksiyon var
1-)0x0804847b main();
2-)0x080486aa ic();
3-)45 sayısı ic(); fonksiyonunu çağırıyor. 832414 sayısı ise, "doğru şifre" yazdırıyor.
4-)program içinde filtrelenilen diğer sayılar ise şu şekilde;
832414
sifre dogru!
832413
dokua
34961304
garir .eyler..P
42
42!!!
45
mrb
832413
dokua
34961304
garir .eyler..P
42
42!!!
45
mrb
34961304
garir .eyler..P
45
mrb
41
sonuc yok.
Bozmuşum ya düzeltmeye çalışırken. dokua değil dokuz (evet, dokuz :D ), garir .eyler..P değil "garip seyler..." yapmaya çalışmıştım. 41 değil de, o sayılar harici her şeye sonuc yok yazıyor.
if-else:
if (i == a + 2) {} // 832414
else if (i == a + 1) {} // 832413
else if (i == (c - b) * a + d * a) {} // 34961304
else if (i == d) {} // 42
else if (i == d + (g / 2)) {ic();} // 45
else {} // diğer tüm sayılar
ic:
printf("mrb\n");
return 0;
dokuz olduğunu tahmin etmiştim :D tam kaynak kodu görebilir miyim ?
#include <stdio.h>
#include <stdlib.h>
#define a 832412
#define b 888842
#define c 888842
#define d 42
#define g 6
#define h 5
float i;
int main(int argc, char const *argv[]) {
char f = 'f';
char s = 's';
char o = 'o';
char u = 'u';
char n = '.';
char z = 'a';
char l = 'l';
char q = 'g';
char r = 'r';
char w = 'd';
char y = 'y';
char x = 'i';
printf("Reverse me pl0x\n");
printf("But first, bir sayi yaz bakalim...\n");
scanf("%f", &i);
if (i == a + 2) {
printf("%c%c%c%ce %c%c%c%c%c!\n", s, x, f, r, w, o, q, r, u);
}
else if (i == a + 1) {
printf("%c%ck%c%c\n", w, o, u, z);
}
else if (i == (c - b) * a + d * a) {
printf("%c%c%c%c%c %ceyler%c%c%c\n",q, z, r, x, r, n, n, n);
}
else if (i == d) {
printf("42!!!\n");
}
else if (i == d + (g / 2)) {
ic();
}
else {
printf("%c%cn%cc y%ck%c\n", s, o, u, o, n, n, n);
}
return 0;
}
int ic(int argc, char const *argv[]) {
printf("mrb\n");
return 0;
}
Bayağı bir hile yaptım bence :D
g ve h ile bir şeyler yapacaktım ama olmadı, kaldırmayı da unutmuşum.
paylaştığın her dosyadan keyif aldım açıkcası :D
Bu arada ic(); fonksiyonunu bu şekilde değil de,
int ic(int argc, char const *argv[])
{
//
}
bu şekilde yazarsan daha soğru olur zira ic(); fonksiyonu hiç argüman almıyor.
int ic()
{
//
}
hatırlatma: "int argc, char const *argv[]" sıklıkla main fonksiyon içindir ve konsoldan direkt argüman atamak için kullanılır.
Bilmiyordum, sağ ol. Daha önce de dediğim gibi C'ye başlayalı 2 hafta oldu.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 06 Temmuz 2015 - 03:03:36
Bu arada bunu yazmak için 3 saat filan uğraştım :D
Programlama olayına ilk fırsatta girmek istiyorum. Başlığı gördükçe imreniyorum :)
@neynefes, sizi de aramızda görmek isteriz. :)
yeni dosyayı paylaşıyorum, bakalım neler çıkacak bu sefer ? :D
[1] http://s2.dosya.tc/server2/65xk65/reverse_meh.zip.html
2 kere giriş istiyor bu, ama ilk girişe göre işlem yapıyor. Sorun ne?#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[]) {
int s;
puts("Reverse_meh*\nEnter an integer");
scanf("%i\n", &s);
pwn_it(s);
}
int pwn_it(int s){
while (s >= 0) {
printf("%d\n", s);
s--;
}
}
#include <stdio.h>
#include <stdlib.h>
int pwn_it(int x);
int main(int argc, char *argv[])
{
int x;
printf("Reverse_meh*\nEnter an integer\n");
scanf("%d",&x);
pwn_it(x);
return 0;
}
int pwn_it(int x)
{
for(x=x;x>=0;x--)
{
printf("%d\n",x);
}
}
Sorunu buldum. Benim kodda scanf("%i\n", &s);
var. \n 'yi kaldırınca çözülüyor.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 06 Temmuz 2015 - 15:55:43
Uçbirimle uğraşmayı, C ve CSS yazmayı çok seviyorum ben ya. Ama çoğu insan bunlar için beni garipsiyor :D
iki haftaya göre hızlı gidiyor gibisin. :D
garipsenecek bir şey yok, herkesin ilgi alanı farklı ben de seviyorum uç birimi. Biraz geç cevap verdim kusura bakma.
HTML, CSS ve JS'yi 5 haftada öğrendim, biraz JS de bildiğimden C kolay geldi. while, if-else vb JS ve C'de aynı.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 07 Temmuz 2015 - 03:39:13
http://www.dosya.tc/server2/oqhr0x/a3.zip.html (http://www.dosya.tc/server2/oqhr0x/a3.zip.html) çok küçük bir şey, amaç konu boş kalmasın.
//Reversed source code - Reverser
//file: a3-m32 x86
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
int integer, counter;
printf("Reverse me pl0x\nbut first, as always, write an integer");
scanf("%d",&integer);
for(counter = integer; counter >= 0; --counter)
{
if(counter == sqrt(counter))
{
printf("%d\n",integer);
}
else
{
//do_nothin
}
}
return 0;
}
//do_nothin :D
:) bu da benden olsun, bu sefer biraz uğraştıracak ama.
[1] http://s3.dosya.tc/server4/r51xrh/kick_me.zip.html
Alıntı YapThere is a hidden buffer.
Try to find me k ?
ama nerede bilmiyom :(
buldum: __init_array_end
Bu ne :D
Decompile yapmaya çalışırken Wikibooks Assembly sayfasına bakıyorum. Ama kick_me'dekibazı şeyler orada yok :D
Ayrıca, C'deki çoğu şey ibilmiyorum daha, sadece matematiksel işlemler, printf, scanf, if-else ve for gibi şeyler.
"There is a hidden buffer.
Try to find me k ?"
bufferın kendisi zaten :D Diğer fonksiyonları bekliyorum.
k then
strings ile buldum bu yazıyı.
İçlerini anlamıyorum çünkü dediğim gibi Wikibooks'ta olmayan şeyler var flds gibi.
Ama main var, pwn_it var, pwn_it_a ve pwn_it_b var.
Bunu da info functions ile buldum.
Floating point load olduğunu varsay. Bahsettiğin wiki sayfası burası mı ? https://en.wikipedia.org/wiki/X86_instruction_listings
Yok bu https://en.wikibooks.org/wiki/X86_Assembly (https://en.wikibooks.org/wiki/X86_Assembly) ama o da güzelmiş.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 07 Temmuz 2015 - 14:09:25
Ya hiç anlamıyorum sadece bakıyorum, Çinceye baksam daha çok şey anlarım.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 08 Temmuz 2015 - 01:18:08
O buffer nasıl oluyor? hexedit filan mı?
Ayrıca: http://www.dosya.tc/server2/si48u5/a4.zip.html (http://www.dosya.tc/server2/si48u5/a4.zip.html)
Hep yeni şeyler öğreniyorum :D
hexedit değil, sadece bufferlanmış ama ekrana bastırılmamış karakterler. :)
son verdiğin dosyada bug vardı düzelttim.
//Reversed source code - Reverser
//file: a4-i386 x86
#include <stdio.h>
#include <stdlib.h>
//Prototype
int islem(void);
//Globals
float unk_0;
float unk_1;
float unk_2;
//0x080484cd main
int main(int argc, char *argv[])
{
printf("1 ile 7 arasinda bir sayi girin");
scanf("%f",&unk_0);
if(unk_0 == 1.0)
{
printf("\x1B[31miyi secim\x1B[0m\n");
}
else if(unk_0 == 2.0)
{
printf("\x1B[32mguzel secim\x1B[0m\n");
}
else if(unk_0 == 3.0)
{
printf("\x1B[33mhos secim\x1B[0m\n");
}
else if(unk_0 == 4.0)
{
printf("\x1B[34mharika secim\x1B[0m\n");
}
else if(unk_0 == 5.0)
{
printf("\x1B[35mmuhtesem secim\x1B[0m\n");
}
else if(unk_0 == 6.0)
{
printf("\x1B[36mfevkalade secim\x1B[0m\n");
}
else if(unk_0 == 7.0)
{
printf("\x1B[37mkotu secim\x1B[0m\n");
}
else
{
printf("duzgun bisi yaz :D\n");
return -1; // --> Bug fix
}
islem();
return 0;
}
//0x0804863a islem
int islem(void)
{
printf("baska bi tane, ama buyuk olabilir");
scanf("%f",&unk_1);
if(unk_1 >= 0.0)
{
if(unk_1 <= 0.0)
{
printf("0");
}
else
{
unk_2 = unk_1 - 3.0;
printf("%.0f\n",unk_2);
}
}
else
{
unk_2 = unk_1 + 3.0;
printf("%.0f\n",unk_2);
}
}
Böyleydi, bug nerede?
#include <stdio.h>
#include <stdlib.h>
#define normal "\x1b[0m"
#define kirmizi "\x1b[31m"
#define yesil "\x1b[32m"
#define sari "\x1b[33m"
#define mavi "\x1b[34m"
#define mor "\x1b[35m"
#define turkuaz "\x1b[36m"
#define beyaz "\x1b[37m"
int main (int argc, char const *argv[]) {
float renk;
printf("1 ile 7 arasinda bir sayi girin\n");
scanf("%f", &renk);
if (renk == 1) {
printf(kirmizi "iyi secim" normal "\n");
}
else if (renk == 2) {
printf(yesil "guzel secim" normal "\n");
}
else if (renk == 3) {
printf(sari "hos secim" normal "\n");
}
else if (renk == 4) {
printf(mavi "harika secim" normal "\n");
}
else if (renk == 5) {
printf(mor "muhtesem secim" normal "\n");
}
else if (renk == 6) {
printf(turkuaz "fevkalade secim" normal "\n");
}
else if (renk == 7) {
printf(beyaz "kotu secim" normal "\n");
}
else {
printf("duzgun bisi yaz :D\n");
}
islem();
}
int islem() {
float isll;
float islll;
printf("baska bi tane, ama buyuk olabilir\n");
scanf("%f", &isll);
if (isll < 0) {
islll = isll + 3;
printf("%.0f\n", islll);
}
else if (isll > 0) {
islll = isll - 3;
printf("%.0f\n", islll);
}
else /*isll = 0)*/ {
printf("0\n");
}
return 0;
}
Burada (http://stackoverflow.com/questions/3219393/stdlib-and-colored-output-in-c) buldum.
Buffer'li kod nasil oluyor bi öyle atsana merak ettim.
else
{
printf("duzgun bisi yaz :D\n");
return -1; //burada
}
7 den büyük bir sayı yazarsan direkt olarak işleme geçiyor. Bu nedenle -1'e döndürdüm.
örnek olarak;
#define MAX 256
int main()
{
char buffer[MAX] = "TEST"
}
"yazsaydin" diye değiştirecektim, unuttum. Ama bu daha iyiymiş.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 09 Temmuz 2015 - 16:00:41
http://s2.dosya.tc/server2/h296er/a5.zip.html (http://s2.dosya.tc/server2/h296er/a5.zip.html)
Yenisi :D
47 dk sonra atsam mesaj tekrarı olmayacaktı galiba.
Hazir konu tekrar gundem de iken, ben de bir kod paylasayim.Bakalim kimler c yada diger dillere cevirecek.
file:reverse.asm
;BİTS 32
global main
extern putchar
extern getchar
main:
lea ecx, [esp+4H]
and esp, 0FFFFFFF0H
push dword [ecx-4H]
push ebp
mov ebp, esp
push ecx
sub esp, 20
call getchar
mov dword [ebp-0CH], eax
cmp dword [ebp-0CH], 10
jz kar
call main
kar:
sub esp, 12
push dword [ebp-0CH]
call putchar
add esp, 16
nop
mov ecx, dword [ebp-4H]
leave
lea esp, [ecx-4H]
ret
64bit sistem de 32 bit derleme(gcc-multilib)
nasm -f elf32 -o reverse.asm.o reverse.asm
gcc -m32 reverse.asm.o
aslında kar sadece putchar fonksiyonunu çağırıyor iki şekilde de olabilir ama 1. daha doğru.
1-)
//reversed source code - Reverser
//file: reverse.asm
#include <stdio.h>
#include <stdlib.h>
int main()
{
int str;
str = getchar();
if(str != 10)
{
putchar(str);
main();
}
else
{
//
}
}
2-)
//reversed source code - Reverser
//file: reverse.asm
#include <stdio.h>
#include <stdlib.h>
int main()
{
int str;
str = getchar();
if(str != 10)
{
kar(str);
main();
}
else
{
//
}
}
int kar(int str)
{
return putchar(str);
}
Suan teldeyim ama paylasilan iki kod da yanlis.
Asm kodu derleyip. Calistirdiniz mi?
Ya da soyle izah edeyim. Programin amaci cozuldu mu? Yazilimi calistirinca nasil bir islem yapiyor. Zira sizin kodlar ayni islemi yapacagini sanmiyorum.
Not- Kodlar denenmemistir.
evet, derledim ilki sizin dosyasınız ikincisi reverse edilen.
reverser@reverser ~/Masaüstü $ ./reverse
dddddddddddd
dddddddddddd
reverser@reverser ~/Masaüstü $ ./reversedasm
ddddddddddd
ddddddddddd
Programi calistirip test yazin oyle deneyiniz.
Farki goreceksiniz. :)
gözümden kaçmış, main fonksiyonu putchar'dan önce gelmeli. :D
//reversed source code - Reverser
//file: reverse.asm
#include <stdio.h>
#include <stdlib.h>
int main()
{
int str;
str = getchar();
if(str != 10)
{
main();
putchar(str);
}
else
{
//
}
}
Evet simdi olmus :)
c kod.
#include <stdio.h>
void main(void)
{
int kar;
If ((kar=getchar())!=`\n`)
main();
putchar(kar);
}
Tamamdır hocam dediğim gibi gözümden kaçmış. :))
Beyler konunuzu dagıtmak ıstemem ama bı sorum olacak bu void main(void) ne anlama gelıyor?
Daha dogrusu parantez ıcındekı voıd ın ne ıse yaradıgını anlamadım
@ShaoTT, void tipsiz demektir yani bir değişkenin (float,char,int) gibi tipi yoksa buna void denir.
örnek 1-) bu fonksiyon toplama işlemi yaptıktan sonra çağrıldığı yere toplamı döndürür.
int topla(int x, int y)
{
return x + y;
}
örnek 2-) bu fonksiyon herhangi bir değer döndürmediği için, dönüş değerinin tipi void olur.
void topla(int x, int y)
{
printf("%d",x+y);
}
Dip not: void, bir değişken tipi olarak da kullanılabilir. Son olarak, bu mesajım void konusunda attığım ilk ve son mesaj olsun lütfen. Kafanıza takılan başka bir şey varsa konu açıp sormanız daha iyi olacaktır.
Tesekkur ederim :)
@Reverser özel mesajda dosya input-output filan demiştin. Al sana böyle bir şey :)
http://s2.dosya.tc/server2/0ig41w/a6.zip.html (http://s2.dosya.tc/server2/0ig41w/a6.zip.html)
Guzel uygulama sevdim ben bunu :)
#include <stdio.h>
int main(int argc, const char *argv)
{
int yas;
char *ad;
int yil;
FILE *dosya;
int str;
FILE *stream;
char *filename;
filename = "onys.txt";
stream = fopen("onys.txt", "w");
if (stream)
{
str = remove(filename);
if (str)
{
printf("input dosyasi %s silinemedi (ustune yazilamiyor)\n", filename);
return 1;
}
printf("input dosyasi %s silindi (ustune yazilabiliyor)\n", filename);
}
fclose(stream);
dosya = fopen(filename, "w");
puts("Once adinizi sonra yasinizi girin:");
scanf("%s %d", &ad, &yas);
yil = yas + 10;
fprintf(dosya, "%s, %d yasinda, 10 yil sonra %d olacak", &ad, yas, yil);
fclose(dosya);
printf("\n10 yil sonra %d yasinda olacaksin\nonys.txt'ye bakmayi unutma\n", yil);
return 0;
}
cikti
./file
input dosyasi onys.txt silindi (ustune yazilabiliyor)
Once adinizi sonra yasinizi girin:
BenimAdimCokUzunCekirdekCitlerim
23233331122222222222222222222222222222
Segmentation fault (core dumped)
:)
./file
input dosyasi onys.txt silindi (ustune yazilabiliyor)
Once adinizi sonra yasinizi girin:
Efe 30
10 yil sonra 40 yasinda olacaksin
onys.txt'ye bakmayi unutma
$ cat onys.txt
Efe, 30 yasinda, 10 yil sonra 40 olacak
./file
input dosyasi onys.txt silindi (ustune yazilabiliyor)
Once adinizi sonra yasinizi girin:
efe ler
10 yil sonra 12 yasinda olacaksin
onys.txt'ye bakmayi unutma
Cat onys.txt
Efe, 2 yasinda, 10 yil sonra 12 olacak
:)
Efe ler
10 yıl sonra 12 yaşında ;D
:D
Şu an evde değilim eve gelince bendeki kodu yazarım.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 13 Temmuz 2015 - 22:09:12
Biliyorum çok noob bi kod :(
#include <stdio.h>
#include <stdlib.h>
int main() {
//ilk tanımlamalar
int sil;
char *girisDosyaAdi = "onys.txt";
char ad[10];
int yas;
//bitti
FILE *dosya1;
dosya1 = fopen(girisDosyaAdi, "w");
//dosya boş mu bakalım
if (dosya1 != NULL) {
sil = remove(girisDosyaAdi);
if (sil == 0) {
//boş değilse siliyor
printf("input dosyasi %s silindi (ustune yazilabiliyor)\n", girisDosyaAdi);
}
else {
//silemezse
printf("input dosyasi %s silinemedi (ustune yazilamiyor)\n", girisDosyaAdi);
return EXIT_FAILURE;
}
}
else {
//do nothin
}
fclose(dosya1);
//dosyaya adı, yaşı ve 10 yıl sonraki yaşı yaz
FILE *dosya2;
dosya2 = fopen(girisDosyaAdi, "w");
printf("Once adinizi sonra yasinizi girin:\n");
scanf("%s", &ad);
scanf("\n%d", &yas);
int onys = yas + 10;
fprintf(dosya2, "%s, %d yasinda, 10 yil sonra %d olacak", ad, yas, onys);
fclose(dosya2);
printf("\n10 yil sonra %d yasinda olacaksin\nonys.txt'ye bakmayi unutma\n", onys);
return 0;
}
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 14 Temmuz 2015 - 09:25:10
(Biliyorum mesaj tekrarı olacak)
Neden dosya boş mu diye kontrol etmeden sildi? Tamam, böyle daha iyi, bug programı düzeltti ama yanlış bir şey mi yaptım?
Basit bir tane gelsin..
File: reverse
Bits: 64
http://s3.dosya.tc/server4/8w8vli/reverse_me.zip.html (http://s3.dosya.tc/server4/8w8vli/reverse_me.zip.html)
hocam merhaba şöyle bir şey çıkardım
/*
Reversed source code - Reverse
file: reverse_me
entry point is: 0x4000b0
Dump of assembler code from 0x4000b0 to 0x400114:
=> 0x00000000004000b0 <_start+0>: mov $0xe,%edx
0x00000000004000b5 <_start+5>: mov $0x4000d2,%esi
0x00000000004000ba <_start+10>: mov $0x1,%edi
0x00000000004000bf <_start+15>: mov $0x1,%eax
0x00000000004000c4 <_start+20>: syscall
0x00000000004000c6 <_start+22>: mov $0x0,%edi
0x00000000004000cb <_start+27>: mov $0x3c,%eax
0x00000000004000d0 <_start+32>: syscall
(gdb) x/s 0x4000d2
0x4000d2: "Tersine kodla beni "
(gdb)
01 sys_write
03 sys_close
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/syscall.h>
#define MAX 256
int main(int argc, char *argv)
{
char buffer[MAX] = "Tersine kodla beni ";
write(0,buffer,14);
exit(0);
}
Merhaba @Reverser, tebrik ederim. Zaten yazilim da herhangi bir amac yoktu.Sadece biraz kafa karistirmak istedim.
C kod.
#include <sys/syscall.h>
#include <unistd.h>
int main(void)
{
syscall(SYS_write, 1, "Tersine kodla ", 14);
return 0;
}
Asm'ye cevrilmis kod.
#include <asm/unistd.h>
#include <syscall.h>
.file "reverse.S"
.section .rodata
text:
.string"Tersine kodla "
.text
.globl _start
.type _start, @function
_start:
## yaz bakalim
movl $14, %edx
movl $text, %esi
movl $1, %edi
movl $SYS_write, %eax
syscall
## bye bye de abiye ;)
movl $0, %edi
movl $SYS_exit, %eax
syscall
.size _start, .-_start
.section.note.GNU-stack,"",@progbits
Zaten yazilim strace ile incelendiginde bile sadece yazma islemi yaptigi gorulebilirdi.
strace -f ./reverse
execve("./reverse", ["./reverse"], [/* 119 vars */]) = 0
write(1, "Tersine kodla ", 14Tersine kodla ) = 14
_exit(0) = ?
+++ exited with 0 +++
Hocam strace ile write göremedim neden bilmiyorum syscall numaralarından buldum o nedenle. Dosya ve cevabınız için teşekkür ederim. :)
Rica ederim.Baska yazilimlar ile gorusmek dilegiyle.
Iyi forumlar...
Alıntı yapılan: betsegNeden dosya boş mu diye kontrol etmeden sildi? Tamam, böyle daha iyi, bug programı düzeltti ama yanlış bir şey mi yaptım?
Hala merak ediyorum :D
@betseg, tam olarak ne yapmak istediğini anlayamamış olduğumdan cevap verememiştim sana.
şöyle bir script yazdım umarım açıklayıcı ve öğretici olur
1-)test dosyası read modunda açılır
2-)dosya var mı yok mu bakılır.
3-)dosya varsa, fseek kullanılarak dosyanın tam olarak geçerli boyut file_size değişkenine atanır
4-)atanan değişken 0 ise gerekli işlem, 0 dan büyükse diğer bir gerekli işlem yapılır.
/*
File checking with actual file size
Reverser
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int file_size;
FILE *file_pointer;
file_pointer = fopen("test","r");
if (file_pointer == NULL)
{
//LOL
printf("There is no file.\n");
return -1;
}
fseek(file_pointer, 0, SEEK_END);
file_size = ftell(file_pointer);
fseek(file_pointer, 0, SEEK_SET);
printf("file size is: %d byte(s)\n",file_size);
if(file_size == 0)
{
printf("file is empty or 0 byte(s)\n");
//do sumthin'
}
else
{
printf("file is not empty or greater then 0 byte(s)\n");
//do_sumthin'
}
return 0;
}
Her yazdığın kodda gülüyorum ya :D
do_sumthin' nedir :D
azıcık neşelensin buralar :D aklına takılan bir şey olursa özelden sorarsın.
@betseg;
Sorunuza su cevap verilebilir.
w flag sadece yazma modu ve dosya olsun veya olmasin yeniden olusturulur demek kisaca yeterlidir sanirim.Yeniden olusan bir dosya da da bos musun, dolu musun demek biraz garip sanirsam.
NOT-> Acayip bir de durum var, baslik altinda cevap verip vermeme arasinda kaliyorum.Aklim cevap vermememi.Konunun disina cikmamak icin.Bir taraftan da konu ile ilgili duruyor gibi.Uyari alabiliriz. O yuzden kisaca cevap yazdim.
@817c0d3r, aynen öyle hocam az önce access mode hakkında bilgi verdim arkadaşa. :D
O zaman asil konu basligimiza donebiliriz :)
Elimizde sopa ile beklemiyoruz yahu :)
Başlık zaten çok farklı bir başlık, ben bakınırken zevk alıyorum. Hani programlama forumu değiliz ancak hep söylemişimdir, bu konuların da konuşulması kendi adıma hoşuma gidiyor. O nedenle sizler başlığın dağılmasından rahatsız olmadığınız sürece bizler için bence sorun yok.
sanmayın katılmıyorsak izlemiyoruz biz de kıyıdan kıyıdan öğreniyoruz ;D konunun takipcisiyim
Estafurullah ya @heartsmagic.Oyle birsey demek istemedim de :)
Yazmaya baslayinca kendimi durduramiyorum.Bir de cevap verdikce farkli sorular geliyor.
O an da aklima konu disi oldugu ya da olabilirligi hic gelmiyor.Direk sorulan sorulara odaklaninca boyle durumlar olusuyor.
O yuzden konu disina cikmamaya ozen gosteriyorum.
Takılıyorum ben de zaten, ciddi olarak yazmadım yani o kısmı :) Kısacası başlık tamamen sizin tasarrufunuzda.
Bizleri (daha dogrusu beni) aydinlattiginiz icin tesekkur ederim @heartsmagic. :)
Ben de bu güzel katkılarınız için teşekkür ederim hepinize :)
@heartsmagic, yorumunuz için teşekkürler biz bu işle uğraşırken çok eğleniyoruz keşke katılım daha çok olsa...
Açıkçası bu kadar katılımın olması bile şaşırtıyor beni, tabi daha fazla olmasını ben de isterim. Hani bir programlama forumu olsak daha fazla katılım olması gerekir ama bu forum için bence iyi bile :)
Ben sadece öğrenmek için katılıyorum konuya :)
@betseg sizin kodlar da fazlaliklari atarsak, soyle birsey ortaya cikar. :)
#include <stdio.h>
//#include <stdlib.h>
int main() {
int yas,yil;
char ad[20];
FILE *fp;
if ((fp = fopen("onys.txt", "w")) == NULL) {
printf("Dosya acilamadi!\n")
Return 1; //exit(1);
}
printf("Once adinizi sonra yasinizi girin:\n");
scanf("%s %d", &ad, &yas);
yil = yas + 10;
fprintf(fp, "%s, %d yasinda, 10 yil sonra %d olacak", ad, yas, yil)
printf("\n10 yil sonra %d yasinda olacaksin\nonys.txt'ye bakmayi unutma\n",yil);
fclose(fp);
return 0;
}
Cok mu? Kisaldi kodlar ne..! :)
NOT~ Telden yazdim.Duzenlemek gerekebilir.
bu sefer biraz zorlayacak gibi ::)
http://www.dosya.tc/server2/cyuph4/reverse_it.zip.html
Süper bi dil buldum. Adı LOLCODE :D
HAI 1.3 BTW başlıyo main gibi bişi int main(){
CAN HAS STDIO? BTW #include <stdio.h> ama mainin içinde
VISIBLE "mrb:)LOLCODE ornegi" BTW printf("mrb\nLOLCODE ornegi");
I HAS A giris BTW int giris;
GIMMEH giris BTW scanf("%d", &giris);
I HAS A sonuc, sonuc R DIFF OF giris AN 1 BTW int sonuc; sonuc = giris - 1;
VISIBLE sonuc BTW printf("%d", sonuc);
KTHXBYE BTW }
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 17 Temmuz 2015 - 05:02:52
If-Else, For döngüleri basit matematik filan da var :D
https://github.com/justinmeza/lolcode-spec/blob/master/v1.2/lolcode-spec-v1.2.md (https://github.com/justinmeza/lolcode-spec/blob/master/v1.2/lolcode-spec-v1.2.md)
a6-v2
http://s2.dosya.tc/server2/k7ep89/a6-asdfg.zip.html (http://s2.dosya.tc/server2/k7ep89/a6-asdfg.zip.html)
Bir şey fark ettim, 8'den beri her sayfadaki ilk post benim :D
//Reversed source code - Reverser
//file: a6-asdfg32 x86
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int yas;
char ad[256];
int toplam;
FILE *fptr;
if(argc != 4) // 1,2,3 ? -> BUG FIX
{
printf("hehe\n");
sleep(1u);
printf("Usage: %s -a ad yas\n",argv[0]); // a6 ? -> argv[0] BUG FIX
}
else
{
if(!strcmp(argv[1],"-a") || !strcmp(argv[1],"--AdVeYasGir10YilSOnrasiniHesapla"))
{
fptr = fopen("onys.txt","w");
sscanf(argv[2],"%s",&ad); // ad , digit ya da char kontrol yok ?
sscanf(argv[3],"%d",&yas); // yaş, digit ya da char kontrol yok ?
toplam = yas + 10;
fprintf(fptr, "%s , %d yasinda, 10 yil sonra %d olacak", ad, yas, yas + 10);
fclose(fptr);
printf("\n10 yil sonra %d yasinda olacaksin\nonys.txt'ye bakmayi unutma\n", toplam);
}
else
{
printf("olmadi be... \"%s -a ad yas\" dene",argv[0]); // --> BUG FIX
return 1;
}
}
return 0;
}
kodundaki küçük hataları düzelttim. Ama hala büyük bir hata var, programa "yaş + yaş" ya da "ad + ad" girildiğinde sapıtıyor. bunu çözmek için, bir dizi hazırlarsın daha sonra dizinin ilk elemanını alırsın ve ilk elemanı digit mi yoksa char mı şeklinde sorgulayan bir fonksiyon yaparsın istenene göre -1 döndürürsün ya da programı sonlandırırsın. Aşağıdaki kod fikir verecektir.
if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z))
{
/*Alfabe*/
}
if(ch>='0' && ch<='9')
{
/*Rakam*/
}
Bende yaş + yaş veya ad + ad girince "olmadi be... "./a6 -a ad yas" dene" diyor.
Sadece "./a6-asdfg" yapılmışsa hehe ve kullanım yazdırdım, başka bişiyse kullanım yazdırdım. 4 değilse olarak değil yani.
Bu arada "kullanım: a6" nasıl oldu, hiçbir fikrim yok :D
çözümü de paylaşalım o halde. :)
/*
Bug fix for reversed source code.
-Reverser.
*/
#include <stdio.h>
#include <stdlib.h>
#define MAX 256
int check(int ch);
int main(int argc, char *argv[])
{
int i;
char string[MAX];
scanf("%s",string);
for(i=0; string[i] != '\0'; i++)
{
}
printf("first element is: %c\n",string[0]);
check(string[0]);
return 0;
}
int check(int ch)
{
if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z'))
{
printf("Char detected.\n");
}
else if(ch>='0' && ch<='9')
{
printf("Digit detected.\n");
}
else
{
printf("Unknown.\n");
}
}
Merhaba arkadaslar;
Bir tane tam egleneceginiz bir krekle_me :) haziradim.
Simdiden kolay gelsin. :)
http://s2.dosya.tc/server2/8dgyen/krekle_me.zip.html (http://s2.dosya.tc/server2/8dgyen/krekle_me.zip.html)
Not=> Ev de yoksak eger,anahtar daima evin yakinindadir.Yeter ki, bakinca gormesini bil :)))
Cin atasozu :)))
UPX, Unpack ettim.
Entry point: 0x804923d
Main function: 0x8048960
string "cevap!!": 0x8169b28
ve şifreyi buldum: Cevap!!
Tebrikler :))
Basta gozunuz korkmus olabilir ama zaten amac kafa karistirmak. :)
upx oldugu string aramasi gorulebilir.
Gorunmedigi durumlarda
yara adli yazilim kullanailabilir.
└> wolf@Security -> yara -s -m -g yar_saclarin_rule_rule.yar krekle_me
UPX [] [] krekle_me
0x8f236:$noep3: 01 DB 75 07 8B 1E 83 EE FC 11 DB 8A 07 72 EB B8 01 00 00 00 01 DB
0x8f230:$noep5: 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB
Unpack ettikten sonra strings çıktısı bayağı bir kafamı karıştırdı daha sonra fonksiyona bakınca anladım.
Zaman ayırıp hazırladığınız ve paylaştığınız için teşekkürler hocam. :)
Rica ederim. :)
Özellikle static linklenmiş olması nedeniyle, son örnekte hayli zorlandım. Reverser mümkünse 0x8169b28 adresine nasıl ulaştığını açıklayabilir misin?
@oasln, şu şekilde:
b * 0x8048960
|__-> 2. break point
(gdb) x/s 0x8169b28
0x8169b28: "Cevap!!"
Tamam benim anlamadığım, 0x8169b28 adresini nerden buldun.
Ben de main (0x8048960) breakpointinden sonra nexti ile bir süre ilerlemeyi denedim ama bir türlü 0x8048960 adresinin kullanıldığı instructiona ulaşamadım.
herşeyden önce UPX decompress yapmalısın.
b * 0x804923d
run
x/35i $pc
b * 0x8048960
continue
x/35i $pc
x/s 0x8169b28
0x8169b28: "Cevap!!"
Bu sefer ipucu vermeyeyim :)
s6.dosya.tc/server/ocw1bt/crackme.zip.html (http://s6.dosya.tc/server/ocw1bt/crackme.zip.html)
Yoda's protector olabilir mi ? ;D
O da nereden cikti ya :)
Yado mado pack yok :)
Dogru sifre de gulen surat yanlis sifre de uzgun surat var.
objdump -s -j .rodata crack_file
Zip formatı görünce direkt aklıma o geldi. Gerçi sadece windows executableleri içindi yanlış hatırlamıyorsam.
Şifreyi buldum:
!!erfiS
Tamamdır harikasın. Keşke sadece cevabı yazmak yerine bu şekilde nasıl çözdüğünüzü de yazsanız benim gibiler için çok daha yararlı olacaktır :)
Alıntı yapılan: Reverser - 30 Temmuz 2015 - 21:33:38
herşeyden önce UPX decompress yapmalısın.
b * 0x804923d
run
x/35i $pc
b * 0x8048960
continue
x/35i $pc
x/s 0x8169b28
0x8169b28: "Cevap!!"
@Reverser yine tebrikler :)
Zip olduguna bakmayin.Biraz tuhaf olacak ama ziplemek zor geldi.Ben de siteyi yanilmak icin boyle bir yola basvurdum.Mahlum zip olmadan kabul etmiyor kendileri. :)
Kisaca zip olmasi onemli degildi.
$ ./crackme.zip
Seklinde calistirabilirsiniz yani sorun yoktu.
dosyayı 2 kez indirmek zorunda kaldım corupted gözüktüğü için ;D belirttiğiniz şekilde inceledim arşivi.
Tekrar teşekkür ederim hocam paylaştığınız için.
Rica ederim.
Sizde kisaltma kullaniyorsunuz herhalde benim gibi :)
(corrupted)
Biz de kisaltma kullaniyoruz bazen.
Anlamadigimiz foksiyonlara kisaca fucktion diyoruz. :) Lanet fonksiyon diye duzelteyim.
Zip bozuk gorundugu icin bu kadar fazla indirilmis(10).Bende diyorum, bu kadar ilgi ne zaman vardi ;)
Fucktion iyiymiş. ;D
Kısaltma kullanıyorum ama o sözcüğün durumu biraz farklı. Biz ona mobil klavyemin azizliği diyelim. ;D
Azizim;
O azizlik ben de var :)
Alıntı yapılan: 817c0d3r - 31 Temmuz 2015 - 21:32:40
@Reverser yine tebrikler :)
Zip olduguna bakmayin.Biraz tuhaf olacak ama ziplemek zor geldi.Ben de siteyi yanilmak icin boyle bir yola basvurdum.Mahlum zip olmadan kabul etmiyor kendileri. :)
Kisaca zip olmasi onemli degildi.
$ ./crackme.zip
Seklinde calistirabilirsiniz yani sorun yoktu.
Site açısından, dosyanın zip olup olmadığını sadece uzantısına bakarak anlama da iyiymis :-)
@817c0d3r, hocam şimdi aklıma geldi. Bu yöntem site için güvenlik açığı oluşturuyor o zaman. Gerçi link uzantısı anladığım kadarıyla random olarak oluşturuluyor ama yinede sunucu üzerinde kod çalıştırmak ya da interpreter ile script çalıştırmak mümkün olabilir. Bildirilmeli midir bu durum site yetkililerine ?
zip'i açınca böyle göründüğü için "noluyo" dedim bi an :D ama sonra direkt zip'in çalıştırıldığını görünce çok şaşırdım :D
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FqllQNW.png&hash=a985b651b1e986dfbb9a8e3df2d6132e2c8c0141) (http://hizliresim.com/qllQNW)
bir önceki mesajıma [1] https://forum.ubuntu-tr.net/index.php?topic=45477.msg552701#msg552701 istinaden ve konumuzun yapısı bakımından bu soruna yönelik çözüm önerisi sunuyorum:
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FMyyB41.png&hash=e9ec76035c515abdc84b414abee3d9e976c48445)
1-) Dosyanın uzantısı değil de, file header'ı içinde bulunan magic number kontrol edilmeli. Bu şekilde dosya uzantısı hakkında daha sağlıklı sonuç alınır.
yazdığım program ELF header'ı içinde bulunan Magic number'ı kontrol eder. Site sahibi kişi ve ya kişiler bu kodu kolaylıkla PHP'ye port edebilirler.
/*
ELF Magic Checker
Reverser
1.8.2015
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char signature[16];
} HEADER;
//ELF magic number
char correct_sig[16] = {
0x7F, // .
0x45, // E
0x4c, // L
0x46, // F
0x02,
0x01,
0x01,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
};
//ELF Header
struct {
char signature[16];
} header = {
{
0x7F, 0x45, 0x4C, 0x46, 0x02, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00
}
};
int main(int argc, char *argv)
{
FILE *infile;
int loop0;
int total_size;
HEADER header;
infile = fopen("crackme.zip", "r");
if (infile == NULL)
{
printf("Dosya acilmadi.\n");
return -1;
}
fseek(infile, 0, SEEK_END);
total_size = ftell(infile);
fseek(infile, 0, SEEK_SET);
if(total_size < 0)
{
printf("Dosya boyutu alinamadi.\n");
return -1;
}
if (fread(&header, sizeof(HEADER), 1, infile) < 0)
{
printf("Dosya basligi okunamadi. \n");
return -1;
}
for (loop0 = 0; loop0 < sizeof(correct_sig); loop0++)
{
if (header.signature[loop0] != correct_sig[loop0])
{
printf("Dosya .ELF degil.\n");
return -1;
}
else
{
printf("Dosya .ELF \n");
return 0;
}
}
}
Tam dediginizi yapan zaten libmagic(3) (http://manpages.ubuntu.com/manpages/hardy/man3/libmagic.3.html) ve komut tabanlı arabirimi file(1) (http://manpages.ubuntu.com/manpages/hardy/en/man1/file.1.html) var zaten. PHP içerisinde de builtin olarak mevcut (https://secure.php.net/manual/en/book.fileinfo.php).
$ file crackme.zip
crackme.zip: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, stripped
olduğunu biliyorum ;)
readelf'de okuyor sıkıntı yok o konuda.
Ben kendi yazdığım kod ile çözüm önerisinde bulunup, açıklama yaptım. Kodu dikkatle incelersen görürüsün ne yapmak istediğimi.
Kod dosyanın zip olup olmadığından ziyade, ELF olup olmadığına bakıyor. Bir dosyanın zip olup olmadığını, ELF olup olmamasına bakarak mı anlarsınız :) Sizin kodu kullansalar bu sefer de ELF harici tüm zip uzantılı dosyaları kabul ederler.
Amacın nedir anlamadım? Sadece elf uzantısı üzerinden konuşuyorum. Çok şükür algoritma kurma ve anlama becerim var.
Bir amacım yok. Sadece önerdiğiniz çözümün aslında problemi çözmediğini belirtmek istedim.
Benim de belirtmek istediğim şu;
Bu açıklama sadece güvenlik açığı oluşturduğunu düşündüğüm bu durum için geçerli.
Tamam kusura bakmayın eğer yanlış anlaşıldıysam. Eğer 817c0d3r dışında birinden örnek kabul ediyorsanız ben de bir crackme.zip hazırlamak isterim.
kusurluk bir durum yok. Ben durumu iyi ifade edemedim muhtemelen, o nedenle iletişimde kopukluk oldu. Elbette sen de herkes gibi dosya paylaşabilirsin fakat paylaşacağın dosyayı kendi adıma bugün inceleyemeyeceğim.
Ben bir tane daha ekleyim.
@Reverser, siz cozerseniz ozelden cevabi yazarsiniz. Biraz diger arkadaslara firsat verelim.
1 hafta kadar bekleyelim.Cozen olmazsa cevabi yazarsiniz.
s6.dosya.tc/server/714pyc/killme.zip.html (http://s6.dosya.tc/server/714pyc/killme.zip.html)
@Reverser, bu arada sitenin bu kadar kolay bir acik birakacagini sanmiyorum ama kesin konusmamak lazim. :)
Musait bir zaman da bakmak lazim.
Ilgilenen arkadaslara simdiden kolay gelsin.
strings ile sifre.txt gördüm ama başka bir şey yok :D 600 kb naptın :D
@betseg, Biraz sayi, biraz harf aldim.
Sonra evirdim, cevirdim :) bu hale geldi.
Alıntı yapılan: 817c0d3r - 01 Ağustos 2015 - 20:35:50
Ben bir tane daha ekleyim.
@Reverser, siz cozerseniz ozelden cevabi yazarsiniz. Biraz diger arkadaslara firsat verelim.
1 hafta kadar bekleyelim.Cozen olmazsa cevabi yazarsiniz.
s6.dosya.tc/server/714pyc/killme.zip.html (http://s6.dosya.tc/server/714pyc/killme.zip.html)
Özel mesaj atmayı bulamadım sitede (belki mesaj sayımdan dolayı bende aktif değil), ben de ilk defa bir örneği çözdüğüm için kendimi bayrak etme gereği duydum, bu yeni kuralı daha sonra uygulayalım :-)
$ xxd sifre.txt
00000000: 3533 6372 3337 6631 6167 53cr37f1ag
Tebrikler @oasln.
Cozum yonteminizi aciklayabilirsiniz.
Vidyo olursa, iyi olur.Cekirdeklerimi alir ben de izlerim. :) Severim vidyo izlemesini.
ooo vidyo severiz mısır patlatayım bende :P
Takip ediyorum ama bisey anlamiyorum video olursa belki bbirazcik anlarim :) [emoji14]
@oasln, hocam uzun zamandır video göremedik.Ônceleri ne güzel video da paylaşılıyordu.Güzel oluyordu.Şimdi sadece çòzüm yada cevap.
Gerçekten de bir video iyi olurdu.Eğer zaman ayırıp bìr vîdeo yùklerseniz cok makbule geçer hocam.
Tamam hazırlıyorum bir tane daha önce hiç video deneyimim yok ama :)
@oasln, hocam ben mi? Yanlış bir şey yapıyorum.Anlamadım.
Sizin verdíğiniz kelimeyi, şífre.txt yazıyorum ama yìne bir şey olmamakta.
Yani ben mi? Yanliş anladım programı, bılemedim. :(
Doğru kelimeyí, şífre dosyasına girínce, belirtilen mesajı vermesi gerekmiyor mu?
O şekilde yaparsanız otomatik olarak sonunda yeni satır oluşur (0a karakteri). Engellemek için hexedit vb. gibi bir programla yazmanız gerekir sifre.txt'yi.
Hmm, Şimdí oldu.Ben uç birimden prínt ile yazdırıyordum.
Metin düzenleyicísí íle yazdırınca sorun olmadı.
Teşekkúrler bilgí icín.
@oasln, vidyo ne halde ?
Bende sabirsizlikla bekliyorum :)
Neymis arkadas bu video ya. İyi ki ömrümüzde bir sifre.txt bulduk :)
Buyrun: https://www.youtube.com/watch?v=Q3dGB0M1fFY
En ideal çözüm muhtemelen bu değildir ama ben böyle yaptım :)
Hemen izliyorum :)
Aga cok guzel anlatmissin fakat bilmedigim icin ben birsey anlamadim ama bir sistemin sifresini kiriyormussun gibi hissettim :) Hacker filmi izler gibi izledim :) Cok tesekkurler devamini bekleriz :)
@oasln, vidyolu anlatım için teşekkürler gayet güzel bir yöntem kullanmışsın. Tebrikler. ;)
@oasln, video icin tesekkurler.Bu arada
reverse (https://github.com/joelpx/reverse) yaziliminin yerine sozde kod icin hopper (http://www.hopperapp.com/download.html) tavsiye ederim.
IDA ve Hopper'i lisansları nedeniyle tercih etmedim. Sonuçta bu benim için sadece bir hobi, ödün vermeye gerek yok.
IDA icin kabul edilebilir de.Hopper 30 dakika gibi bir sure veriyor yazilimi calistirmaniz icin.
Tabi benim ki sadece bir tavsiye.Kullanip kullanmamak size kalmis.
Ben de, bu başlığı çekirdek çıtlayıp film izler gibi takip ediyorum :)
@oasln, ilk video için muazzam olmuş bence.
Video güzel olmuş. Videodan sonra tekrar Assembly öğrenmeye başlama isteği duydum. :D
http://www.dosya.tc/server3/k90u89/a8.zip.html (http://www.dosya.tc/server3/k90u89/a8.zip.html)
:D
Maksat konuyu hortlatmak :D
cevap için diğer arkadaşları bekliyorum.
istenen ne onu anlamadım
C'yi istiyorum. Bu konudaki ilk gönderiler gibi.
sonuç ne oldu ???
//Reversed source code - Reverser
//file a8 x64 bit
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
//counter = 0x63 = 99 | 0x0 = 0
int counter;
for(counter = 99; counter > 0; counter--)
{
if(counter != 1)
{
printf("%d bottles of beer on the wall, %d bottles of beer. Take one down and pass it around, %d bottles of beer on the wall.\n", counter,counter,counter);
}
else
{
printf("%d bottles of beer on the wall, %d bottles of beer. Take one down and pass it around, no more bottles of beer on the wall.\nNo more bottles of beer on the wall, no more bottles of beer. Go to the store and buy some more, 99 bottles of beer on the wall.",counter, counter);
}
}
return 0;
}
Adlar dışında tamamen aynı :D
bu da benden gelsin: [1]
Not: dosya stripped değil, bu nedenle her şey ortada. Sadece biraz uğraşmak gerekiyor anlamak için. :)
İstenen: ASM çıktısını, C/C++, Java, LUA ya da Python gibi herhangi bir dile çevirmek.
[1] http://s6.dosya.tc/server/a4wa5m/reverse.zip.html
Silme linki atmışsın. :P
Not: 32 bit atmadım çünkü multilib sorun çıkarmaya başladı.
yine aynı şeyi yaptım, sen de sildin tabii :D
her neyse, düzelttim linki.
NULL'un içini buldum. Şİmdi diğerlerine bakayım :P
son paylaştığım dosya ile uğraşan oldu mu ?
Ben uğraşmaya çalıştım ama hiç yapamıyom :(
@betseg, Tersine kodlamak zaten ugrastiricidir.
Ben de soyle bir goz attabildim sadece. :)
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FylNQj0.png&hash=5811c9e091626186dda2ff4a7e9506ddfd57c271) (https://hizliresim.com/ylNQj0)
İpucu veriyorum.
movb $0x44,-0x1(%rbp)
>>> chr(0x44)
'D'
compare dan sonra bolca jump var.
Ben biraz baktım da fonksion pointerini çağırdığı yeri çözemedim:
Şöyle bişey:
#include <stdio.h>
void gectin() {
puts("Geçtin");
}
void (*fn)() = gectin;
int main (int argc, char *argv[])
{
char gecme_notu = 'D';
puts("Reverse_me*");
if ((unsigned) gecme_notu - 65 <= 5) {
/* ??????? */
fn();
} else {
puts("Geçersiz not.");
/* geri buraya atlıyor geçse bile */
printf("Geçme notu: %c\n", gecme_notu);
}
return 0;
}
tanımlı olan bir harf notumuz var "0x44" yani "D" karakteri. Ardından bu harf notu alınıyor, tanımlı olan harf notları ile karşılaştırılıyor ve kendisi ile ilişkili olan mesajı ekrana basıyor.
/* geri buraya atlıyor geçse bile */
printf("Geçme notu: %c\n", gecme_notu);
evet, atlaması normal zira o şekilde kodlandı.
Diğer harf notlarını ve kendileri ile ilişkilendirilmiş olan, mesajlar ile birlikte tersine kodlanmış olan kaynak kodu istiyorum.
en son paylaştığım reverse_me.zip kaynak kodu:
#include <stdio.h>
#include <stdlib.h>
int main (int arg, char *argv [])
{
char not = 'D';
printf("Reverse_me*\n");
switch(not)
{
case 'A' :
printf("Harika !\n" );
break;
case 'B' :
case 'C' :
printf("İyisin iyi :)\n" );
break;
case 'D' :
printf("Geçtin\n" );
break;
case 'F' :
printf("Daha iyisini yapabilirsin.\n" );
break;
default :
printf("Geçersiz not.\n" );
}
printf("Geçme notu: %c\n", not );
return 0;
}
derlenme şekli:
gcc reverse_me.c -o reverse.zip
Anlatim da benden olsun ama switch case yapisi ile hic aklima gelmedi acikcasi. :)
Ben direk, if else yapisindan yurumustum. Sozde kodlar da zaten bu yolu gosterdi.Ben de fazla zorlamadim acikcasi.Isin ucunda devreleri yakmakta var tabi. :)
Aslinda analiz yapip, notlarimi almistim.Bir tek kontrol etmek kaldi ama araya yogunluk girince, oyle kaldi.:(
@Reverser, biraz sabirsizlanmis anlasilan(=>He bi dur da bakacaz,Indirmisiz yazilimi elinde sonunda vaktimiz olacak da. :)<=) :)
Yazilimin cok agir oldugunu dusunen kodcumuz, bir hafifletme teknigi kullanmis. :) (Partial RELRO)
Yani derleme olarak -Wl,-z,relro kullanilmis.Hee bir etki eder mi? yok canim ne yapsin bize.Ha gcc file.c -o file, ha o :) Sadece ikiye ayrildigini belirtelim yeter herhalde.
RElocation Read-Only
1 => Kismi (Partial Relro)
2 => Tam (Full Relro)
RELRO STACK CANARY NX PIE RPATH RUNPATH FILE
Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH reverse.zip
Neyse biz kodlarimiza donelim.Yazilimci dostumuzun neden hafif siklet bransini sectigini kendisine birakalim. :) Bu kadar bilgi yeterli zira.Fazla bilgi bas agrisi yapar :)
push rbp
mov rbp,rsp
sub rsp,0x20
mov DWORD PTR [rbp-0x14],edi
mov QWORD PTR [rbp-0x20],rsi
mov BYTE PTR [rbp-0x1],0x44 ;"Tanimli Harfimiz 0x44 = D"
mov edi,0x4006a8 ; "Reverse_me*"
call 400450 <puts@plt>
movsx eax,BYTE PTR [rbp-0x1] ;"Tanimli harf eax registirina tasiniyor"
sub eax,0x41 ; "Karaya cikarma yapiliyor.Savas basladi :) 0x44 - 0x41 = 0x3"
cmp eax,0x5 ; "5 ile karsilastir. Buyukse ?"
ja 4005eb <main+0x65 = 101> ;"Karsilastima sonucu, Eger 5'ten buyuksem main+101 zipla # Gecersiz Not Kismi."
mov eax,eax
mov rax,QWORD PTR [rax*8+0x400710] ; "Cikarma isleminden sonra hangi ada'ya ayak basacam daa ben.??????????"
"Bakalim adalarimiza."
gdb => x/12xw 0x400710
0x400710: 0x004005bb 0x00000000 0x004005c7 0x00000000
0x400720: 0x004005c7 0x00000000 0x004005d3 0x00000000
0x400730: 0x004005eb 0x00000000 0x004005df 0x00000000
"Kontrol yapalim ve aciklayalim."
rax = 0 ise = 0x004005bb Harika kismina yolla beni
rax = 1 veya 2 ise = 0x004005c7 Iyisin iyi
rax = 3 ise = 0x004005d3 Gectin ; Bu bizim islem sonucumuz oluyor.
rax = 4 ise = 0x004005eb Gecersiz Not
rax = 5 ise = 0x004005df Daha Iyisini yapabilirsin
rax = 5'ten buyuksem, beni yine gecersiz not kismina yolla.
jmp rax
mov edi,0x4006b4 ; "Harika"
call 400450 <puts@plt>
jmp 4005f5 <main+0x6f>
mov edi,0x4006bd ; "Iyisin iyi"
call 400450 <puts@plt>
jmp 4005f5 <main+0x6f>
mov edi,0x4006cc ; "Gectin"
call 400450 <puts@plt>
jmp 4005f5 <main+0x6f>
mov edi,0x4006d4 ;"Daha iyisini yapabilirsin."
call 400450 <puts@plt>
jmp 4005f5 <main+0x6f>
mov edi,0x4006ef ;"Geçersiz not."
call 400450 <puts@plt>
movsx eax,BYTE PTR [rbp-0x1]; "0x44"
mov esi,eax
mov edi,0x4006fe ;"Geçme notu: %c\n"
mov eax,0x0
call 400460 <printf@plt>
mov eax,0x0
leave
ret
Analiz tamam.Anladik mi? Anladik daa :)
O zaman eller calissin degil mi ama :)
cat << EOF > reverse.c
main(int not, int gec) {
puts("Reverse_me*");
not = 0x44;
gec = not - 0x41;
if(gec == 0x0)
printf("Harika !\n");
if(gec == 0x1||gec == 0x2)
printf("Iyisin iyi\n");
if(gec == 0x3)
printf("Gectiniz\n");
if(gec == 0x4||gec > 5)
printf("Gecersiz Not.\n");
if(gec == 0x5)
printf("Daha iyisini yapabilirisin.\n");
else
printf("Gecme notu %c:\n",not);
return 0;
}
EOF
gcc -x c reverse.c && ./a.out
Evet,basit olarak boyle kodlar yazabiliriz.Konuyu anladiysak zaten janjanli, conconlu kodlar da yazabiliriz. :)
Yazimi dun gece tamamladim hatalarim olduysa numaraya mesaj atin :) 383137633064337240676d61696c2e636f6d
Son olarak janjanli bir gorsel yukleyelim ve bitirelim :)
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FL4DYk1.png&hash=b3d6ca6c1644deaac696a477b02e91a63f3a87d2) (https://hizliresim.com/L4DYk1)
@817c0d3r, Haydaaaa ! E bunedir ya !? [1] https://www.youtube.com/watch?v=LEgkkb6qwKw :D :D
Hocam bekledim o kadar kimseden ses çıkmayınca paylaşayım dedim. Partial RELRO ile özel olarak uğraşmadım normal şekilde derledim.
:)
Yok ya ben espri yaptim @Reverser.Inceledim ama kimse ceviri yapmayinca ben yapayim dedim.Sizde haklisiniz.Zaten paylasmayacaktim ama ceviri yapilmayinca, anlatim tadinda olsun istedim :)
Normal de inceleme firsatim olursa incele gec taktigi uyguluyorum. :)
farkındayım hocam sıkıntı yok. :) Anlatımınız için kendi adıma teşekkür ediyorum zira okurken keyif aldım. :)
Rica ederim @Reverser.
2 günlük tatilde can sıkıntısından yaptığım bir şey :-\
C plz
http://s3.dosya.tc/server4/kiradm/a10.zip.html
Not: multilib sorun çıkarıyor, 32 bit yükleyemiyorum.
@betseg, en son attığın dosyadan şimdiye kadar çıkartabildiğim kaynak kod assembly satırlarıyla birlikte aşağıda. (Henüz doğru çalışmıyor.)
//Reversed source code
//file: a10 x64
//Reverser
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h> // -> uint32_t
/* Functions
0x00000000004005b6 this_is_last_lel --> Called in main
0x00000000004005e2 this_is_last --> Called in sub function
0x0000000000400602 this_thingy_thing --> Called in sub function
0x0000000000400618 this_thing --> Called in main
0x0000000000400679 this_other_thing --> Called in main
0x0000000000400704 this_last_thing --> Called in main
0x0000000000400768 this_otter_thingy_thing --> Called in sub function
0x000000000040077e main
*/
//Function prototypes
int this_thing(int inpt);
int this_other_thing(int inpt);
int this_last_thing(int inpt);
int this_is_last_lel(int inpt);
int this_is_last(int inpt);
int this_thingy_thing(int inpt);
int this_otter_thingy_thing(int inpt);
int main(int argc, char *argv)
{
int inpt;
printf("integer pl0x lel");
scanf("%d",&inpt);
/*
0x00000000004007b1 <+51>: test %eax,%eax
0x00000000004007b3 <+53>: jle 0x4007c9 <main+75>
*/
if(inpt <= 0)
{
this_other_thing(inpt);
}
/*
0x00000000004007bb <+61>: mov %eax,%edi
0x00000000004007bd <+63>: mov $0x0,%eax
0x00000000004007c2 <+68>: callq 0x400618 <this_thing>
*/
else if(inpt > 0)
{
this_thing(inpt);
}
/*
0x0000000000400801 <+131>: jne 0x40080b <main+141>
*/
else if(inpt != 0)
{
this_is_last_lel(inpt);
}
/*
0x00000000004007d1 <+83>: jns 0x4007e7 <main+105>
*/
else
{
this_last_thing(inpt);
}
}
/*
0x0000000000400628 <+16>: imul %edx,%eax
*/
int this_thing(int inpt)
{
inpt *= inpt;
/*
0x0000000000400639 <+33>: mov $0x4008b4,%edi
0x000000000040063e <+38>: mov $0x0,%eax
0x0000000000400643 <+43>: callq 0x400480 <printf@plt>
*/
printf("%d",inpt);
/*
0x000000000040065a <+66>: cmp $0xa,%eax
0x000000000040065d <+69>: jg 0x40064a <this_thing+50>
*/
while(inpt > 10)
{
this_thingy_thing(inpt); //no args ? not sure.
}
/*
0x0000000000400667 <+79>: mov $0x4008b7,%edi
0x000000000040066c <+84>: mov $0x0,%eax
0x0000000000400671 <+89>: callq 0x400480 <printf@plt>
*/
return printf("%d\n",inpt);
}
/*
0x0000000000400679 <+0>: push %rbp
0x000000000040067a <+1>: mov %rsp,%rbp
0x000000000040067d <+4>: mov 0x2006e9(%rip),%eax # 0x600d6c <a>
0x0000000000400683 <+10>: neg %eax
0x0000000000400685 <+12>: mov %eax,0x2006e1(%rip) # 0x600d6c <a>
0x000000000040068b <+18>: mov 0x2006db(%rip),%edx # 0x600d6c <a>
0x0000000000400691 <+24>: mov 0x2006d5(%rip),%eax # 0x600d6c <a>
0x0000000000400697 <+30>: imul %edx,%eax
0x000000000040069a <+33>: mov %eax,0x2006cc(%rip) # 0x600d6c <a>
0x00000000004006a0 <+39>: mov 0x2006c6(%rip),%eax # 0x600d6c <a>
0x00000000004006a6 <+45>: neg %eax
0x00000000004006a8 <+47>: mov %eax,0x2006be(%rip) # 0x600d6c <a>
0x00000000004006ae <+53>: mov 0x2006b8(%rip),%eax # 0x600d6c <a>
0x00000000004006b4 <+59>: mov %eax,%esi
*/
int this_other_thing(int inpt)
{
inpt = - inpt;
inpt = inpt * inpt;
inpt = - inpt;
/*
0x00000000004006b6 <+61>: mov $0x4008b4,%edi
0x00000000004006bb <+66>: mov $0x0,%eax
0x00000000004006c0 <+71>: callq 0x400480 <printf@plt>
*/
printf("%d",inpt);
inpt = - inpt;
while(inpt < 10)
{
this_thingy_thing(inpt);
}
return printf("%d\n",inpt);
}
int this_last_thing(int inpt)
{
inpt = 0x0;
// 0x000000000040071e <+26>: add %edx,%eax
inpt = inpt + inpt;
printf("u found dat thing ");
/*
0x0000000000400756 <+82>: callq 0x400480 <printf@plt>
0x000000000040075b <+87>: mov $0x4008d0,%edi
0x0000000000400760 <+92>: callq 0x400470 <puts@plt>
*/
printf("w0w");
}
/*
0x00000000004005c2 <+12>: sub $0x1,%eax
0x00000000004005c5 <+15>: mov %eax,0x2007a1(%rip) # 0x600d6c <a>
0x00000000004005cb <+21>: mov $0x0,%eax
*/
int this_is_last_lel(int inpt)
{
while(inpt > 0)
{
inpt = inpt - 1;
// 0x00000000004005d0 <+26>: callq 0x4005e2 <this_is_last>
this_is_last(inpt); //No args ? Not sure.
}
return inpt;
}
/*
0x00000000004005ec <+10>: sub $0x1,%eax
0x00000000004005ef <+13>: mov %eax,0x200777(%rip) # 0x600d6c <a>
0x00000000004005f5 <+19>: mov $0x0,%eax
*/
int this_is_last(int inpt)
{
inpt = inpt - 1;
// 0x00000000004005fa <+24>: callq 0x4005b6 <this_is_last_lel>
this_is_last_lel(inpt);
return inpt;
}
int this_thingy_thing(int inpt)
{
/*
0x0000000000400606 <+4>: mov 0x200760(%rip),%eax # 0x600d6c <a>
0x000000000040060c <+10>: sub $10,%eax
*/
inpt = inpt - 10;
// 0x0000000000400617 <+21>: retq
return inpt;
}
int this_otter_thingy_thing(int inpt)
{
/*
0x000000000040076c <+4>: mov 0x2005fa(%rip),%eax # 0x600d6c <a>
0x0000000000400772 <+10>: add $0xa,%eax
*/
inpt = inpt + 10;
// 0x000000000040077d <+21>: retq
return inpt;
}
not düşmek istiyorum.
1-)Fonksiyon adları birbirine çok benziyor bu nedenle anlamaya çalışmak fazlasıyla zor.
2-)Programında hatalar var gibi. Bir kaç fonksiyon loop içinde çağırılmış ama argüman almamış. (ya da ben yanlış anladım)
3-)Assembly satırlarıyla birlikte kod çıktısını okumak isteyenler, kodları IDE gibi bir ortam üzerinde okumanızı tavsiye ediyorum.
Ben de bir krekme paylasayim.Ister kod cevirisi yapin ister krekleyin. :)
Zaten cok basit.Zorluklari asinca. :)
Ekran goruntusu:
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FRVg2Jn.png&hash=7e27fbabd4cca06e61e29544076b7402ae59ea2c) (https://hizliresim.com/RVg2Jn)
http://s3.dosya.tc/server5/fh8ns3/crackme_.zip.html (http://s3.dosya.tc/server5/fh8ns3/crackme_.zip.html)
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fstorage9.static.itmages.com%2Fi%2F15%2F0830%2Fh_1440952830_3846549_682a50f8d8.png&hash=ee27b4b03ea4f28bc6468aef9332b19d92b0ddd6)
@Reverser;
Aciklama alalim birde :)
Amac zaten analiz etmek.
Yoksa zaten cok basit.
Analiz edip.Vaktiniz olursa kod cevirisi de yapabilirsiniz.
kullanıcı adı ile şifre'nin aynı olması yeterli.
Anladığım kadarıyla, long int strtol(const char *nptr, char **endptr, int base);
fonksiyonu asıl olarak kullanılmakta. Rahat bir zamanda kod çevirisini de yaparım hocam.
Malesef tam olarak degil @Reverser.
Kullanici adinin ilk harfi kontrol ediliyor sadece.
Ceviri icin de sanirim bu bilgi yeterli. :)
Merhaba,
Benim birkaç sorum olacaktı bu konu hakkında. Özellikle @817c0d3r ve @Reverser'a. 20 yaşındayım, matematik bilgim 4 işlemden fazla değil. Fakat çok uzun süredir programlama ile uğraşıyorum.
1-) GDB Kullanımını nereden öğrendiniz? Türkçe kaynak var mıdır?
2-) Assembly dilini nereden öğrendiniz?
3-) Bu konuda kendimi geliştirmek için neler yapmalıyım?
Teşekkürler. Herkese iyi akşamlar.
@817c0d3r, doğrudur hocam fazla inceleme fırsatı bulamadım henüz.
@kaansef,
1-) GDB kullanımını, yazdığım programların davranışlarını analiz etmek için debug ederken öğrendim. GDB kullanımı ile ilgili bilgi veren sayısız yabancı kaynak mevcut.
2-) Assembly öğreneli çok uzun zaman oldu, açıkçası net olarak hatırlamıyorum ama bir çok kaynak var assembly için. (Bu arada assembly becerim aman aman iyi değildir. Bu konuda @817c0d3r daha çok yardımcı olabilir. )
3-) Bu konuda, özellikle programlama konusunda yabancı dil çok önemli. Yabancı dilin varsa özellikle 'İngilizce' kendini çok hızlı şekilde geliştirebilirsin. Ben senin yerinde olsam bolca Assembly intsruction reference setlerine bakar ve anlamaya çalışırdım. Küçük küçük programlar yazar, GDB altında analiz ederdim.
Cevapladığınız için çok teşekkür ederim. Assembly'yi biliyorum sayılır fakat nedense assembly programı yazmak için kendimi yeterli görmüyorum. Daha çok geliştirmek istiyorum. Biraz karışık bir öğrenme dönemi geçirdim, herşey birbirine girdi bu yüzden. 6502, 8086, x86, x64 hepsini bir arada öğrenmeye çalıştım. Şimdi birbirine karıştırıyorum.
Hafta sonuna yetistirecektim sozle ama malesef yetismedi.Firindan daha yeni cikti :)
@Reverser, Cozerseniz ozelden alalim cevabi sizden. :)
Basit bir krekmi zaten.Diger arkadaskari tesvik edelim.
http://s6.dosya.tc/server2/9tebmc/badman.exe.zip.html (http://s6.dosya.tc/server2/9tebmc/badman.exe.zip.html)
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FRVRlO1.png&hash=8fbf2bf901b4ff7f9cabf0f005492277341493b8) (https://hizliresim.com/RVRlO1)
Alıntı yapılan: 817c0d3r - 06 Eylül 2015 - 22:20:27
Hafta sonuna yetistirecektim sozle ama malesef yetismedi.Firindan daha yeni cikti :)
@Reverser, Cozerseniz ozelden alalim cevabi sizden. :)
Basit bir krekmi zaten.Diger arkadaskari tesvik edelim.
http://s6.dosya.tc/server2/9tebmc/badman.exe.zip.html (http://s6.dosya.tc/server2/9tebmc/badman.exe.zip.html)
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FRVRlO1.png&hash=8fbf2bf901b4ff7f9cabf0f005492277341493b8) (https://hizliresim.com/RVRlO1)
Yarin zaman bulursam bakacagim. Sifre kirma daha zevkli. Umarim son ornek gibi "truncated" degildir :-)
@oasln, yazilim calisiyorsa sorun yoktur. :) Calismiyorsa isi zorlastirir. :)
Kolay gelsin.
Su yaptiginiz ise gercekten cok hevesleniyorum ama acele etmemem gerek daha C tam bilmiyorken Tersine Muhendislige kalkismak sacma olacaktir zanlimca, takipteyim konu harika ozellikle cekilen video :)
Merhabalar;
Sanirim bazi arkadaslarin kafasi karismis.Bir noktaya deginmem gerekti.
Bazilari indirdikleri dosyayi direk inceliyorlar herhalde.
Inen dosyaya file komutu ile kontrol edip sizi yaniltmasin
$ file badman.exe.zip
badman.exe.zip: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=59765af37e3e4a32676ff5fd3a4153e8a3026b70, stripped
Asil dosyamiz bu degil. :)
Sadece arsiv dosyamiz.Ben ucbirim uzerinden cikarmaniz kolay olsun diye bu yolu sectim.Yaniltmasin sizi.
$ strings badman.exe.zip|grep -i sfx
Usage: 7zSFX [<command>] [<switches>...]
7-Zip SFX 9.38 beta Copyright (c) 1999-2014 Igor Pavlov 2015-01-03
Yani kisaca ucbirimden arsiv dosyasiini calistirdiginiz zaman.
$ ./badman.exe.zip
7-Zip SFX 9.38 beta Copyright (c) 1999-2014 Igor Pavlov 2015-01-03
p7zip Version 9.38.1
7-Zip SFX 9.38 beta Copyright (c) 1999-2014 Igor Pavlov 2015-01-03
p7zip Version 9.38.1 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,2 CPUs,ASM)
Processing archive: ./badman.exe.zip
Extracting badman
Everything is Ok
badman adinda ki asil dosyamizi incelemeniz gerekiyor. :)
$ file badman
badman: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
$ wc -c badman
1087 badman
1.1 kb'lik bir dosya sadece.Karsilama logosunu cikartirsaniz, 345 bayt falan. :)
Bilgi olarak paylasmak istedim.
Her zaman kilosunu dusurmak icin arsivleme kullanmayacagiz.Biraz tersih olsun. :)
hocam, arşivden çıkarıp execute etme kısmında sorun yok fakat asm dökümüne ulaşmak bayağı uğraştıyor. Analizim henüz tamamlanmadı ne olduğunu anlamaya çalıştığım bir fonksiyon var ve fonksiyon char tipinde veri döndürüyor bu fonksiyonu reverse edebilirsem sonucu size bildireceğim. :) Yeni başlayanlar için biraz fazla uğraştırıcı sanki.
Statik analiz icin yardimci olayim o zaman.
Dinamik analiz ellerinizden oper. :)
objdump -M intel -D -m i386 -b binary --start-address=0x74 badman
yada
cat badman|ndisasm -b32 -
Oohh, o kadar zor mu? olmus.
Demek ki kolaylik kavrami goreceli birseymis. :)
Merhaba,
Arkadaşlar birkaç sorum olacak bu konu hakkında. Birçok programlama dili biliyorum ve 2007'den beri aktif olarak kullanıyorum. Kendimi daha çok geliştirmek istiyorum. Matematik bilgim 4 işlemden ibaret. İngilizcem ise iyi değil (teknik ingilizce hariç). Eğer mümkünse yaşlarınızı ve mesleğinizi yazıp, bu konulara nasıl ulaştığınızı yazabilir misiniz? Nasıl başladınız ve nasıl geliştirdiniz? Geliştirecek olanlara tavsiyeleriniz nelerdir? Şimdiden teşekkür ederim. Herkese iyi akşamlar.
@kaansef hocam cok guzel bir konuya deginmissiniz :) Ayri bir konu uzerinden paylasirsaniz cok makbule gecer tesekkurler :)
@ShaoTT aslında bu konu üzerinde paylaşılsa daha çok işe yarar kanısındayım. Çünkü farklı bir konu açarsak konuyu bölmüş olacağız.
@kaansef;
Bence de ayri bir baslik altinda daha iyi olur ama x86 ASM de kendinizi gelistirmeniz icin ben sizi turkce kaynaklara yonlendireyim.
X86 ASM (http://cse.google.com/cse?cx=001091367884625497444:ds6samkvpgu&cof=FORID:0&q=+X86+Assembly&sa=Ara#gsc.tab=0&gsc.q=X86%20Assembly&gsc.page=1)
Uzun bir anlatim isteyen bir konu. :(
O zaman yeni konudan devam edelim :)
https://forum.ubuntu-tr.net/index.php?topic=48749.0
Alıntı yapılan: 817c0d3r@kaansef;
Bence de ayri bir baslik altinda daha iyi olur ama x86 ASM de kendinizi gelistirmeniz icin ben sizi turkce kaynaklara yonlendireyim.
X86 ASM
Uzun bir anlatim isteyen bir konu.
tÜRKÇE KAYNAK GÜZEL OLDU GERÇEKTEN...
Sadece merakımdan soruyorum. Yeni çıkan bilgisayar oyunlarının kopya korumasını kaldırabiliyor musunuz? Yoksa bu tahmin ettiğim gibi çok tecrübe gerektiren bir iş mi?
Alıntı yapılan: kaansef - 09 Eylül 2015 - 17:13:41
Sadece merakımdan soruyorum. Yeni çıkan bilgisayar oyunlarının kopya korumasını kaldırabiliyor musunuz? Yoksa bu tahmin ettiğim gibi çok tecrübe gerektiren bir iş mi?
Açıkcası fazla oyun oynayan biri değilim, oynadığım zamanlarda steam üzerinden satın almaya çalışıyorum hiç denemedim :P. Ama CRC bypass konusunda teknik bilgim var server tabanlı oyunlarda CRC sistemini bypass edip memory edit ile avantaj sağlayabildiğim oyunlar oldu.
Cevabınız için teşekkür ederim. Aslında video'lu anlatımla gdb kullanımını anlatabilirseniz çok iyi olur. Bu konuda çok büyük bir Türkçe kaynak sorunumuz var.
Alıntı yapılan: kaansef - 09 Eylül 2015 - 21:44:11
Cevabınız için teşekkür ederim. Aslında video'lu anlatımla gdb kullanımını anlatabilirseniz çok iyi olur. Bu konuda çok büyük bir Türkçe kaynak sorunumuz var.
pekâlâ, bundan sonraki anlatımları kendi adıma video olarak hazırlayacağım. İlgi olsun yeter ki..
Çok teşekkür ederim @Reverser. Baştan anlatırsanız çok iyi olur. Böylece acemi kullanıcılarda faydalanırlar.
Hatta bu gece hazırlayayım bir tane.
@Reverser bekliyoruz hocam kolay gelsin :)
Alıntı yapılan: 817c0d3r - 06 Eylül 2015 - 22:20:27
Hafta sonuna yetistirecektim sozle ama malesef yetismedi.Firindan daha yeni cikti :)
@Reverser, Cozerseniz ozelden alalim cevabi sizden. :)
Basit bir krekmi zaten.Diger arkadaskari tesvik edelim.
http://s6.dosya.tc/server2/9tebmc/badman.exe.zip.html (http://s6.dosya.tc/server2/9tebmc/badman.exe.zip.html)
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FRVRlO1.png&hash=8fbf2bf901b4ff7f9cabf0f005492277341493b8) (https://hizliresim.com/RVRlO1)
Sonunda bakma firsati bulabildim:
185579795
@oasln hocam video yokmu bu sefer :)
Cok ayrıntılı derin bir video hazırladım:
(https://www.dropbox.com/s/75erxv0m53kai8i/badman2.gif?raw=1)
817c0d3r'in de dediği gibi basit bir örnek olduğu için video çekmek zor olabilir :)
Videodan kastım gdb'nin kullanımını anlatan bir videoydu. Mesela gdb şöyle kullanılır, bunu yazarsanız bu olur, şunu yaparsanız böyle olur, gibi bir anlatımdı. Eğer mümkünse böyle bir video yayınlar mısınız?
Alıntı yapılan: nurullahisrgan - 09 Eylül 2015 - 13:23:54
Alıntı yapılan: 817c0d3r
X86 ASM
Uzun bir anlatim isteyen bir konu.
tÜRKÇE KAYNAK GÜZEL OLDU GERÇEKTEN...
Rica ederim.
Alıntı yapılan: oasln - 10 Eylül 2015 - 12:32:57
Cok ayrıntılı derin bir video hazırladım:
817c0d3r'in de dediği gibi basit bir örnek olduğu için video çekmek zor olabilir :)
@oasln, Tebrikler. :)
Bu arada cozulmeyen bir krekme var.Vakit buldugunuz da bir bakin bakalim, cozebilecekmisin. :)
Simdiden soyleyim zordur kendileri. :)
http://s2.dosya.tc/server/mkl0xg/crackme3.zip.htmlBu arada crackme ile ilgili analiz gibi adimlar
gecmeyiniz.Google amcamiz index yapmasin. :)
Profesyonel bir kisi icin hazirlandi.Burada sadece bakmaniz icin paylasildi.
Hazirladigim kisiye ayip olmasin. :)
Ozel mesaj atabiliyorsaniz ordan alabilirim analizlerinizi.
http://www.enderunix.org/docs/devbook/x86.html
http://www.teknove.com/assembler-dersleri-213.html
Assembly için güzel başlangıç olur herhalde..
Merhabalar;
Yeni oyunumuz kaptir da gel(CTF=Capture the flag) :))
Oyuna Baslama Adresiniz (http://817c0d3r.uboxi.com/crkm/)
Kisace Bilgilendirelim, katilacak arkadaslarimizi.
Verilen sitede bir Kreklemi yazilimi mevcut ve sizin onu bulmanizi ve kreklemenizi bekliyor.
Oyuna Katilacak arkadaslara simdiden basarilar. :)
Sitede yeterince ipucu verdigimi dusunuyorum.Tabi yine yardimci olurum buradan.
Umarim egelenirsiniz.
oooo kernel exploitler falan girmiş işin içine. :D
╭─reverser@reverser ~
╰─$ nmap -T4 -F 31.170.167.153
Starting Nmap 6.47 ( http://nmap.org ) at 2015-09-15 13:38 EEST
Nmap scan report for 817c0d3r.uboxi.com (31.170.167.153)
Host is up (0.30s latency).
Not shown: 96 filtered ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp closed ssh
80/tcp open http
81/tcp closed hosts2-ns
Nmap done: 1 IP address (1 host up) scanned in 11.15 seconds
╭─reverser@reverser ~
╰─$ ftp 31.170.167.153
Connected to 31.170.167.153.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 16 of 500 allowed.
220-Local time is now 06:39. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 3 minutes of inactivity.
Name (31.170.167.153:reverser): 817c0d3r
331 User 817c0d3r OK. Password required
Password:
530 Login authentication failed
Login failed.
Remote system type is UNIX.
Using binary mode to transfer files.
biraz daha kafa yormak lazım...
Sistemi hacklemenize gerek yok. :)
Yazilim zaten site icinde.
Ana sayfadakilerin suan icin konu ile ahlakasi yok.
Size verilen adres ipucuna goturecektir.
Yazilimi almaniz icin herhangi bir hacking islemine gerek yok.
Bu yolu secmende ki asil amac, beyin yormak.Argo olarak, kafa acmak diyebiliriz.
Tekrar soyleyim.Sisteme herhangi bir saldiri yapmaniza gerek yok. :)
Noldu :D
Alıntı YapService Temporarily Unavailable
The server closed the connection without sending any data.
The server is temporarily unable to service your request due to maintenance downtime or capacity problems.
Due to heavy load on the server, connections may be temporarily blocked from locations that fetch an unusually high number of pages.
We apologize for the inconvenience.
Sorun yok sunucu calismakta. :)
Vaktiniz cok arkadaslar. Acele etmenize gerek.
Cozumu 1 hafta sonra aciklanacaktir.Eger cozen olmazsa.
exploit arıyordum pure ftp için. :D Neyse, gece tekrar bakarım şimdi iş zamanı görüşmek üzere.
Vakit bol arkadaslar.Sorun yok.
Tekrar Tekrar soyluyorum.Sunucuya saldirmaniza gerek yok. :)
Sunucuya saldırıldığı için o hatayı aldım herhalde.
saldırıyla ilgisi yok DDOS falan olmadı sonuçta. Ücretsiz hosting ile ilgili olabilir Bandwith limitleri az oluyor genelde.
10GB Aylik limiti var. :)
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.
@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.
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.
@ulupınar, tamam.
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. :)
@817c0d3r, çözüldü, anlatımı özelden attım.
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fstorage1.static.itmages.com%2Fi%2F15%2F0916%2Fh_1442427426_8882003_509c50cd87.png&hash=2e8af69ba0b80f0c2b873590cc6d74beff0b5f5c)
Tebrikler @Reverser.
Ilk olarak cozen sizsiniz.
İlerleyen saatlere doğru kendi çözüm yöntemimi açıklayan bir video hazırlayacağım.
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.
Ben sitenin kodlarını incelemek için adres çubuğunun başına view-source: ekledim, sayılır mı? :D
Bu yolda hersey mubah. :)
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
Ö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
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
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!
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.
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)
Neyse artık bir dahaki sefere daha iyisini denerim :p
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 (http://s3.dosya.tc/server5/9c2vvt/crackme2.zip.html)
Sanirim ipucu vermek lazim.
Verilen 2 grafik, donen dolabi anlatmakta :)
https://ptpb.pw/-YGa
https://ptpb.pw/eEqD
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 :)
Epeydir sessiz burası :)
@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
yine coşmuş buralar :)
Yok yok eski canlılığı kalmamış :D Nerde o eski reverser'lar :D
Şaka yapıyorum alınmayın lütfen ;)
bu da benden gelsin -> [1] http://s6.dosya.tc/server4/1jy3q5/craxme.zip.html
istenen: reversed source code <3
bende mi hata oldu içi boş geldi ;D yeniden indireyim
@eral, hata değil uzantısına takılma direkt "./craxme.zip" şeklinde çalıştır. (dosya.tc sunucusuna kandırık atıyoruz ehe ehe.)
konu hakkında şu mesajımdan sonraki kısımı okuyarak bilgi alabilirsin -> [1] https://forum.ubuntu-tr.net/index.php?topic=45477.msg552701#msg552701
bugün bende mi sistemdemi acayiplik var yav
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2Fo9MlYR.png&hash=5e1133211771d7a29f6f943d845cc0adec2b4f46) (http://hizliresim.com/o9MlYR)
sisteminde sıkıntı yok @eral, bir önceki mesajımda belirttim neden o şekilde olduğunu.
konsoldan aşağıdaki şekilde çalıştırabilirsin tabii önce chmod execute izni vermelisin.
./craxme.zip
[root@ata Belgeler]# ./craxme.zip
bash: ./craxme.zip: Erişim engellendi
[root@ata Belgeler]#
╔═[00:29]═[ata@ata]
╚═══===═══[]>> ./craxme.zip
bash: ./craxme.zip: Böyle bir dosya ya da dizin yok
bana acemi gibi anlat benim kafa durmuş sanırım ;D
haydaa :D
chmod +x ./craxme.zip
./craxme.zip
╔═[00:32]═[ata@ata]
╚═══===═══[]>> chmod +x ./craxme.zip
chmod: `./craxme.zip''e erişilemedi: Böyle bir dosya ya da dizin yok
bir tuhaflık bende var sanırım çay içmedim ya laz aklı duruyor :))
[root@ata Belgeler]# chmod +x ./craxme.zip
[root@ata Belgeler]# ./craxme.zip
[root@ata Belgeler]#
buldum belgelerime kaydedilmiş dosya ;D
tamam şimdi kaynak kod halini alayım. :)
Ahmet Bora 35 190
;D
o çıktıyı veren işleyişin ASM dışındaki kod halini istiyorum.
Hazir hareketlenmis, buralar.
Ben de bir tane, zor paylasim da bulunayim :)
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2Fp9QD8a.png&hash=acdc252f33fa89775964c34cdf21b1abc5dcdc61) (http://hizliresim.com/p9QD8a)
Indir (http://s3.dosya.tc/server6/1lhp57/TersineKodla.zip.html)
Severek takip ediyoruz :)
Assembly'i az çok öğrendikten sonra bende konuya dail olmaya çalışırım. Şu anda Assembly bilğim çok az..
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FrRbrzM.png&hash=6e34d72a10b0830a5085c25d272e64ecd60756b8) (http://hizliresim.com/rRbrzM)
:-\
@betseg'in aldığı uyarıyı ben de alıyorum. Henüz inceleme fırsatı bulamadım fakat vardır muhtemelen bir olayı. :)
Benim paylastigim yazilimin, eksik olan dinamik kutuphanelerini, ldd komutu ile gorebilirsiniz.Verilen goruntude ki dinamik kutuphanenin adreslerini ben paylasayim.
Malumunuz Apple kodlarini acmis bulunmakta. :)
https://opensource.apple.com/tarballs/CF/CF-855.17.tar.gz (https://opensource.apple.com/source/CF/CF-855.17/)
Bu da github adresinde ki paylasim.
https://github.com/fjolnir/CoreFoundation-Lite-Linux (https://github.com/fjolnir/CoreFoundation-Lite-Linux)
Bu arada benim icin fark etmez. ASM kodlarini da paylasabilirsiniz. Tabi calistirilabilir haline getirebilelim ama :)
Ornek olarak ben bir kac kismini paylasayim.
mov ecx, 10
mov edi, 1
xor eax, eax
call printf
lea rsi, [rel _OBJC_SELECTOR_TABLE]
lea rdi, [rel _OBJC_INSTANCE_0]
call objc_msg_lookup
lea rsi, [rel _OBJC_SELECTOR_TABLE]
lea rdi, [rel _OBJC_INSTANCE_0]
_OBJC_SYMBOLS:
dq _OBJC_SELECTOR_TABLE
dq 0000000000000000H
dq _OBJC_STATIC_INSTANCES
_OBJC_SELECTOR_TABLE:
dq _OBJC_METH_VAR_NAME_0
dq _OBJC_METH_VAR_TYPE_0
dq 0000000000000000H
dq 0000000000000000H
Buna benzer :)
Ld_preload ? :)
@Reverser, Github adresindekini yada digerini derlerseniz.Zaten Dinamik kutuphaneyi olusturmakta. :)
% sudo make -f MakefileLinux install
This will create and install these files:
/usr/local/lib/libCoreFoundation.so
/usr/local/include/CoreFoundation/<header files>
/usr/local/include/TargetConditionals.h
/usr/local/share/CoreFoundation/<resource files>
@817c0d3r, hocam henüz inceleme fırsatı bulamadım mobilden fikir yürüttüm sadece. Bu arada benim paylaştığım dosya ile ilgilenen oldu mu ?
Alıntı yapılan: betseg
Üstteki seninki. Böyle demesi normal mi?
dosyada sorun yok.
Ugrasmak isteyenlere bir krekle_beni ekleyim. :)
Olabildigince basit yapmaya calistim. :)
http://www.dosya.tc/server5/g4zne2/crackme_409.zip.html (http://www.dosya.tc/server5/g4zne2/crackme_409.zip.html)
Calistirma:
(https://ptpb.pw/lSIl)
Cozum yonteminizi cekinmeden aciklayabilirsiniz!
Bu konuya girmek istemiyorum. Bilenler zadece bizimle gönül eğlendiriyor. Bilmiyoruz diye bize hava atıyorlar. [emoji4] (Anne bizde niye yok [emoji1] ) şaka bir yana hazır burada toplanmışsınız ayrı bir başlık altında temelden başlanarak anlatım yapılabilir. Birde nasıl yaptıklarını ayrıntılı yazsalar veya görsel olarak anlatsalar bizde faydalanabiliriz.
Aynen ;D şöyle konular güzelce toparlansa anlatılsa ne güzel olur. Hatta hazır kaynaklar gösterilerek hiç yoktan gidiş yolumuzu görebilsek çok iyi olur :D. Hiç yoktan bir nesli cracker yaparız. Oyun oynamaktan boş dolaşmaktan kurtarırız :D
@yguzel, vakti zamanında konuyu açtığımda asıl amacım zaman geçirmek ve oyalanmaktı açıkcası daha sonradan gelen istekler üzerine, anlatmayı ve açıklamayı denedik fakat katılım olmadı. Bir yerde anlatım için zaman harcayıp, ilgi göremedik de denebilir.
@c0d3r hocam, biraz yavaşlayalım bence daha ilk attıklarınız ve benim son attığım dosya duruyor ve tekrar ediyorum, seviyeyi biraz daha düşük tutalım.
Alıntı yapılan: Reverserseviyeyi biraz daha düşük tutalım.
+1
Videolu bir anlatım da vardı sanırım yanlış hatırlamıyorsam.
Aynen videolu anlatım da yapmıştık.
Alıntı yapılan: Reverser - 27 Kasım 2015 - 15:54:59
Aynen videolu anlatım da yapmıştık.
hani nerede ;D yaaa arkadaş nasıl bir forum yönetimisiniz. hala forum arama seçkesi sorunu var. ;D davacıyım :o
Şuana kadar konuya 482 mesaj atılmış ;D. Gayette bilgi birikmiştir. İşe yarayacak olanları toparlayıp sonrada düzeltmek gerek. Zaten ülkemizde bu denli crack mevzularına derinlemesine girildiğini düşünmüyorum. Ortaya bir başyapıt çıkarsa siteye yeni bir kitle katılmış olur. Bileni bilmeyeni burayı takip eder.
Alıntı yapılan: rutkuŞuana kadar konuya 482 mesaj atılmış . Gayette bilgi birikmiştir. İşe yarayacak olanları toparlayıp sonrada düzeltmek gerek. Zaten ülkemizde bu denli crack mevzularına derinlemesine girildiğini düşünmüyorum. Ortaya bir başyapıt çıkarsa siteye yeni bir kitle katılmış olur. Bileni bilmeyeni burayı takip eder.
Zaten konu altinda kaynak bile verilmis..
Alıntı yapılan: nurullahisrgan - 27 Kasım 2015 - 17:23:16
Alıntı yapılan: rutkuŞuana kadar konuya 482 mesaj atılmış . Gayette bilgi birikmiştir. İşe yarayacak olanları toparlayıp sonrada düzeltmek gerek. Zaten ülkemizde bu denli crack mevzularına derinlemesine girildiğini düşünmüyorum. Ortaya bir başyapıt çıkarsa siteye yeni bir kitle katılmış olur. Bileni bilmeyeni burayı takip eder.
Zaten konu altinda kaynak bile verilmis..
Verilmişse ne olmuş ? Mesajdan mesaja atlamak yerine madde madde okumak daha iyi olmazmı ?
Alıntı yapılan: rutkuAlıntı yapılan: nurullahisrgan - Bugün, 17:23:16Alıntı yapılan: rutkuŞuana kadar konuya 482 mesaj atılmış [img width=15,height=15]https://forum.ubuntu-tr.net/Smileys/default/grin.gif[/img]. Gayette bilgi birikmiştir. İşe yarayacak olanları toparlayıp sonrada düzeltmek gerek. Zaten ülkemizde bu denli crack mevzularına derinlemesine girildiğini düşünmüyorum. Ortaya bir başyapıt çıkarsa siteye yeni bir kitle katılmış olur. Bileni bilmeyeni burayı takip eder. Zaten konu altinda kaynak bile verilmis..
Verilmişse ne olmuş ? Mesajdan mesaja atlamak yerine madde madde okumak daha iyi olmazmı ?
Elbette olabilir..
evet, @rutku konu altında bilgiler mevcut fakat arkadaşlar biraz üşeniyorlar okumaya sanırım. :)
Okumakta sıkıntı yok hocam sıkıntı kaynakların ıngılızce olması :D
@Reverser aslında demek istediğim ayrı bir konu altında temelden baslanarak eğitim verilmesi. Sizin için zor olacağını düşünmüyorum çünkü konuya hakimsiniz başlangıç eğitimi verdikten sonra bu crack me dosyalarınız daha çok kişi tarafından incelenecektir ve katılım oranı daha yüksek olacaktır
İşin zorluğu anlatım değil, o anlatımı yapacak vaktin bulunmayışı. @reverser adına konuşuyorum ama muhtemel sebeplerden biri bu.
Alıntı yapılan: Reverser - 10 Mart 2015 - 00:35:48
Bana kalırsa seviyeli yapalım en basitten başlayalım. Hello world falan değil de, matematiksel işlemler, döngüler temel compare işlemi jumplar gibi.. ?
@Reverser, Simdi son yorumunuz uzerine kendi paylastigim crackmeleri ele alayim.Basit mi? Zor mu? karar verelim.
Crackme2, yazilimi ile baslayalim.
https://ptpb.pw/-YGa (https://ptpb.pw/-YGa)
https://ptpb.pw/eEqD (https://ptpb.pw/eEqD)
verilen resimlerde goruldugu gibi karsilastirma var.
CrackmeGUI, yazilimda ise jump olayi var ve goruntu de sanirim herseyi anlatiyor.
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2Fo8rl57.png&hash=c1591caef4373d3d746cf5bc2ec65c44747e33a4) (http://hizliresim.com/o8rl57)
Ve geleim crakme_409 yazilimina.
objdump cikti bile yeterli cozmek icin.
1000 ^ 1 = 4097
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FLg10L1.png&hash=fe82f9aae2c9b865d785562ecce336aa95ec87cc) (http://hizliresim.com/Lg10L1)
Simdi ben sizin soylediklerinizin disinda birsey yapmismiyim. :)
Farkli seyler paylasmamda ki amac ise ugrasacak arkadaslarin. Farkli yontemler gordukleri zaman da kafalarinin karismamasi.
En buyuk sorunlardan biri de bu sanirim.Okulda da boyle olmuyor mu?.Baktiginiz zaman bildiginiz birsey aslinda ama farkli bir yontem yada sistem kullanildiginda, biz bunlari gormedik diyebiliyoruz.Aslinda bildigimiz birsey.Sadece dikkat lazim.Mantigi anlamak lazim.Konuyu katilanlarin da temel seviye bilgilerinin oldugunu varsayiyorum.Ki biz burada egitim vermiyoruz.Is egitim kismina girerse.Ben hoca degilim.Bu kelimeyi aliskanlik olrak kullaniyorum bazen.Karsimdaki nin hoca olamasina gerek. Aliskanlik gibi birsey :). Egitim verecek kapasite de ve zaman da degilim ayrica.Ben kendim abimden teknik destek ve egitim alirken.Bura da egitim vermem tuhaf olurdu herhalde.Okul bile bir yere kadar.Ondan sonrasi bizim elimizde.Kendimizi ilerletmek, gelistirmek.Brans secmek.Uzmanlasmal vs diye uzar gider @Reverser hocam :)
Simdi paylasilan yazilimlarda bilmediginiz birsey var mi?
karsilastirma. atlama ve xor disinda.
Nasil yazilim paylasmak lazim.Debug mod ile derleme yapalim.Anlamadigimiz noktada gdb uzerinde layout src komutunu verelim.Kaynak kodlari mi gorelim.Ya da Hopper, IDA gibi yazilimlarin sozde kod olusturma butonuna basalim, sifre ve kaynak kodlar karsimiza mi? ciksin.Yazilimlari buraya da paylasmadan once inanin, mumkun oldugunca basit yapmaya calisiyorum ve basit yaptigimi dusunuyorum.Bana sunu diyebilirsiniz.Ya arkadasim son paylastigin yazilim.ARM.Ben bunu nasil calistiracam ki bunu bile resimde veriyorum.Ki ilk olarak static linkledim.Calistimaniz kolay olsun diye.Sonra fonksiyonu bulmak zor olabilir dedim.Sonucta farkli bir yapi.Yazilimi tekrar derlledim ve resim ile paylastim.Simdi elestirilerinizi seviyeli bir sekilde alabilirim.
Zor olan nedir!?
sifreleme,pack, anti debug gibi tekniklere zaten girmeyi dusunmuyorum.Kendimin bile, isin icinden cikabilecegine inanmiyorum.He bir artim var. Sadece teknik yardim alacagim biri var. :)
@817c0d3r hocam, benim de bilgim bu konuda sınırlı maalesef ki. Yeri geliyor takılıp kalıyor, ilerleyemiyorum...
Bir önceki iletimde belirtmek istediğim şey ise "seviyeyi bu konuya yeni başlayanların anlayabileceği seviyede tutmaktı."
@neynefes sağ olsun belirtmiş. Bir de ben belirteyim, işlerim yıl sonu nedeniyle fazlasıyla yoğun bu nedenle fazla vakit bulamıyorum ve açıkçası son paylaştığınız dosyaları henüz incelemedim.
@yguzel, kullanıcı adımın aksine öyle bir iddiam yok. Bu konu hakkında yaptığım çalışmalar, tamamen okuduğum kaynakların ve yazılım bilgimin ortaya çıkarttığı şeylerden ibaret bu nedenle eğitim vermek haddime olmaz, en fazla bildiklerimi paylaşırım o kadar.
Arkadaşlar merhaba, boş zamanımda videolu anlatım yaptım umarım beğenirsiniz.
Konu: Hooking function with LD_PRELOAD trick
[1] http://www.dosya.tc/server5/kryq29/record.mp4.html
Acemiler için kod tersine anlatımı buldum arkadaşlar. Kaynak ingilizce bir yere kadar linux ile devam edilebilir gibi geliyor. Çünkü ileri seviyesi zararlı yazılım geliştirme üzerine kurulu. İnternet sıkıntısı olduğu için deneyemiyorum. İçerik;
Alıntı YapYou can download the complete series direct from Tuts 4 You if you do not wish to download the files individually.
01. Olly + assembler + patching a basic reverseme
02. Keyfiling the reverseme + assembler
03. Basic nag removal + header problems
04. Basic + aesthetic patching
05. Comparing on changes in cond jumps, animate over/in, breakpoints
06. "The plain stupid patching method", searching for textstrings
07. Intermediate level patching, Kanal in PEiD
08. Debugging with W32Dasm, RVA, VA and offset, using LordPE as a hexeditor
09. Explaining the Visual Basic concept, introduction to SmartCheck and configuration
10. Continued reversing techniques in VB, use of decompilers and a basic anti-anti-trick
11. Intermediate patching using Olly's "pane window"
12. Guiding a program by multiple patching.
13. The use of API's in software, avoiding doublechecking tricks
14. More difficult schemes and an introduction to inline patching
15. How to study behaviour in the code, continued inlining using a pointer
16. Reversing using resources
17. Insights and practice in basic (self)keygenning
18. Diversion code, encryption/decryption, selfmodifying code and polymorphism
19. Debugger detected and anti-anti-techniques
20. Packers and protectors : an introduction
21. Imports rebuilding
22. API Redirection
23. Stolen bytes
24. Patching at runtime using loaders from lena151 original
25. Continued patching at runtime & unpacking armadillo standard protection
26. Machine specific loaders, unpacking & debugging armadillo
27. tElock + advanced patching
28. Bypassing & killing server checks
29. Killing & inlining a more difficult server check
30. SFX, Run Trace & more advanced string searching
31. Delphi in Olly & DeDe
32. Author tricks, HIEW & approaches in inline patching
33. The FPU, integrity checks & loader versus patcher
34. Reversing techniques in packed software & a S&R loader for ASProtect
35. Inlining inside polymorphic code
36. Keygenning
37. In-depth unpacking & anti-anti-debugging a combination packer / protector
38. Unpacking continued & debugger detection by DLL's and TLS
39. Inlining a blowfish scheme in a packed & CRC protected dll + unpacking Asprotect SKE 2.2
40. Obfuscation and algorithm hiding
https://tuts4you.com/download.php?view.2876
bu kaynağı daha önce incelemiştim anlatım güzel fakat olly ile birlikte Windows üzerinden gidiliyor. Windows için kaynak isteyen varsa yabancı birini referans olarak verebilirim çok güzel makaleleri var reverse code engineering konusunda.
Birde reddit (https://www.reddit.com/r/ReverseEngineering)sayfasını takip etmenizi öneririm. Çok uçuk projeler var. Ne bulurlarsa kaynak kodunu açıyorlar. Bir de pythonda hello world yazısını çözülemeyecek hale sokanda var. Obfuscating diyorlar onada.
Adım adım anlatmış. (https://benkurtovic.com/2014/06/01/obfuscating-hello-world.html)
Tekrar Merhabalar;
Bu sefer ki yazilimimiz cok basit.
Yazilimi cozdugunuz zaman, kaynak kodlarina da ulasabileceksiniz.
Indir (http://s3.dosya.tc/server6/x6kd4g/crackme-example.zip.html)
Bu hata bunda da var, neden? :D
$ ./craxme.zip ; echo $?
bash: ./craxme.zip: No such file or directory
127
$ bash ./craxme.zip ; echo $?
./craxme.zip: ./craxme.zip: cannot execute binary file
126
$ ./crackme-example ; echo $?
bash: ./crackme-example: No such file or directory
127
$ bash ./crackme-example ; echo $?
./crackme-example: ./crackme-example: cannot execute binary file
126
$ file craxme.zip
craxme.zip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=3663bb5dc70567b81017dd5a3ddf1c1caa34012d, stripped
$ file crackme-example
crackme-example: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, stripped
sh -c crackme-example
ile deneyin :)
$ sh -c ./crackme-example ; echo $?
sh: ./crackme-example: No such file or directory
127
$ sh -c crackme-example ; echo $?
sh: crackme-example: command not found
127
Dosya yok diyor?
chmod +x crackme-example
?
Zaten izin var.
$ ls -l
total 72K
-rwxr-xr-x 1 arda arda 30K Oct 24 14:29 crackme2.zip
-rwxr-xr-x 1 arda arda 3.9K Dec 4 20:12 crackme-example
-rwxr-x--x 1 arda arda 5.5K Nov 18 19:31 craxme.zip
-rwxr-x--x 1 arda arda 13K Nov 18 19:31 TersineKodla.zip
ldd crackme-example
?
not a dynamic executable
echo $LD_LIBRARY_PATH
?
Çıktı yok.
O zaman export'dan sonra tekrar calistirmayi dene?
export LD_LIBRARY_PATH=/usr/lib/
$ export LD_LIBRARY_PATH=/usr/lib/
$ ./crackme-example ; echo $?
bash: ./crackme-example: No such file or directory
127
$ echo $LD_LIBRARY_PATH
/usr/lib/
64 bit sistem icin asagidaki yazilimi kullanin.
ayrica wiki'yi inceleyin.
https://wiki.archlinux.org/index.php/Multilib
http://www.dosya.tc/server5/rwcy4j/crackme-example64.zip.html
lib32-glibc mi kurayım yani?
Evet multilib-devel paketlerini kur..Ayrica LD_LIBRARY_PATH kontrolu yapin.
/usr/lib32
ekli mi? diye.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 05 Aralık 2015 - 12:25:13
Crakme yazilimi icin biraz bilgi ekleyim.
Sifre 2 basamakli bir sayi?
Ayrica crackme yazilimlari icin sifreyi bulmanin disinda akisi degistirerek de cozmumunuz kabul edilecektir.(74. 75 karsi gibi :) )
Alıntı yapılan: 817c0d3rEvet multilib-devel paketlerini kur..Ayrica LD_LIBRARY_PATH kontrolu yapin.
Kod: [Seç]/usr/lib32
ekli mi? diye.
Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Bugün, 12:25:13Crakme yazilimi icin biraz bilgi ekleyim.
Sifre 2 basamakli bir sayi?
Ayrica crackme yazilimlari icin sifreyi bulmanin disinda akisi degistirerek de cozmumunuz kabul edilecektir.(74. 75 karsi gibi )
Artik bu aksam bunun uzerinde ugrasmayi deneyecegim, bakalim bilgilerim ne kadarmis?
@nurullahisrgan, cok kolay emin olabilirsiniz.Iki sayinin toplami sifre?
Strippped olusu zorluyorsa, ipucu da verebilirim!
Alıntı yapılan: 817c0d3r@nurullahisrgan, cok kolay emin olabilirsiniz.Iki sayinin toplami sifre?
Strippped olusu zorluyorsa, ipucu da verebilirim!
Dosyayı indirdim, şuan müsait olmadığım için inceleyemiyorum..
@817c0d3r, öyle bir şifre yapmışsın ki rastgele bir şey deneyeyim derken doğru şifre geldi :D
Neyse ders çalışırken aklıma böyle bir şey geldi: http://s3.dosya.tc/server6/okxb0x/a14.zip.html (http://s3.dosya.tc/server6/okxb0x/a14.zip.html)
Tebrikler :)
Beyler konu 20 sayfayı geçti .
Bu konuda bilgisi olan arkadaşlar gruptaki diğer arkadaşlar için basit 10-15 sayfalık tutorial pdf 'i yazmayı düşünürler mi ?
konudaki girdileri okuyup takip ediyorum en basit şekli ile
int main(int argc, char const *argv[])
{
/* code */
printf("merhaba forum\n", );
return 0;
}
şu koddan başlayıp daha karışık matematik işlemlerinin yapıldığı c programlarına nasıl tersine mühendislik yapılır bu konuda rehber pdf i yayınlamayı düşünürlerse çok sevinmiş olurum , bunun bana ve bu işe yeni girecek diğer arkadaşlara katkısı olacağı şüphesiz
Kolay gelsin.
Alıntı yapılan: blackwidowBeyler konu 20 sayfayı geçti .
Bu konuda bilgisi olan arkadaşlar gruptaki diğer arkadaşlar için basit 10-15 sayfalık tutorial pdf 'i yazmayı düşünürler mi ?
konudaki girdileri okuyup takip ediyorum en basit şekli ile
Kod: [Seç]int main(int argc, char const *argv[])
{
/* code */
printf("merhaba forum\n", );
return 0;
}
şu koddan başlayıp daha karışık matematik işlemlerinin yapıldığı c programlarına nasıl tersine mühendislik yapılır bu konuda rehber pdf i yayınlamayı düşünürlerse çok sevinmiş olurum , bunun bana ve bu işe yeni girecek diğer arkadaşlara katkısı olacağı şüphesiz
Kolay gelsin.
+++++
iyi o halde, kısıtlı zamanım olmasına karşın bu konu hakkında bildiklerimi içeren bir pdf yazı dizisi oluşturmaya çalışacağım.
Alıntı yapılan: blackwidow - 09 Aralık 2015 - 15:30:54
Beyler konu 20 sayfayı geçti .
Bu konuda bilgisi olan arkadaşlar gruptaki diğer arkadaşlar için basit 10-15 sayfalık tutorial pdf 'i yazmayı düşünürler mi ?
konudaki girdileri okuyup takip ediyorum en basit şekli ile
int main(int argc, char const *argv[])
{
/* code */
printf("merhaba forum\n", );
return 0;
}
şu koddan başlayıp daha karışık matematik işlemlerinin yapıldığı c programlarına nasıl tersine mühendislik yapılır bu konuda rehber pdf i yayınlamayı düşünürlerse çok sevinmiş olurum , bunun bana ve bu işe yeni girecek diğer arkadaşlara katkısı olacağı şüphesiz
Kolay gelsin.
Tersini becermek için önce düzünü öğrenmek lazım. x86 programming manual herhalde en iyi başlangıç noktasıdır. 3-5 sayfalık ders ile sonuç alınacağını zannetmem.
Tersine kod mühendisliği için iyi bir Assembly ve C bilgisi gerekir.. Gerçekten de birkaç sayfalık belge ile ancak giriş yapılabilir..
@begseg;
Sizin paylastiginiz yazilimin ustunden, yeterince zaman gecmis.Sanirim cozen de olmayacak herhalde.
Ben a14.zip olarak gorunce acikcasi indirmekten vazgecmistim. :(
Yine istenen C yada diger dillere cevirmek zannetmistim. :)
Bu gece bir bakayim dedim.Neler var diye.Sonra ne goreyim, crackme cikti karsima.
Inceledim ve Sonuclari asagida.
Sanirim C kodlari asagi yukari asagida ki gibi :)
/*
*
================================================================================
*
* Filename: a14.c
* Created: 12/12/2015 02:20:35 AM
* Compiler: gcc
*
*
================================================================================
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
int input;
printf("Sifre pl0x: ");scanf("%d",&input);
if ( 9 * input / 5 + 32 == 5 * ((input - 32) / 9) )
printf("Evet\n");
else
printf("Hayir\n");
return 0;
}
Sifresi de 690262560. Sifreyi bulmadan gecmek icin ise asagidaki komut yeterli.
$ sed 's/\x75\x0c/\x74\x0c/' a14.zip > a14_ok
Benim paylastigim yazilimin da sifresi: 99'du sadece.
@8100d1r0n hocam bu verdiginiz sifreyi 690262560 burdaki denkleme koyunca uyusmuyor ( 9 * input / 5 + 32 == 5 * ((input - 32) / 9) ) :) Sacmalıyormuyum yoksa :)
:) calistirabilirsiniz.Input degerini degistirseniz hayir cevabini alirsiniz zaten.
#include <stdio.h>
int main(int argc, char *argv[])
{
int input= 690262560;
printf("Sifre pl0x: ");//scanf("%d",&input);
if ( 9 * input / 5 + 32 == 5 * ((input - 32) / 9) )
printf("Evet\n");
else
printf("Hayir\n");
return 0;
}
:D Ama şimdi if ( 9 * input / 5 + 32 == 5 * ((input - 32) / 9) ) burda input degiskenine atama operatoru kullanmamısız yaptıgımız ıslemler neden ınputa atanıyor :S
Tamsayi tasmasi(integer overflow) google da aratirsaniz size yerince bilgi sunacaktir.
Ben o sayıyı -40 olarak şeyetmiştim :) İnsan bir konuda iyi olunca basit şeylere bakmayıp karmaşığa dalıyor demek ki :)
O denklemler de Celsius ve Fahrenheit çevirisi, -40 Celsius ve -40 Fahrenheit aynı. Her şeye unsigned bakmayın :P
Insan bos kalmaya gorsun.Ibini dibini kurcaliyor yazilimin. :)
Google amcadan yararlanmistim ben ama sonra olay farkli noktalara kaydi. :)
Bu yolda dedigim gibi hersey mubah. :)
Bos zamanim da ugrastigim bir CTF (https://www.youtube.com/watch?v=4g7-qk3Os9k) oyununda da farkli bir yol izlemistim.Zip dosyasinin sifre kismininla ugrasmamistim. :) Kisaca zaman sorunun yoksa detayli incelemeye calisiyorum.
(https://i.hizliresim.com/D6AkLz.png) (https://i.hizliresim.com/2Nl7kv.png)
Yok, o yazdığınız kod tam olarak doğru :)
Bu: https://forum.ubuntu-tr.net/index.php?topic=45477.msg568982#msg568982
Buradaki kaynak nasıldır? Bence yeni başlayanlar için güzel bir kaynak.. http://www.csystem.org/dokumanlar/80x86-sembolik-makina-dili-kurs-notlar%C4%B1-uyarlama-1
Basit mi? zor mu?.Bilmiyorum ama.Ugrasmak isteyenler icin paylasalim.(Dosya, yazinin sonun da)
Oneri=> Baslangic icin GDB/LLDB/radare gibi konsol tabanli debugger'lar ile inceleleme yapmanizi onermemekteyim.Konsol tabanli uygulamalara kendinizi ilerlettikce gecmeniz sizin yarariniza olacaktir.Benim onerim baslangic ASM bilginiz varsa, daha cok arayuzlu uygulamalar ile incelemeniz.
Nedir bunlar ↵.
1=> Hopper
Kendisinin linux surumu bulunmakta ve 30 dk gibi bir calistirma suresi bulunmakta.
30 dk yetmezse yeniden baslatarak bir 30 dk gibi sure tekrar elde edebilirsiniz. :)
2=> IDA
Linux icin demo surumu bulunmakta ama yazilimi analiz etmek icin yeterli.
Ben IDA goruntusu atayim.Merak edenler icin, hem de paylasilan crackme icin ipucu kodlari bulunsun.
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FBD9DWp.png&hash=a4ca0eb61f01b056d87b8fd70d55dc857b83242d) (http://hizliresim.com/BD9DWp)
3=> Bokken
Kendisi radare2'nin arayuz versiyonu.Bir de ragui diye vardi ama onu hic denemedim.
Baslangic analizler icin bunlar yeterlidir.Konsol tabanli yazilimlara, biraz pratik yaptiginiz zaman gecmenizi sizin icin daha iyi olacaktir.Ornegin Mac OS X sistemler de genel olarak tercih edilen LLDB yazilimi kullanilmaktadir. GDB'ye bazi komutlari benzemektedir ama tam olarak degil.Ornegin ASM dokumune ulasmak icin GDB'de disas main ise LLDB'de bu komut ek olarak -n argumani almakta.(name = disas -n main).
Merak edenler icin bir LLDB goruntusu paylasalim.Zira kendinizi gelistirdikce, konsol tabanli uygulamalar da daha iyi analiz icin ekstra yazilimlardan faydalanmaya baslayacaksiniz.(Peda vs)
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FyLnL1j.png&hash=66e4e8f91ee6fc0cd8e8834ac51ee30ec11e7e5a) (http://hizliresim.com/yLnL1j)
Bu bilgilerden sonra gecelim analiz islemine.Oncelikle analiz edecegimiz yazilimi iyi tanimaliyiz.Hangi dil de,Kullanilan foksiyonlar, bilinen pack vs var mi?.
Simdi ufak bilgiler paylastiktan sonra gelelim tesvik primine. :)
indir (http://www.dosya.tc/server6/nw3hhx/crackme-java.zip.html)
Konuya faydası yok ama amacına yönelik bir soru. Linux için decompiler biliyor musunuz?
Bir önceki mesajda decompiler anlatımı var. :)
bunlar disassembler değil mi? benim dediğim exetoc tarzı, assembly e değil de ilkel bir c koduna dönüştürüyor. Birtane bulmuştum ama oda 64 bitte yoktu hata verip duruyordu. Zaten temelde bir farkları yok. Reversingten ve assemblyden şimdilik anlamıyorum. exetoc ninde c'ye çevirdiği exelerin değişkenleri felan asm tabanlı sanırım.
IDA ve Hopper pseudo C kod üretebiliyorlar.
işime yarayabilir. ama şimdi biraz daha araştırma fırsatım oldu da Assembly şart sanırım.
Teşekkürler kolay gelsin. Mutlu reversingler
Crackme-java yazilimini da aradan cikartalim.Cozen olmayacak herhalde.Neyse diger yazlima gecmek isteyenler yazinin sonuna bakabilirler.
Yazilim hakkinda biraz bilgilenelim.
$ file crackme-java.zip ↵
crackme-java.zip: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
$ ldd crackme-java.zip ↵
not a dynamic executable
Bakalim strings ciktisi bize neler soyleyecek.
$ strings crackme-java.zip G java ↵
Xfjd6&ZN4java4C
o?rackme.java
$ strings crackme-java.zip G UPX ↵
cUPX!d
UPX!u
UPX!
UPX!
Simdi biraz kolayladik.
$ upx -d crackme-java.zip ↵
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2013
UPX 3.91 Markus Oberhumer, Laszlo Molnar & John Reiser Sep
30th 2013
File size Ratio Format Name
-------------------- ------ ----------- -----------
15196 <- 7900 51.99% linux/ElfAMD crackme-java.zip
Unpacked 1 file.
$ ldd crackme-java.zip ↵
linux-vdso.so.1 (0x00007ffd49deb000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f594e5c1000)
libgcj.so.16 => /usr/lib/libgcj.so.16 (0x00007f594b48b000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f594b18d000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f594af70000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f594ad68000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f594ab52000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f594a94e000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f594a5aa000)
/lib64/ld-linux-x86-64.so.2 (0x00007f594e7d7000)
Sonrasini zaten paylasilan resim anlatmakta. =>crackme::crackme(void)<= 85(0x55) ile karsilastirilmakta.
ASM: ↓
mov edx, 0x55
cmp eax, edx
Gelelim bir diger programimiza.Programimiz da bir sifre soruluyor(Burasi zaten olmazsa olmazlarimiz).Dogru sifre girilince,
Kriptolu data dosyasi, programimizin calistigi dizine cikartiliyor ve asil islem de burada basliyor.(Kriptolu data dosyasini acmak).
Data dosyasini acmak icin Google amcamizdan yardim istemeye cekinmeyin. :)Biraz ileri seviye mi? diyeyim.Yoksa orta seviye mi?
bilemedim ama programimizi incelediginiz zaman zaten goreceksiniz.Sifreyi bilmesekte de DATA dosyasinin acildigini goreceksiniz
(En fazla 2sn surmekte).Bildigimiz uzere, AES 128-bit blok boyutu kullanirken, bizim DATA dosyasinin kullandigi 256-bit.
Aslinda burada belirtmek istedigim, guclu sifreler kullanmamiz gerektigidir.Programimiz da ki DATA cok basit bir yontem
ile korunmaktadir.Zaten herhangi bir sifre bilmemize gerekte yok ani (adi ustunde crackme:) ) Konuyu takip eden arkadaslarin,
cok rahatlikla cozeceklerini umuyorum.(Biraz daha yazarsam, direk cozumu aciklayacagim:) )
Cozum yontemlerinizi aciklamaktan lutfen cekinmeyin. Konuya geri donuslerim gec olabilir.Lutfen, simdiden kusuruma bakmayin.
Not => Son bir degisiklik yaptim.Iki dosyanin sifresi aynidir bilgilerinize.DATA dosyasi icin ugrasmaya bilirsiniz.Yazilimi cozmeniz
yeterlidir.DATA dosyasinla ugrasacak olan arkadaslar icin paylasilmistir bu bilgiler.
[indir] (http://s3.dosya.tc/server7/ibs8n7/crackme32.zip.html)
@Reverser (https://forum.ubuntu-tr.net/index.php?action=profile;u=23686)
hocam tersine mühendisliğe başlangıç için önerileriniz nedir
Crakme32 yazilimin cozumu paylasayim ve yeni bir yazilim ekleyim. Cozen olmuyacak herhalde!
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FrMMgQN.gif&hash=b159bb014d5db370bb4db8c215a7b5171b346bbb) (http://hizliresim.com/rMMgQN)
Yeni yazilim basit bir kod cevirisi
http://s8.dosya.tc/server2/3ynovx/cevir.zip.html
Cok mu? Zor olmus..!
Ipucu: (if else)
merhaba, vps üzerinden gdb ile çözmeye çalıştım. Şunun gibi bir şey sanırım :)
#include <stdio.h>
#include <stdlib.h>
char msg[] = "Tebrikler!\n";
char error[] = "Hata!\n";
char greeting[] =
"/*\n"
"* ===================================\n"
"* Filename: cevir.c\n"
"* Created: 02/17/2016 07:21:41 AM\n"
"* Revision: none\n"
"* Compiler: gcc\n"
"* ===================================\n "
"*/\n" ;
int main(int argc, char *argv[]) //0x080480c2
{
int val0;
int val1;
printf(greeting);
val0 = 65;
val1 = 90;
if (val0 != val1)
{
err();
}
else
{
printf(msg);
}
}
int err() //0x080480f4
{
printf(error);
return 0;
}
@reverser tebrikler.
Guzel bir calisma olmus. Kod bakımından cok uzun olmus sadece. Ben biraz farkli bir yol izledim ama calisma yapisini daha basit olarak kodlasaydiniz yine kabul ederdim.
hocam basit bir cmp instruction'ı sadece :D
daha komplike bir şeyler bekliyorum sizden. :P
Zorlarim sınırları diğerinde :)
Ugrasmak isteyenler icin kucuk ve guzel bir uygulama. (258bayt)
#################
# filename: RDF.c #
# compiler: GNU/GCC #
#################
# Ubuntu-TR #
http://s2.dosya.tc/server/9wi5jy/rdf.bin.zip.html
sözde kod paylaşıyorum. Zor oldu sanirim. :(
Kaynak kod:
http://sprunge.us/YZRM
void main(int a1, char *filename)
{
int v3;
signed int v4;
int v5;
v3 = sys_open(filename, 0, 0x124u);
if ( v3 >= 0 )
{
fd = v3;
while ( 1 )
{
v4 = sys_read(fd, &unk_80491D0, 0xAu);
if ( !v4 || v4 < 0 )
break;
v3 = sys_write(1, &unk_80491D0, v4);
if ( v3 < 0 )
goto BYE;
}
v3 = sys_close(fd);
}
BYE:
v5 = sys_exit(v3);
}
Yazılımı çalıştırmanız için komut.
echo "read me" > read.txt ; ./rdf.bin.zip read.txt
Uzun bir aradan sonra python ile kolay dan zora dogru iki, uc tane yazilim yukleyelim. Ilgilenenler icin.
CrackMe :)
Edit: Siralama da hata yapmisim. 1,2,3,5 olanlar kolaydan orta dereceye gitmekte. Zor olan ise 4 .
Uygulamalarin hepsini.
$ python2 crackme*
Seklinde calistirabilirsiniz.
https://share.riseup.net/#b8_DfRxE-LY58ixBKP9g4w
Not: Cozum vidyosu cekilmis olup asagidaki adrestedir. Sifresi 1 hafta sonra paylasilacaktir. Zamanim olmaya bilir diye erkenden hazirladim.
http://s9.dosya.tc/server/um7245/crackmes.zip.html
sifre : 8f4fd3cfe119e6b6e3b5ec58b5dd060b
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 :)
Hocam mümkünse özel bir mesaj atabilir misiniz?
Kotu arkadasimiz. :) bana Illuminati gibi gizli mesaj vermek istemis herhalde . :)
Neyse fazla paranoyaya baglamadan :) once ki yazilimlar iptal. :)
Geriye donuk baktigim zaman a10 adli yazilimin yarim kaldigini gordum. Cozume ulastiralim.
a10 yazilim ile bilgiler.
---- ELF Structures ----
ELF Header
class=64-bit
encoding=Little Endian
fileversion=1
os=System V
abi=0
type=ET_EXEC
machine=x86_64
version=1
entryPoint=0x4004c0
phoffset=0x40
shoffset=0x1888
flags=0x0
ehsize=64
phentsize=38
phnum=8
shentsize=40
shnum=1e
shtrndx=1b
InitArray (1)
Entry addess=0x400590 name=frame_dummy
Interpreter (offset=0x200, size=28)
Value="/lib64/ld-linux-x86-64.so.2"
Note Segment (offset=0x21c, size=32)
Name="GNU"
Type=1
Type String="NT_GNU_ABI_TAG"
Description="OS Linux 2.6.32"
Note Segment (offset=0x23c, size=36)
Name="GNU"
Type=3
Type String="NT_GNU_BUILD_ID"
Description="aa2d742521eb1dfebc8306be0f3445dfd51b587"
Read Only Segment (offset=0x8b0, size=51, strings=2)
String="integer pl0x lel"
String="u found dat thing"
Comment Segment (offset=0xd68, size=17)
String="GCC: (GNU) 5.2.0"
String Table (offset=0x15a8, size=736, entries=48)
String=""
String="a"
String="a10.c"
String="completed.6938"
String="crtstuff.c"
String="init.c"
String="main"
String="this_is_last"
String="this_is_last_lel"
String="this_last_thing"
String="this_other_thing"
String="this_otter_thingy_thing"
String="this_thing"
String="this_thingy_thing"
String Table (offset=0x310, size=93, entries=9)
String="GLIBC_2.7"
String="__isoc99_scanf"
String="printf"
String="puts"
C Kod:
#include <stdio.h>
int this_is_last();
int a;
int this_is_last_lel()
{
int result;
while ( 1 )
{
result = a;
if ( a <= 0 )
break;
--a;
this_is_last();
}
return result;
}
int this_is_last()
{
--a;
return this_is_last_lel();
}
int this_thingy_thing()
{
int result;
result = (a - 10);
a -= 10;
return result;
}
int this_thing()
{
a *= a;
printf("%d", a);
while ( a > 10 )
this_thingy_thing();
return printf("%d\n", a);
}
int this_other_thing()
{
a = -a;
a *= a;
a = -a;
printf("%d", a);
a = -a;
while ( a > 10 )
this_thingy_thing();
return printf("%d\n", a);
}
int this_last_thing()
{
a = 0;
printf("u found dat thing");
printf(" w");
printf("%d", a);
return puts("w");
}
int this_otter_thingy_thing()
{
int result;
result = (a + 10);
a += 10;
return result;
}
int main()
{
int result;
puts("integer pl0x lel");
scanf("%d", &a);
if ( a <= 0 )
{
if ( a >= 0 )
this_last_thing();
else
this_other_thing();
}
else
{
this_thing();
}
if ( a )
{
this_is_last_lel();
result = a;
}
else
{
result = a;
}
return result;
}
ASM analiz:
a10: file format elf64
int this_is_last_lel()
{
55 push rbp
48 89 e5 mov rbp,rsp
48 83 ec 10 sub rsp,0x10
int result;
while ( 1 )
{
result = a;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # e <this_is_last_lel+0xe>
89 45 fc mov DWORD PTR [rbp-0x4],eax
if ( a <= 0 )
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 17 <this_is_last_lel+0x17>
85 c0 test eax,eax
7e 1b jle 36 <this_is_last_lel+0x36>
break;
--a;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 21 <this_is_last_lel+0x21>
83 e8 01 sub eax,0x1
89 05 00 00 00 00 mov DWORD PTR [rip+0x0],eax # 2a <this_is_last_lel+0x2a>
this_is_last();
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 34 <this_is_last_lel+0x34>
result = a;
eb d2 jmp 8 <this_is_last_lel+0x8>
break;
90 nop
}
return result;
8b 45 fc mov eax,DWORD PTR [rbp-0x4]
}
c9 leave
c3 ret
int this_is_last()
{
55 push rbp
48 89 e5 mov rbp,rsp
--a;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 46 <this_is_last+0xa>
83 e8 01 sub eax,0x1
89 05 00 00 00 00 mov DWORD PTR [rip+0x0],eax # 4f <this_is_last+0x13>
return this_is_last_lel();
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 59 <this_is_last+0x1d>
}
5d pop rbp
c3 ret
int this_thingy_thing()
{
55 push rbp
48 89 e5 mov rbp,rsp
int result;
result = (a - 10);
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 65 <this_thingy_thing+0xa>
83 e8 0a sub eax,0xa
89 45 fc mov DWORD PTR [rbp-0x4],eax
a -= 10;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 71 <this_thingy_thing+0x16>
83 e8 0a sub eax,0xa
89 05 00 00 00 00 mov DWORD PTR [rip+0x0],eax # 7a <this_thingy_thing+0x1f>
return result;
8b 45 fc mov eax,DWORD PTR [rbp-0x4]
}
5d pop rbp
c3 ret
int this_thing()
{
55 push rbp
48 89 e5 mov rbp,rsp
a *= a;
8b 15 00 00 00 00 mov edx,DWORD PTR [rip+0x0] # 89 <this_thing+0xa>
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 8f <this_thing+0x10>
0f af c2 imul eax,edx
89 05 00 00 00 00 mov DWORD PTR [rip+0x0],eax # 98 <this_thing+0x19>
printf("%d", a);
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 9e <this_thing+0x1f>
89 c6 mov esi,eax
bf 00 00 00 00 mov edi,0x0
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call af <this_thing+0x30>
while ( a > 10 )
eb 0a jmp bb <this_thing+0x3c>
this_thingy_thing();
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call bb <this_thing+0x3c>
while ( a > 10 )
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # c1 <this_thing+0x42>
83 f8 0a cmp eax,0xa
7f eb jg b1 <this_thing+0x32>
return printf("%d\n", a);
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # cc <this_thing+0x4d>
89 c6 mov esi,eax
bf 00 00 00 00 mov edi,0x0
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call dd <this_thing+0x5e>
}
5d pop rbp
c3 ret
int this_other_thing()
{
55 push rbp
48 89 e5 mov rbp,rsp
a = -a;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # e9 <this_other_thing+0xa>
f7 d8 neg eax
89 05 00 00 00 00 mov DWORD PTR [rip+0x0],eax # f1 <this_other_thing+0x12>
a *= a;
8b 15 00 00 00 00 mov edx,DWORD PTR [rip+0x0] # f7 <this_other_thing+0x18>
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # fd <this_other_thing+0x1e>
0f af c2 imul eax,edx
89 05 00 00 00 00 mov DWORD PTR [rip+0x0],eax # 106 <this_other_thing+0x27>
a = -a;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 10c <this_other_thing+0x2d>
f7 d8 neg eax
89 05 00 00 00 00 mov DWORD PTR [rip+0x0],eax # 114 <this_other_thing+0x35>
printf("%d", a);
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 11a <this_other_thing+0x3b>
89 c6 mov esi,eax
bf 00 00 00 00 mov edi,0x0
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 12b <this_other_thing+0x4c>
a = -a;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 131 <this_other_thing+0x52>
f7 d8 neg eax
89 05 00 00 00 00 mov DWORD PTR [rip+0x0],eax # 139 <this_other_thing+0x5a>
while ( a > 10 )
eb 0a jmp 145 <this_other_thing+0x66>
this_thingy_thing();
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 145 <this_other_thing+0x66>
while ( a > 10 )
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 14b <this_other_thing+0x6c>
83 f8 0a cmp eax,0xa
7f eb jg 13b <this_other_thing+0x5c>
return printf("%d\n", a);
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 156 <this_other_thing+0x77>
89 c6 mov esi,eax
bf 00 00 00 00 mov edi,0x0
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 167 <this_other_thing+0x88>
}
5d pop rbp
c3 ret
int this_last_thing()
{
55 push rbp
48 89 e5 mov rbp,rsp
a = 0;
c7 05 00 00 00 00 00 mov DWORD PTR [rip+0x0],0x0 # 177 <this_last_thing+0xe>
00 00 00
printf("u found dat thing");
bf 00 00 00 00 mov edi,0x0
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 186 <this_last_thing+0x1d>
printf(" w");
bf 00 00 00 00 mov edi,0x0
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 195 <this_last_thing+0x2c>
printf("%d", a);
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 19b <this_last_thing+0x32>
89 c6 mov esi,eax
bf 00 00 00 00 mov edi,0x0
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 1ac <this_last_thing+0x43>
return puts("w");
bf 00 00 00 00 mov edi,0x0
e8 00 00 00 00 call 1b6 <this_last_thing+0x4d>
}
5d pop rbp
c3 ret
int this_otter_thingy_thing()
{
55 push rbp
48 89 e5 mov rbp,rsp
int result;
result = (a + 10);
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 1c2 <this_otter_thingy_thing+0xa>
83 c0 0a add eax,0xa
89 45 fc mov DWORD PTR [rbp-0x4],eax
a += 10;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 1ce <this_otter_thingy_thing+0x16>
83 c0 0a add eax,0xa
89 05 00 00 00 00 mov DWORD PTR [rip+0x0],eax # 1d7 <this_otter_thingy_thing+0x1f>
return result;
8b 45 fc mov eax,DWORD PTR [rbp-0x4]
}
5d pop rbp
c3 ret
int main()
{
55 push rbp
48 89 e5 mov rbp,rsp
48 83 ec 10 sub rsp,0x10
int result;
puts("integer pl0x lel");
bf 00 00 00 00 mov edi,0x0
e8 00 00 00 00 call 1ee <main+0x12>
scanf("%d", &a);
be 00 00 00 00 mov esi,0x0
bf 00 00 00 00 mov edi,0x0
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 202 <main+0x26>
if ( a <= 0 )
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 208 <main+0x2c>
85 c0 test eax,eax
7f 22 jg 22e <main+0x52>
{
if ( a >= 0 )
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 212 <main+0x36>
85 c0 test eax,eax
78 0c js 222 <main+0x46>
this_last_thing();
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 220 <main+0x44>
eb 16 jmp 238 <main+0x5c>
else
this_other_thing();
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 22c <main+0x50>
eb 0a jmp 238 <main+0x5c>
}
else
{
this_thing();
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 238 <main+0x5c>
}
if ( a )
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 23e <main+0x62>
85 c0 test eax,eax
74 15 je 257 <main+0x7b>
{
this_is_last_lel();
b8 00 00 00 00 mov eax,0x0
e8 00 00 00 00 call 24c <main+0x70>
result = a;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 252 <main+0x76>
89 45 fc mov DWORD PTR [rbp-0x4],eax
eb 09 jmp 260 <main+0x84>
}
else
{
result = a;
8b 05 00 00 00 00 mov eax,DWORD PTR [rip+0x0] # 25d <main+0x81>
89 45 fc mov DWORD PTR [rbp-0x4],eax
}
return result;
8b 45 fc mov eax,DWORD PTR [rbp-0x4]
}
c9 leave
c3 ret
Görmeyeli değerlenmiş buralar :)
Güzel site ama k nasıl ileti yazacağımız belli degil :D yeniyim ben :D
hoş geldin :) konuya ileti yazmakla ilgili bir sıkıntı mı yaşadın ?
Alıntı yapılan: contland - 13 Şubat 2017 - 01:06:57
Güzel site ama k nasıl ileti yazacağımız belli degil :D yeniyim ben :D
Bu iletiyi atabildiğinize göre çözmüş olmalısınız.
Bu konuyu öyle ayrıntılı incelemedim ama bir ara bakınacağım. Karşılıklı soru-cevap hoşuma gitti, güzel bir ortam yakalanmış.
Hocam özelden bi' mesaj atabilir misiniz?
Size danışmak istediğim bi' kaç soru varda.
Uzun bir aradan sonra, yeni bir EkleBeni ile Buradayiz. ^:^
Detayli bilgiler asagida olup, Oyuncularini beklemekte. ^_^
indir (http://s9.dosya.tc/server2/xeecje/badcafe.zip.html)
=====================================================================================
Filename: badcafe.c
Description: CrackMe
Created: 2017-05-26 T 06:21 AM
Compiled: gcc7.1 badcafe.c -o badcafe.o -c
Linked: ld -melf_x86_64 ...
=====================================================================================
badcafe: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, stripped, with debug_info
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0xbadcaf0
Start of program headers: 64 (bytes into file)
Start of section headers: 3002480 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 7
Size of section headers: 64 (bytes)
Number of section headers: 15
Section header string table index: 14
RELRO STACK CANARY NX PIE RPATH RUNPATH FILE
No RELRO No canary found NX enabled No PIE No RPATH No RUNPATH badcafe
Bir Krekle beninin dogusu.
https://www.youtube.com/watch?v=K4ACUVc8u6g
http://www.dosya.tc/server9/shzl7b/tmp_30277-badcafe-video1757046576.zip.html
Video güzel olmuş, sesli anlatım olsa tadından yenmez :)
Assembly dili bu iş için biçilmiş kaftan :)
Crack'ler felan bu dil ile yazılıyor.
Bu dili bilen birkaç yaşlı kurt kaldı :D
Alıntı yapılan: 7hr33l3t73r - 08 Mart 2016 - 00:38:22
(https://forum.ubuntu-tr.net/proxy.php?request=http%3A%2F%2Fi.hizliresim.com%2FrMMgQN.gif&hash=b159bb014d5db370bb4db8c215a7b5171b346bbb) (http://hizliresim.com/rMMgQN)
Konuyu ara ara büyük bir ilgi ve merakla takip etmekteyim. Ne yazık ki yeterli bilgi ve donanımda olmadığımdan soruları çözemiyorum. Gerekli çözümlerin sunulması ve kimi kaynakların paylaşılması gerçekten harika.
Elimde dandik bir programla şifrelenmiş bazı fotoğraflar bulunmakta. Şifre kısa ve sadece numaralardan oluşsa bile, yani kaba kuvvet ile rahatlıkla çözülebilse bile malesef program dosyaları okumuyor. Uzun bir süre uğraştım ancak bir çözüm bulamadım ve şimdilik rafa kaldırdım. Belki bi gün çözerim ancak benim endişem dosyaların bozuk olabileceği. Çözebildiğim kadarıyla da Aes-128 ile şifrelenmiş. Bu nedenle bu yazıyı alıntıladım ama tam olarak söylenenleri de anlayabilmiş değilim. Şifre olmadan datanın okunabilmesi... Lütfen bu konuyu biraz açabilir misiniz?
Aynı zamanda paylaştığınız görseldeki masaüstü i3/xmonad vs. olsa gerek ve çok güzel bir şekilde konfigure edilmiş. Bu ayarlar için yararlandığınız kaynak oldu mu?
Sorunuzu tam olarak anlamadim. Neyi acmam gerekiyor?
Sizin paylastiginiz gorsel de kullanilan uygulamanin kendi ozelligi. Kaba kuvvet saldirisi diyorsunuz ya, iste yazilim da bunu kendi icinde bagrindiriyor. Siz uzun sifreler de hatirladiginiz kismi yaziyorsunuz, gerisini yazilim kendi bulmaya calisiyor. Eger herhangi bir karakter hatirlamiyorsaniz bunu direk yazilima birakiyorsunuz. Sanirim sifre olmadan acmak kismini boylece aciklamis olduk. Benim anlatimlarima o yuzden pek takilmayim. Isin basinda olanlar icin yada soyle diyelim daha iyi anlasilsin. Temel bilgisi olmayanlar icin burasi pek uygun bir konu degil diyelim.
Soyle ki;
;intel
mov eax, 5
nedirin aciklamasini yapmiyoruz.
Yani, orada temel bilgisi olan bir kisinin ne yapildigini, (aciklama olmasa bile) cok rahat bir sekilde anlamis olmasi gerekir. Temel seviye egitim veriyor olsak, iste o zaman anlatim yapmamiz sart. O zaman bize, mov eax,5 nedir yada diye sorabilirsiniz.
Kisaca bazi bolumler de anlatim kismina pek takilmayin. Anlatim kismi cok onemsedigim birsey degil. (Anlatim yapma konusunda pek iyi degilimdir..!)
Gelelim diger bir sorunuza;
DWM kullanmaktayim. Yapilandirma dosyalari, github adresimde acik sekilde paylasilmakta. Bazi kullanicilarin yapilandirma dosyalarini (C)alip kendi istdigim sekilde duzenleyip kullanmaktayim. Arch'in wiki'sin de kullanicilarin Masaustu ve terminal vs yapilandirmalarinin bulundugu bolumden, kendime uygun kullanicinin dosyalarini secerek kullaniyorum. Tabi sevmedigim bazi yerlerde oynama yapma geregi duyuyorum...