C/C++ Öğreniyorum { Gün 3 }

darkinbox

Hectopat
Katılım
8 Ocak 2021
Mesajlar
1.144
Çözümler
17
Yer
Aydın
Daha fazla  
Sistem Özellikleri
w3schools.com
Cinsiyet
Erkek
Meslek
Bilgisayar Mühendisi
Selamlar, bu şekilde bir seri yapmayı düşünüyorum, C++ öğrenmem ile alakalı, önemli olan sizlerin yorumlamasıdır, yorumlarınız benim için çok önemli!

Gün 3 ve Gelişmiş bir CrackMe dosyası yapabilecek bir hale geldim sanırım.

Kod:


C++:
#include <iostream>
#include <windows.h>


#include <string>
using namespace std;
int main() {
    system("Color 9");
    string correct;
    string pass;
    string cor;
    string rect;
    correct = "Not this.";
    string got;
    string name;
    cout << (" ____                           _      _  __  _\n| __ )   _   _   _ __    __ _  | | __ | |/ / (_)_ __     __ _\n| _ \  | | | | | '__|  / _` | | |/ / | ' /  | | | '_ \   / _` |\n| |_) | | |_| | | |    | (_| | | < | . \  | | | | | | | (_| |\n|____ / \__, _| |_ | \__, _| |_ | \_\ | _ | \_\ | _| |_| |_ | \__, |\n|___ /");
    cout << "\n\n\nHello, please select one of the languages below!\n TR\n EN\n\n ";
    cin >>  got;
 
    if ( got == "TR" ) {
        system("Color 2");
        cout << "\n USER INPUT >> " << got << "\n";
        cor = "bu degil";
            rect = "bu da degil";
        cout << "\n Isminiz nedir? \n";
        cin >> name;
        cor = "yar2ak";
        cout << "\n USER INPUT >> " << name << "\n";
        cor = got + name;
        system("Color 6");
        cout << " Sifre nedir? \n";
        cout << "\n Sifre, basta sectiginiz dillerden birini ve isminizi icermektedir !! \n";
        rect = "3169haha";
        cout << "\n\n sifreyi giriniz : ";
        cin >> pass;


        if (pass == cor + rect) {
            system("Color 2");
            cout << " \n Tebrikler!! Bu uygulamayi kirmayi basardiniz, eger yeni biriyseniz bu muthis birsey!! \n";
            system("pause");




        }
        else {
            system("Color 4");
            cout << " \n Yanlis sifre )= Maybe next time! \n ";
            system("pause");
        }


    }    else if ( got == "EN" ) {
 
        cout << "\n USER INPUT >> " << got << "\n";
        system("Color 2");
        cout << "\n What is your name? \n";
        cin >> name;
        cout << "\n USER INPUT >> " << name << "\n";
        cor = got + name;
        system("Color 6");
        cout << " What is the password? \n";
        cout << "\n Password includes the language you select and the name that you enter !!! \n";
        cout << "\n\n Please enter the password : ";
        cin >> pass;
        rect = "3169haha";
 


        if (pass == cor + rect) {
            system("Color 2");
            cout << " \n YES, U DID IT! IF YOU ARE BEGINNER THATS AWESOME! \n";
            system("pause");




        }
        else {
            system("Color 4");
            cout << "\n Wrong Password )= Maybe next time!\n ";
            system("pause");
        }
 
    }
    else {


        cout << "\n Please select one of the languages ( \"TR\" or \"EN\"\n";
    }


    system("pause");
}
Sürekli crackme deneyimi kazanıyordum, bu sefer de siz kazanın bari :D
Isteyen derleyip cracklemeye çalışabilir.
( Şifrenin yazısının data türü string olduğu için kolay bir şekilde cracklenebilir )
 

Dosya Ekleri

  • 1723918903165.png
    1723918903165.png
    13,2 KB · Görüntüleme: 35
Son düzenleyen: Moderatör:
"İsminiz nedir?" sorusundan sonra atanan değişkeni anlayamadım.
:D

Boşverin.

Bende böyle bir dile başlamayı düşünüyorum. Fakat kendime güvenim 0. Ne önerirsiniz yeni başlayan biri olarak?
Selam dostum, ben yeni başlamadım bu dile sadece DLL uzantısından external yani konsol aplikasyonuna geçtim ancak tabiki de farklı syntaxlar olduğu için yeni sayılırım,

Öncelikle BU SITEYI kesinlikle öneririm, benim için çok sadık ve kaliteli bir site geldi,

C++ Doğrultusunda öğrenebileceğin şeyler sonsuz, evren gibi ancak sana öğretilen şeyler tabiki limitli olacak,

Her library ( kütüphane dosyasının ) farklı syntax'ları ve kullanımları var mesela detours.h en yaygın kütüphanelerden biri Imgui vs için.

İyi günler dilerim!
 
Kodunuz yanlış anlamayın ama çok kötü.
Yani bu şekilde kendi kafanıza göre bir şeyler yaparak kodu öğrenemezsiniz.

Geçmiş konularınıza da baktım. Bilmediğiniz şeyi biliyor gibi söylemeniz ayrı komik olmuş.
Kodu doğru öğrenmeden burada "C++ öğreniyorum" diye konu açmanız ayrı ilginç.

Beğenmedim 👎
 
Her library ( kütüphane dosyasının ) farklı syntax'ları ve kullanımları var mesela detours.h en yaygın kütüphanelerden biri Imgui vs için.
Hayır, yok öyle bir şey. Yanlış bilgi veriyorsun. Farklı kütüphaneler ve başlık dosyaları farklı işlevler ve yapılar sunabilir, ancak bu C++'ın syntax'ını değiştirmez. Syntax, dilin grameri, kelime yapıları ve operatörleri ile ilgilidir. Dolayısıyla, syntax'ları farklı demek yanlış bilgi vermekten öteye gitmiyor.
tabiki de farklı syntaxlar olduğu için
Hayır farklı syntaxlar söz konusu değil.
 
Hayır, yok öyle bir şey. Yanlış bilgi veriyorsun. Farklı kütüphaneler ve başlık dosyaları farklı işlevler ve yapılar sunabilir, ancak bu C++'ın syntax'ını değiştirmez. Syntax, dilin grameri, kelime yapıları ve operatörleri ile ilgilidir. Dolayısıyla, syntax'ları farklı demek yanlış bilgi vermekten öteye gitmiyor.

Hayır farklı syntaxlar söz konusu değil.
Hayır dostum o anlamda demedim, mevcut olan syntaxlar değişmiyor, farklı kütüphaneleri include ettiğimizde farklı syntaxlar ekleniyor.


Geçmiş konularınıza da baktım. Bilmediğiniz şeyi biliyor gibi söylemeniz ayrı komik olmuş.
Kodu doğru öğrenmeden burada "C++ öğreniyorum" diye konu açmanız ayrı ilginç.
Maalesef her bunu diyen insana bilgimin olduğunu kanıtlamaya çalışamam kusura bakmayın.

Kodunuz yanlış anlamayın ama çok kötü.
Yani bu şekilde kendi kafanıza göre bir şeyler yaparak kodu öğrenemezsiniz.

Geçmiş konularınıza da baktım. Bilmediğiniz şeyi biliyor gibi söylemeniz ayrı komik olmuş.
Kodu doğru öğrenmeden burada "C++ öğreniyorum" diye konu açmanız ayrı ilginç.

Beğenmedim 👎
Ek olarak, yazdığım kodun kötü olmasının sebebini açıklar mısınız? Yani sizinle aynı şeyi düşünen çok fazla insan yok ve bende merak ettim haklı olarak çünki sebep sunmadan kötü diyorsunuz.

Hayır, yok öyle bir şey. Yanlış bilgi veriyorsun. Farklı kütüphaneler ve başlık dosyaları farklı işlevler ve yapılar sunabilir, ancak bu C++'ın syntax'ını değiştirmez. Syntax, dilin grameri, kelime yapıları ve operatörleri ile ilgilidir. Dolayısıyla, syntax'ları farklı demek yanlış bilgi vermekten öteye gitmiyor.

Hayır farklı syntaxlar söz konusu değil.
Merhaba, sizde kodu yorumlar mısınız rica etsem?
 
Hayır dostum o anlamda demedim, mevcut olan syntaxlar değişmiyor, farklı kütüphaneleri include ettiğimizde farklı syntaxlar ekleniyor.
Hayır, farklı syntaxlarda eklenmiyor.
Ek olarak, yazdığım kodun kötü olmasının sebebini açıklar mısınız? Yani sizinle aynı şeyi düşünen çok fazla insan yok ve bende merak ettim haklı olarak çünki sebep sunmadan kötü diyorsunuz.
Çevrende kod yazan çok insan yok sanırım. Ben başlayayım;

using namespace std;
Bad practice. C++'ta using namespace literallerin olduğu namespace'i include etmek dışında bad practicedir. Bunun arkasındaki sebebi şurada bulabilirsin;
using namespace std; bad practicedir. Asıl kimse bunu istemiyor. Large codebaselere baktığında sabah akşam std:: görürsün. Çok, çok, çok, çok, çok, çok nadiren using namespace std; kullanılır.

Arkasındaki sebep name collision önlemek. Standart library de, senin yazdığın program da günden güne büyüyecek. Eğer standart libraryde daha önce olmayan bir fonksiyonla aynı ismi kullandıysan, yeni versiyona geçtiğinde, eğer using namespace std; yaptıysan çakışma yaşayacaksın.

Bak buna örnek şöyle olur;
C++:
namespace A {
    class C {};
}

namespace B {
    class C {};
}

using namespace A;
using namespace B;

int main()
{
    C c;

    return 0;
}

Yukarıdaki kod aşağıdaki hatayı verecek. Bunun çözümü, hangi C'yi kullanmak istiyorsak, scope resolution operatörü (::) ile o scopetakine işaret etmek. Diyelim ki A'nın C'sini kullanacağım, o zaman yazmam gereken şey; A::C c;. A::C yazdıktan sonra using namespace A;'nin bir anlamı kalmıyor zaten. Gelecekte temizleme konusunda zorluk çıkaracak eğer geniş bir uygulamada çakışmalar yaşadıysak. Çünkü tek tek gidip hangi fonksiyonun, hangi namespace'ten çağrıldığı ayıklamam gerekecek. Bu yüzden de bad practice.
Eki Görüntüle 2257715
if ( got == "TR" ) {
Aynı işi iki kere yapmana sebep olan bir dizayn var elinde. Kod tekrarı yapıyorsun. DRY diye bir ilke var. Do Not Repeat Yourself. Kendini tekrar etme. Çünkü diğer kodda yapacağın değişikliği bir daha, bir daha her yerde düzeltmen gerekecek. Onun yerine stringleri bir çeşit mapte tutarsan böylece sadece dil değiştirmiş olursun. Kodun tüm akışını değil.

Çok fazla if else var. Kodun okunuşunu mahvediyor. Değişken isimlendirmeleri berbat. Tamamen rastgele. Constant stringlerin debug yada release fark etmeksizin getirilebildiğini bilmiyorsun gibi. Crackme uygulaması için uygun değil. Karakterlerden oluşan bir vektör çooooooook daha sağlıklı bir seçenek olur işi zorlaştırmak adına.
 
Hayır, farklı syntaxlarda eklenmiyor.

Çevrende kod yazan çok insan yok sanırım. Ben başlayayım;


Bad practice. C++'ta using namespace literallerin olduğu namespace'i include etmek dışında bad practicedir. Bunun arkasındaki sebebi şurada bulabilirsin;


Aynı işi iki kere yapmana sebep olan bir dizayn var elinde. Kod tekrarı yapıyorsun. DRY diye bir ilke var. Do Not Repeat Yourself. Kendini tekrar etme. Çünkü diğer kodda yapacağın değişikliği bir daha, bir daha her yerde düzeltmen gerekecek. Onun yerine stringleri bir çeşit mapte tutarsan böylece sadece dil değiştirmiş olursun. Kodun tüm akışını değil.

Çok fazla if else var. Kodun okunuşunu mahvediyor. Değişken isimlendirmeleri berbat. Tamamen rastgele. Constant stringlerin debug yada release fark etmeksizin getirilebildiğini bilmiyorsun gibi. Crackme uygulaması için uygun değil. Karakterlerden oluşan bir vektör çooooooook daha sağlıklı bir seçenek olur işi zorlaştırmak adına.
Merhaba, yorumlamanız için teşşekkür ederim 💚
Std : : kullanmaya daha çok dikkat edeceğimi düşünüyorum.
If, else komutlarını aşırı kullanmamın sebebi onun dışında elimde pek alternatif yok ve Lua. dilinden dolayı if, else, hand gibi komutlara aşinayım bir sorun yarattığını da düşünmüyorum açıkçası.
Const stringlerini kullanmıyorum çünki aşırı bir işlevi yok diye düşünüyorum çünki yazdığım kod satırı sadece 200 paragraf oda en fazla, şimdilik tabiki de.
Değişken isimlendirmelerinden dolayı kusura bakmayın, normalde bu crack me'yi ben bir executable dosyası olarak atacaktım ama moderasyon izin vermedi.

Yorumlamanızdan dolayı dediğim gibi çok mutluyum 🤍

Ayrıca Console uygulamalarında ilgilisiniz diye düşünüyorum, eğer Visual Interface ya da Graphical user interface konusunda da ilgili iseniz, isterseniz di2scord üzerinden iletişim kurup partner olabilir, bir hile geliştiriyorum onun hakkında.
 
Yani bu şekilde kendi kafanıza göre bir şeyler yaparak kodu öğrenemezsiniz.
Konu sahibinin özgüvenine hayranım dürüst olmak gerekirse. Yani ben programlama öğrenirken, berbat kodumu insanlarla paylaşmamak için elimden geleni yapıyordum. GitHub'da privateladığım yığınla proje var. Game engine'e featureset eklediğimde bile onunla ilgili konu açmadan önce kodun okunurluğundan, reusabilitysinden falan emin olmak için defalarca kez üstünden geçmiştim. Ona rağmen özgüvenli özgüvenli şunu bunu yaptım diye yazamıyorum hala sağda solda. Onları ilk defa yazarken ne kadar zorlandığımı, ne kadar araştırma yaptığımı hatırlıyorum da...

Yanlış biliyor olabilirim falan düşüncesi hiç yok. Dümdüz "benim" diye atıyor adam mesajları.
 

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Geri
Yukarı