Jump to content
Araştır
  • Diğer seçenekler ...
Sonuçları bul ...
Sonuçları bul ...
KO Developers Platformuna Hoşgeldin!
polat2245

[istek] multi için burada neyi değiştireceğim

Önerilen Mesajlar

:00990E95                 push    eax

___:00990E96                 lea     ecx, [esp+15C0h+var_D30]

___:00990E9D                 push    ecx

___:00990E9E                 call    esi ; lstrcpy

___:00990EA0                 push    offset aOption_ini_0 ; "Option.Ini"

___:00990EA5                 lea     edx, [esp+15C8h+var_D38]

___:00990EAC                 push    edx

___:00990EAD                 call    edi ; lstrcat

___:00990EAF                 mov     eax, lpName

___:00990EB4                 push    eax             ; lpName

___:00990EB5                 push    ebp             ; bInitialOwner

___:00990EB6                 push    ebp             ; lpMutexAttributes

___:00990EB7                 call    CreateMutexA

___:00990EBD                 mov     [esp+15CCh+var_15B4], eax

___:00990EC1                 call    GetLastError

___:00990EC7                 cmp     eax, 0B7h

___:00990ECC                 jp      loc_991B61

___:00990ED2                 mov     esi, GetPrivateProfileIntA

___:00990ED8                 lea     ecx, [esp+15CCh+var_D40]

___:00990EDF                 push    ecx             ; lpFileName

___:00990EE0                 push    ebp             ; nDefault

___:00990EE1                 push    offset aLod_chr ; "LOD_Chr"

___:00990EE6                 push    offset aTexture_1 ; "Texture"

___:00990EEB                 call    esi ; GetPrivateProfileIntA

___:00990EED                 test    bl, bl

___:00990EEF                 mov     edi, 1

___:00990EF4                 jz      short loc_990EF8


arkadaşlar yardım edin lütfen

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

:00990E95                 push    eax

___:00990E96                 lea     ecx, [esp+15C0h+var_D30]

___:00990E9D                 push    ecx

___:00990E9E                 call    esi ; lstrcpy

___:00990EA0                 push    offset aOption_ini_0 ; "Option.Ini"

___:00990EA5                 lea     edx, [esp+15C8h+var_D38]

___:00990EAC                 push    edx

___:00990EAD                 call    edi ; lstrcat

___:00990EAF                 mov     eax, lpName

___:00990EB4                 push    eax             ; lpName

___:00990EB5                 push    ebp             ; bInitialOwner

___:00990EB6                 push    ebp             ; lpMutexAttributes

___:00990EB7                 call    CreateMutexA

___:00990EBD                 mov     [esp+15CCh+var_15B4], eax

___:00990EC1                 call    GetLastError

___:00990EC7                 cmp     eax, 0B7h

___:00990ECC                 jp      loc_991B61

___:00990ED2                 mov     esi, GetPrivateProfileIntA

___:00990ED8                 lea     ecx, [esp+15CCh+var_D40]

___:00990EDF                 push    ecx             ; lpFileName

___:00990EE0                 push    ebp             ; nDefault

___:00990EE1                 push    offset aLod_chr ; "LOD_Chr"

___:00990EE6                 push    offset aTexture_1 ; "Texture"

___:00990EEB                 call    esi ; GetPrivateProfileIntA

___:00990EED                 test    bl, bl

___:00990EEF                 mov     edi, 1

___:00990EF4                 jz      short loc_990EF8


arkadaşlar yardım edin lütfen

 


Kalın olarak işaretlediğim kısmı noplayabilirsin.

 

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

:00990E95                 push    eax

___:00990E96                 lea     ecx, [esp+15C0h+var_D30]

___:00990E9D                 push    ecx

___:00990E9E                 call    esi ; lstrcpy

___:00990EA0                 push    offset aOption_ini_0 ; "Option.Ini"

___:00990EA5                 lea     edx, [esp+15C8h+var_D38]

___:00990EAC                 push    edx

___:00990EAD                 call    edi ; lstrcat

___:00990EAF                 mov     eax, lpName

___:00990EB4                 push    eax             ; lpName

___:00990EB5                 push    ebp             ; bInitialOwner

___:00990EB6                 push    ebp             ; lpMutexAttributes

___:00990EB7                 call    CreateMutexA

___:00990EBD                 mov     [esp+15CCh+var_15B4], eax

___:00990EC1                 call    GetLastError

___:00990EC7                 cmp     eax, 0B7h

___:00990ECC                 jp      loc_991B61

___:00990ED2                 mov     esi, GetPrivateProfileIntA

___:00990ED8                 lea     ecx, [esp+15CCh+var_D40]

___:00990EDF                 push    ecx             ; lpFileName

___:00990EE0                 push    ebp             ; nDefault

___:00990EE1                 push    offset aLod_chr ; "LOD_Chr"

___:00990EE6                 push    offset aTexture_1 ; "Texture"

___:00990EEB                 call    esi ; GetPrivateProfileIntA

___:00990EED                 test    bl, bl

___:00990EEF                 mov     edi, 1

___:00990EF4                 jz      short loc_990EF8


arkadaşlar yardım edin lütfen

 


Arkasında yatan mantık;

 

 

 

 


Mutex ile alakalı kısım



___:00990EAF                 mov     eax, lpName

___:00990EB4                 push    eax             ; lpName

___:00990EB5                 push    ebp             ; bInitialOwner

___:00990EB6                 push    ebp             ; lpMutexAttributes

___:00990EB7                 call    CreateMutexA

___:00990EBD                 mov     [esp+15CCh+var_15B4], eax

___:00990EC1                 call    GetLastError

___:00990EC7                 cmp     eax, 0B7h

___:00990ECC                 jp      loc_991B61

 



Burada program CreateMutexA Win32 api fonksiyonunu çağırıyor. CreateMutexA fonksiyonu, programlar arası paylaşımlı bir mutex yaratmaya yarar. Aynı mutex adından iki tane yaratmak imkansızdır.

HANDLE WINAPI CreateMutex(
_In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes,
_In_ BOOL bInitialOwner,
_In_opt_ LPCTSTR lpName
);

burada baktığımızda üç parametre aldığını görüyoruz, ve bunlar sırasıyla ebp,ebp ve eax ile sağlanmış. ebp burda muhtemelen null. eax içerisinde ise mutex adını içeren stringe işaret eden bir adres mevcut.

Bu fonksiyon çağrıldıktan sonra, geriye oluşan mutexe ait HANDLE döndürür.

 

 

 

 


___:00990EAF                 mov     eax, lpName

___:00990EB4                 push    eax             ; lpName

___:00990EB5                 push    ebp             ; bInitialOwner

___:00990EB6                 push    ebp             ; lpMutexAttributes

___:00990EB7                 call    CreateMutexA

___:00990EBD                 mov     [esp+15CCh+var_15B4], eax

___:00990EC1                 call    GetLastError

___:00990EC7                 cmp     eax, 0B7h

___:00990ECC                 jp      loc_991B61

 


Dönen handle, EAX'ın içerisinden ESP + 15CC + var_15B4 offsetindeki değişkene aktarılmış.

 

 

 

 


___:00990EAF                 mov     eax, lpName

___:00990EB4                 push    eax             ; lpName

___:00990EB5                 push    ebp             ; bInitialOwner

___:00990EB6                 push    ebp             ; lpMutexAttributes

___:00990EB7                 call    CreateMutexA

___:00990EBD                 mov     [esp+15CCh+var_15B4], eax

___:00990EC1                 call    GetLastError

___:00990EC7                 cmp     eax, 0B7h

___:00990ECC                 jp      loc_991B61

 



Burada ise, GetLastError fonksiyonu çağrılarak mutexin başarı ile yaratılıp yaratılmadığı kontrol ediliyor. GetLastError fonksiyonu, Win32 apisiniden programımız tarafından çağrılan en son fonksiyonunu hata durumunu getirir. Gelen hata değeri EAX registeri içerisine aktarılır. İkinci satırda ise, EAX registerinin değeri 0xB7 değeri ile karşılaştırılıyor. 0xB7 hata kodu, Windows API'sinde ERROR_ALREADY_EXISTS hata kodudur. Yani yaratılmaya çalışılan mutex zaten var ise, CMP EAX, 0xB7, sonuç registerini sıfır yapacaktır (eşit olduklarından dolayı) (hata kodları için buradan listenin devamına bakabilirsiniz)

Ve son olarak, jp loc_991b61 kısmında flag registerinin even parity olması durumunda 991b61 adresine atla komutu işletiliyor. Karşılaştırma işlemi 0 ise, bu sonuç çift sayı olduğu için koşulu sağlıyor. (genelde jp yerine je bulunur fakat bu sürümde derleyici niçin jp koymayı tercih etmiş muamma)

991b61 adresinde knight online already running mesajını gösterip programı sonlandıran kod bloğu mevcut. yapacağımız şey programın bu kod bloğuna ulaşmasını engellemek, bunu ise basit bir şekilde JP komutunu NOP ile değiştirerek (no operation) sağlayabiliriz.

İyi bayramlar.

 

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

dediğini yaptım oyuna multi soktum ancak bir sure sonra oyunlardan ilk açtığımı kapattı

 


Demekki oyun periyodik olarak başka bir yerde daha kontrol sağlıyor. O noktayı da bulup kontrolü kaldırmalısın.

 

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

Demekki oyun periyodik olarak başka bir yerde daha kontrol sağlıyor. O noktayı da bulup kontrolü kaldırmalısın.

 


bu siteden indirdiğim exe üzerinde oynuyorum diğer kontrolu nasıl bulabilirim acaba yukarıda fonksiyondan yola cıkarak birşey elde edebilirmiyim bu konularda yeniyim patch atmayı daha yeni ğrendim

 

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı

bu siteden indirdiğim exe üzerinde oynuyorum diğer kontrolu nasıl bulabilirim acaba yukarıda fonksiyondan yola cıkarak birşey elde edebilirmiyim bu konularda yeniyim patch atmayı daha yeni ğrendim

 


Versiyon kaç, ve hangi exe (link)

 

İletiyi paylaş


Link to post
Sitelerde Paylaş

En kısa yol asm kullanmadan böyle ;

Exe'ye bir kısa yol oluştur ve sonuna E03ED890-8E94-4B42-B1C5-3CDA401AA9C2 bunu ekle.
USA_KnightOnline kullanıyordu eskiden şimdi yerini bu aldı
Hex Editör ile her bi multi kullanıcağın için Knight OnLine Client yazısına 1 karakter bile eksik olmucak şekilde farklı olarak random numaralar ver , yardımcı olabilirsem ömden yaz.

bu arada bunu öğreten faruk abiye tşkrler ^3:)

İletiyi paylaş


Link to post
Sitelerde Paylaş

×
×
  • Yeni Oluştur...