farkmt2official 1
farkmt2official
Mt2Hizmet 1
Mt2Hizmet
Bvural41 1
Bvural41
berzahx 1
berzahx
mavzermete 1
mavzermete
Hikaye Ekle

MaviAyGames | Metin2 Client Güvenliği

  • Konuyu başlatan Konuyu başlatan MaviAy44
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 10
  • Görüntüleme Görüntüleme 986
5.00 yıldız(lar) 1 Değerlendirme Değerlendirenler

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

böyle ne dersin?

void ShowClientNameError()
{
const char msg[] = {
'C', 'l', 'i', 'e', 'n', 't', ' ',
'y', 'a', 'n', 'l', 'ı', 'ş', ' ',
'i', 's', 'i', 'm', 'l', 'e', ' ',
'ç', 'a', 'l', 'ı', 'ş', 't', 'ı', 'r', 'ı', 'l', 'd', 'ı', '!', '\0'
};

dbg.LogBox(msg);
}
Bu şekilde daha iyi direk string referansı ile bulunması engelleniyor ama yine MsgBox fonksiyonlarına breakpoint atıldığında görünüyor, yine de daha fazla string obfuscation yapmak isteyen xor obfs kullanabilir (re edildiğinde yine detaylı arayan mesajı bulacaktır kesin çözüm değil kesinlikle):

void ShowClientNameError()
{
char msg[] = {
'K' ^ 0x2, 'n' ^ 0x2, 'k' ^ 0x2, // etc.
'\0'
};
for (int i = 0; msg; ++i)
msg ^= 0x2;

dbg.LogBox(msg);
}
 
Bu şekilde daha iyi direk string referansı ile bulunması engelleniyor ama yine MsgBox fonksiyonlarına breakpoint atıldığında görünüyor, yine de daha fazla string obfuscation yapmak isteyen xor obfs kullanabilir (re edildiğinde yine detaylı arayan mesajı bulacaktır kesin çözüm değil kesinlikle):

void ShowClientNameError()
{
char msg[] = {
'K' ^ 0x2, 'n' ^ 0x2, 'k' ^ 0x2, // etc.
'\0'
};
for (int i = 0; msg; ++i)
msg ^= 0x2;

dbg.LogBox(msg);
}
for (int i = 0; msg; ++i) ve msg ^= 0x2; olmaz

void ShowClientNameError()
{
char msg[] = {
'K' ^ 0x2, 'n' ^ 0x2, 'k' ^ 0x2, 'j' ^ 0x2, 'm' ^ 0x2, ' ', 'q' ^ 0x2, 'c' ^ 0x2, 'm' ^ 0x2, 'k' ^ 0x2, 'g' ^ 0x2, 'n' ^ 0x2, 'm' ^ 0x2, ' ', 'h' ^ 0x2, 'q' ^ 0x2, 'j' ^ 0x2, 'm' ^ 0x2, 'l' ^ 0x2, ' ', 'ç' ^ 0x2, 'ğ' ^ 0x2, 'm' ^ 0x2, 'n' ^ 0x2, 'k' ^ 0x2, 't' ^ 0x2, 'ı' ^ 0x2, 'r' ^ 0x2, 'ı' ^ 0x2, 'l' ^ 0x2, 'd' ^ 0x2, 'ı' ^ 0x2, '!', '\0'
};

for (int i = 0; msg != '\0'; ++i)
msg ^= 0x2; // XOR’u geri alıyoruz

dbg.LogBox(msg);
}

bu şekilde ozaman
 
for (int i = 0; msg; ++i) ve msg ^= 0x2; olmaz

void ShowClientNameError()
{
char msg[] = {
'K' ^ 0x2, 'n' ^ 0x2, 'k' ^ 0x2, 'j' ^ 0x2, 'm' ^ 0x2, ' ', 'q' ^ 0x2, 'c' ^ 0x2, 'm' ^ 0x2, 'k' ^ 0x2, 'g' ^ 0x2, 'n' ^ 0x2, 'm' ^ 0x2, ' ', 'h' ^ 0x2, 'q' ^ 0x2, 'j' ^ 0x2, 'm' ^ 0x2, 'l' ^ 0x2, ' ', 'ç' ^ 0x2, 'ğ' ^ 0x2, 'm' ^ 0x2, 'n' ^ 0x2, 'k' ^ 0x2, 't' ^ 0x2, 'ı' ^ 0x2, 'r' ^ 0x2, 'ı' ^ 0x2, 'l' ^ 0x2, 'd' ^ 0x2, 'ı' ^ 0x2, '!', '\0'
};

for (int i = 0; msg != '\0'; ++i)
msg ^= 0x2; // XOR’u geri alıyoruz

dbg.LogBox(msg);
}

bu şekilde ozaman
Evet ama unutulmaması gereken nokta sadece yeterince kararlı biri tersine mühendislikle çözebilir her zaman biz sadece zorlaştırmış oluyoruz, günün sonunda cpu instructionları bilmeli buna göre program çalışıyor, debugger ile instructionları inceleyen biri de binary’i reverse edebilir :) Paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst