Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Podmienianie łańcuchów pamięci[Orpheu]


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 Ortega

    mów mi Orti

  • Power User

Reputacja: 363
Wszechpomocny

  • Postów:640
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Sosnowiec
Offline

Napisano 24.09.2010 21:10

*
Popularny

Dziś przedstawię tak jak już wspominałem kiedyś o tak zwanym patchowaniu stringów w bibliotece swds lub mp.

Najpierw aby zacząć wypada przeczytać ten poradnik.
[Orpheu] Podstawowe zagadnienia. - Nieoficjalny polski support AMX Mod X

Stopujemy się w punkcie deassemblacji. Gdy mamy już otworzoną gotową do czytania bibliotekę, która nas interesuje możemy użyć magicznego skrótu klawiaturowego w IDA Pro, shift + F12.
Wygeneruje nam się lista stringów. Teraz dla dalszego odczytu tudzież prostszego szukania stringów powinniśmy ustawić sortowanie po kolumnie 'string'. To może zająć chwilę, więc nie stresujcie się, idźcie na kawę.

Chcemy stworzyć, a raczej musimy stworzyć sygnaturę do Orpheu, która będzie pokazywała gdzie ma się odbywać cały proces i jaki typ danych ma być uwzględniany.
Nie pozostaje nam nic jak tylko użycie struktury bazowej i jej edycja wedle potrzeb.

Spoiler


NAZWA_SYGNATURY, można dać byle jaką nazwę lecz ważne jej późniejsze zapamiętanie w korzystaniu z pluginu, który będzie wykonywał operacje.
BIBLIOTEKA - mod dla mp.dll, engine dla swds.dll
TYP_DANYCH
Posłużę się tutaj obrazkiem z alliedmods:
Dołączona grafika
Jak widać na obrazku mamy 3 typy danych: data, rdata i text
aby je poprawnie zapisać w Orpheu użyjemy takich odpowiedników:
data - data
rdata - rodata
text - code


Mamy więc sygnaturę, pozostaje nam stworzyć plugin, który będzie ów sygnaturę wykorzystywał do podmiany właśnie łańcuchów w DLL.

#include < amxmodx >
#include < orpheu >
#include < orpheu_memory >

public plugin_precache( ) {
//
}


Do podmiany stringów potrzebne sa nam w zasadzie 2 funkcje, z czego z każdej korzystamy w zależności od potrzeb.
OrpheuMemoryReplace( const memoryDataName[] count, any:... );
OrpheuMemoryReplaceAtAddress( address, const memoryDataName[], count, any:... );


Bardzo ważną , rzeczą o której nie możemy zapomnieć jest długość stringów, string który zamierzamy podmienić ma odpowiednia długość i nowy nie może być dłuższy !

Przyjmijmy, że chcemy podmienić "models/w_c4.mdl", na c5.mdl, zatem:
#include < amxmodx >
#include < orpheu >
#include < orpheu_memory >

public plugin_precache( ) {
OrpheuMemoryReplace( "NAZWA_SYGNATURY", "models/w_c4.mdl", "models/w_c5.mdl" );

}

W zasadzie to już koniec tego pluginu, a więc i poradnika. Nie wspomniałem o drugiej funkcji, której używa się zdecydowanie rzadziej, ponieważ jako pierwszy parametr podmiany trzeba podać adres komórki który będzie podmieniany.
Dobre jest to w przypadku gdy nie chcemy podmieniać wszystkich możliwych stringów podanych w funkcji pierwszej a tylko jedną z danego adresu, jeśli mamy pewność, że właśnie ona nam jest potrzebna ;)
  • +
  • -
  • 5




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych