<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://t4ctech.hyperion-roleplay.com/index.php?action=history&amp;feed=atom&amp;title=Reverse-engineering_des_dll_contenant_des_Npcs</id>
	<title>Reverse-engineering des dll contenant des Npcs - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://t4ctech.hyperion-roleplay.com/index.php?action=history&amp;feed=atom&amp;title=Reverse-engineering_des_dll_contenant_des_Npcs"/>
	<link rel="alternate" type="text/html" href="https://t4ctech.hyperion-roleplay.com/index.php?title=Reverse-engineering_des_dll_contenant_des_Npcs&amp;action=history"/>
	<updated>2026-07-10T05:55:57Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://t4ctech.hyperion-roleplay.com/index.php?title=Reverse-engineering_des_dll_contenant_des_Npcs&amp;diff=44&amp;oldid=prev</id>
		<title>FunJp : Page créée avec « == Reverse-engineering des dll contenant des Npcs == Dans cette zone du wiki nous parlerons des modifications manuelles des dll utilisées par le serveur T4C lui-même.  D... »</title>
		<link rel="alternate" type="text/html" href="https://t4ctech.hyperion-roleplay.com/index.php?title=Reverse-engineering_des_dll_contenant_des_Npcs&amp;diff=44&amp;oldid=prev"/>
		<updated>2017-04-23T19:42:36Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « == Reverse-engineering des dll contenant des Npcs == Dans cette zone du wiki nous parlerons des modifications manuelles des dll utilisées par le serveur T4C lui-même.  D... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Reverse-engineering des dll contenant des Npcs ==&lt;br /&gt;
Dans cette zone du wiki nous parlerons des modifications manuelles des dll utilisées par le serveur T4C lui-même.&lt;br /&gt;
&lt;br /&gt;
Dans nos exemples, nous partirons à chaque fois du Npc Kalastor afin de faciliter l&amp;#039;écriture de cet article.&lt;br /&gt;
&lt;br /&gt;
=== Modification des emplacements de Npcs (Personnage non joueur) ===&lt;br /&gt;
En premier lieu dans IDA Pro nous recherchons Kalastor.&lt;br /&gt;
&lt;br /&gt;
==== Recherche du Npc dans le code assembleur ====&lt;br /&gt;
Pour cela sélectionner la fenêtre contenant la liste des strings et utiliser le code clavier (ALT + T). Ensuite entrez le nom &amp;quot;Kalastor&amp;quot; et lancer la recherche.&lt;br /&gt;
&lt;br /&gt;
Si vous ne tombez pas directement sur votre cible, il vous suffit tout simplement d&amp;#039;utiliser le code clavier (CTRL + T) afin d&amp;#039;effectuer la recherche suivante.&lt;br /&gt;
&lt;br /&gt;
Une fois que nous avons trouver l&amp;#039;identifiant de Kalasor qui est &amp;quot;[3044]Kalastor&amp;quot; vous double cliquez dans la fenêtre des string ce qui vous conduira directement dans la database de l&amp;#039;exécutable contenant le string.&lt;br /&gt;
 .data:10050C48 a3044Kalastor   db &amp;#039;[3044]Kalastor&amp;#039;,0   ; DATA XREF: sub_10017E80+35A o&lt;br /&gt;
 .data:10050C48                                         ; sub_10017E80+376 o&lt;br /&gt;
&lt;br /&gt;
==== Recherche des coordonnées du Npc dans le code assembleur ====&lt;br /&gt;
Après cela, nous n&amp;#039;avons plus qu’à nous rendre à l&amp;#039;offset 10017E80+35A afin d&amp;#039;y trouver le code assembleur suivant :&lt;br /&gt;
 .text:100181DA                 mov     edi, offset a3044Kalastor ; &amp;quot;[3044]Kalastor&amp;quot;&lt;br /&gt;
 .text:100181DF                 repne scasb&lt;br /&gt;
 .text:100181E1                 not     ecx&lt;br /&gt;
 .text:100181E3                 push    ecx&lt;br /&gt;
 .text:100181E4                 call    sub_1003CDB0&lt;br /&gt;
 .text:100181E9                 or      ecx, 0FFFFFFFFh&lt;br /&gt;
 .text:100181EC                 mov     edx, eax&lt;br /&gt;
 .text:100181EE                 add     esp, 4&lt;br /&gt;
 .text:100181F1                 mov     [ebx+0Ch], edx&lt;br /&gt;
 .text:100181F4                 xor     eax, eax&lt;br /&gt;
 .text:100181F6                 mov     edi, offset a3044Kalastor ; &amp;quot;[3044]Kalastor&amp;quot;&lt;br /&gt;
 .text:100181FB                 repne scasb&lt;br /&gt;
 .text:100181FD                 not     ecx&lt;br /&gt;
 .text:100181FF                 sub     edi, ecx&lt;br /&gt;
 .text:10018201                 mov     eax, ecx&lt;br /&gt;
 .text:10018203                 mov     esi, edi&lt;br /&gt;
 .text:10018205                 shr     ecx, 2&lt;br /&gt;
 .text:10018208                 mov     edi, edx&lt;br /&gt;
 .text:1001820A                 rep movsd&lt;br /&gt;
 .text:1001820C                 mov     ecx, eax&lt;br /&gt;
 .text:1001820E                 and     ecx, 3&lt;br /&gt;
 .text:10018211                 rep movsb&lt;br /&gt;
 .text:10018213                 pop     edi&lt;br /&gt;
 .text:10018214                 pop     esi&lt;br /&gt;
 .text:10018215                 mov     dword ptr [ebx+5Ch], 0B42h ; Coordonnée X = 2882&lt;br /&gt;
 .text:1001821C                 mov     dword ptr [ebx+60h], 468h  ; Coordonnée Y = 1128&lt;br /&gt;
 .text:10018223                 mov     dword ptr [ebx+64h], 0     ; Monde        = 0&lt;br /&gt;
 .text:1001822A                 pop     ebx&lt;br /&gt;
 .text:1001822B                 retn&lt;br /&gt;
Comme vous pouvez le voir plus haut j&amp;#039;ai commenté dans le code assembleur l&amp;#039;emplacement des coordonnées du PNJ. Nous devons simplement modifier les valeurs afin que Kalastor soit à un autre endroit dans le jeu.&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, nous utiliserons les coordonnées de l&amp;#039;île GM(1500, 500, 0) comme nouvelle position pour notre ami Kalastor.&lt;br /&gt;
&lt;br /&gt;
==== Modification des coordonnées avec un éditeur hexadécimal ====&lt;br /&gt;
Nous ouvrons maintenant le fichier NPCs.dll dans un éditeur hexadécimal et nous recherchons l&amp;#039;offset de la coordonnée X pour débuter.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devrons effectuer un petit calcul afin de trouver celui-ci facilement :&lt;br /&gt;
&lt;br /&gt;
Nous prenons l&amp;#039;offset de la coordonnée X dans IDA Pro qui est 10018215h&lt;br /&gt;
 .text:10018215                 mov     dword ptr [ebx+5Ch], 0B42h ; Coordonnée X&lt;br /&gt;
&lt;br /&gt;
===== Obtention de l&amp;#039;offset ciblant les coordonnée dans le code binaire =====&lt;br /&gt;
Ensuite nous devons soustraire de cette offset l&amp;#039;image base du fichier NPCs.dll (Un simple PE Editor ou IDA Pro lui même vous donne cette information). En général c&amp;#039;est toujours 0x10000000h pour une DLL et 0x400000h pour un exécutable.&lt;br /&gt;
 0x10018215h - 0x10000000h = 0x18215h&lt;br /&gt;
&lt;br /&gt;
===== Analyse du code binaire des coordonnées =====&lt;br /&gt;
Dans notre éditeur hexadécimal, nous allons directement à l&amp;#039;offset 0x18215h (En général vous devez utiliser le code clavier CTRL + G) la ou nous y trouverons le code suivant contenant les coordonnées :&lt;br /&gt;
 C7435C420B0000C7436068040000C7436400000000&lt;br /&gt;
Voici une découpe du code assembleur pour que vous puissez comprendre la ligne ci-dessus :&lt;br /&gt;
 mov   dword ptr [ebx+  Adresse]   Valeur (Qui est du dword)&lt;br /&gt;
 C7    43               5C        420B0000 &lt;br /&gt;
 C7    43               60        68040000&lt;br /&gt;
 C7    43               64        00000000&lt;br /&gt;
&lt;br /&gt;
===== Conversion des coordonnées en hexadécimal =====&lt;br /&gt;
Maintenant pour que notre pnj soit en 1500, 500, 0, nous modifier les valeurs par nos nouvelles coordonnées. Comme vous avez pu le remarquer plus haut pour la coordonnée X nous avons le code hexadécimal 420B0000, donc nous devrons convertir notre coordonnée en hexadécimal et ensuite la swaper.&lt;br /&gt;
&lt;br /&gt;
Conversion de nos coordonnées en hexadécimal :&lt;br /&gt;
 X : 1500    =  5DC&lt;br /&gt;
 Y : 500     =  1F4&lt;br /&gt;
 W : 0       =  0&lt;br /&gt;
Nous savons également qu&amp;#039;un dword et coder sur 4 octets donc nous convertissons nos coordonnées hexadécimal en dword, pour cela nous devons simplement ajouter des 0 jusqu&amp;#039;à ce que notre code contienne 8 caractères...&lt;br /&gt;
 X : 000005DC&lt;br /&gt;
 Y : 000001F4&lt;br /&gt;
 W : 00000000&lt;br /&gt;
&lt;br /&gt;
===== Swaping des coordonnées hexadécimal =====&lt;br /&gt;
Ensuite nous swapons les coordonnées (je le fait en détails, mais tout cela peut-être fait de tête très facilement) :&lt;br /&gt;
&lt;br /&gt;
Swap pour X :&lt;br /&gt;
 000005DC&lt;br /&gt;
 0000 | 05DC&lt;br /&gt;
 05DC | 0000&lt;br /&gt;
 05 | DC || 00 | 00&lt;br /&gt;
 DC | 05 || 00 | 00&lt;br /&gt;
 DC05 | 0000&lt;br /&gt;
 DC050000&lt;br /&gt;
Swap pour Y :&lt;br /&gt;
 000001F4&lt;br /&gt;
 0000 | 01F4&lt;br /&gt;
 01F4 | 0000&lt;br /&gt;
 01 | F4 || 00 | 00&lt;br /&gt;
 F4 | 01 || 00 | 00&lt;br /&gt;
 F401 || 0000&lt;br /&gt;
 F4010000&lt;br /&gt;
Swap pour W : (Pas besoin ce ne sont que des 0)&lt;br /&gt;
&lt;br /&gt;
===== Ecriture des modifications =====&lt;br /&gt;
Il nous faut simplement remplacer le code suivant :&lt;br /&gt;
 C7435C&amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;#039;420B0000&amp;#039;&amp;#039;&amp;#039;C74360&amp;#039;&amp;#039;&amp;#039;68040000&amp;#039;&amp;#039;&amp;#039;C74364&amp;#039;&amp;#039;&amp;#039;00000000&amp;#039;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Par celui ci :&lt;br /&gt;
 C7435C&amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;#039;DC050000&amp;#039;&amp;#039;&amp;#039;C74360&amp;#039;&amp;#039;&amp;#039;F4010000&amp;#039;&amp;#039;&amp;#039;C74364&amp;#039;&amp;#039;&amp;#039;00000000&amp;#039;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Maintenant nous pouvons sauvegarder notre fichier NPCs.dll, relancer le serveur et nous apercevoir que Kalastor ce trouve en 1500, 500, 0.&lt;br /&gt;
&lt;br /&gt;
=== Modification des statistiques des Npcs ===&lt;br /&gt;
A venir (il est 8h du mat je dois aller bosser xD)&lt;br /&gt;
&lt;br /&gt;
=== Modification de l&amp;#039;apparence des Npcs ===&lt;br /&gt;
A venir (il est 8h du mat je dois aller bosser xD)&lt;br /&gt;
&lt;br /&gt;
=== Modification de l&amp;#039;équipements des Npcs ===&lt;br /&gt;
A venir (il est 8h du mat je dois aller bosser xD)&lt;br /&gt;
&lt;br /&gt;
--Mestoph 25 mars 2009 à 10:19 (MSK)&lt;/div&gt;</summary>
		<author><name>FunJp</name></author>
	</entry>
</feed>