Red de conocimiento informático - Conocimiento sistemático - Encuentra la dirección base y el desplazamiento de 1,24 para el árbol del dinero en Warcraft 3.

Encuentra la dirección base y el desplazamiento de 1,24 para el árbol del dinero en Warcraft 3.

Para más detalles, consulte el modificador producido por Tianchi. Código abierto. /TC Tianchi/blog/category/% D3 % ce % cf % B7 a continuación[TC] Manual del programador del Modificador de memoria de Warcraft 3 v8

[tc] Tianchi 2011.3.2 (versión 1.22.0.6328 Tome la dirección como (por ejemplo, todos los números están en hexadecimal) 1. Obtenga el ESI del dispositivo de la lista de dispositivos seleccionados.

0, también puedes usar ".?AUCUnitListNode@@", este método no se usa a continuación.

1, [6FAA2FFC], consulte sub_6F416AE0.

2. [Arriba de +58+4*a2], consulte 6f3a0564.

Donde a2=palabra ptr[+28 o superior], consulte 6F042B76.

3. [+34 arriba] se registra como la dirección base de la lista vinculada, consulte 6f2cc0a8.

Existe otra forma de obtener esta dirección, utilizando el segmento +90, donde. Se ha localizado \CPlayerWar3.cpp. No sé si es exacto.

4. La estructura de esta dirección base:

[Dirección base+1F0]:Encabezado

[Dirección base+1F4]:Pie

[Dirección base+1F8]: Longitud de la tabla

Ver sub _ 6f 415b 70: 6f 415b 95 moveax, [ebx+1f4].

5. Expanda la dirección actual (asumiendo que es igual a la cabecera al principio).

Es decir, [Encabezado], su estructura es la siguiente:

[Nodo+0]: el siguiente nodo

[Nodo+4]: no el siguiente nodo (No están relacionados, no sé por qué)

[Nodo+8]: ESI

Referencia: 6f412504moveax, [EDI+0c] (eax es el nodo posición).

Referencia: 6f412518movedi, [ESI+08] (EDI es la unidad seleccionada, unidad soñada ESI) Dos. Nota importante.

Usando 1 y ESI

● ESI se registra en esta unidad.

● [EstaUnidad+1E4] se registra como Atributos de Unidad.

● [ThisUnit+1EC] está marcado como HeroAttributes2, un importante algoritmo de extracción de memoria.

Algoritmo 0 (6F03F180): Para obtener datos de la memoria del juego, necesitamos el número de índice 1 y el número de referencia 1. Tenga en cuenta que el bit más alto de Index1 no debe ser 1; de lo contrario, este algoritmo no funcionará. Se recomienda juzgar los pros y los contras.

(1)[6FAA4178] está registrado como ThisGame.

(2)[este juego+0xC] cuenta como ThisGameMemory.

(3)[thisgamememory+index 1 * 8+4] se cuenta como Dirección1 y se devuelve.

(4)[Dirección1+0x18] debe ser igual a los números de referencia 1. Si no es igual a (dirección de acceso 0), el juego será anormal, por lo que el algoritmo 1 (6F4634E0) aquí no debe usarse como modificador: también se requiere Index1.

(1) Utilice el algoritmo 0.

(2) La salida de Dirección1+0x78 es el algoritmo de dirección 2 (6F468A20): También se requiere el Índice1.

(1)[thisgamememory+index 1 * 8+4], marcado como Dirección3.

(2) Bajo la premisa de que [dirección 3+20] es cero, devuelve el contenido de [dirección+54]. En tercer lugar, modificar la empresa.

1. HP flotante

[Dirección HPMax -C]2. HPMax flotante

(1)ThisUnit+98 //Consulte sub_6F28A760.

(2)【Arriba de +8】//Consulte sub_6F467710.

(3) Utilice el algoritmo 0 para resolver lo anterior.

(4) El contenido desvinculado está en [+84 arriba] //Referencia 6F46752F: fcompp, EDX3, MP float.

[Dirección MPMax -C]4. Flotación máxima

(1)ThisUnit+98 //Consulte sub_6F28A760.

(2)[Above +28] //Consulte sub_6F467750

(3) Utilice el algoritmo 0 para resolver lo anterior.

(4) Después del desbloqueo, el contenido es [arriba de +84] // Consulte sub_6F4677505, el valor de la experiencia es [atributos de héroe+8C] int.

Código fuente: 6F26DFF0

Es decir: gethero XP() 6. Fuerza inicial:[HeroAttributes+94] int.

Código fuente: 6F353D06

Es decir: int _ _ Thiscall atributo drawhero (int * contexto del juego, int ** atributo de héroe, int * desviación de atributo, int sin firmar * gbuffer) 7 . Valor inicial ágil: [HeroAttributes+A8] int.

Código fuente: Igual que el anterior 8. Valor de inteligencia inicial: int.

Código fuente: 6F0DA9D0

Eso es int _ _ fastcall getheroinecollection _ no estoy seguro (int contribuye 1).

[HeroAttributes+7C+2 * 4] se registra como Índice1.

[HeroAttributes+7C+3 * 4] se registra como números de referencia 1.

Utiliza el algoritmo 1 para obtener la dirección 9. Frecuencia de ataque: [atributo de unidad + 1b0] flotante.

Código fuente: 6F0C64E0

Es decir: int_ _thisall together o of_notsure (int*this, inta2, inta3, inta4).

Esta es una proporción que se aplica a ambas armas. 10. Alcance del arma

Comienza desde UnitAttributes, referencia: 6F352CA3.

La fórmula es [UnitAttributes+258+index * 8] y la referencia es 6F0C61A5.

El índice hace referencia al número de serie del arma, el 0 está relacionado con ataques como el 111:int.

El ataque de compensación bajo los atributos de la unidad de dirección+ es 1-base 1 A0.

Ataque 1 - Base 2 AC

Ataque 1 - Multiplicar 94

Ataque 1 Dados 88

Ataque 1 - Categoría F4 Ataque 2 - Base 1 A4

Ataque 2 - Base 2 B0

Ataque 2 veces 98

Ataque 2 - Dado 8C

Ataque 2 - Categoría F812, velocidad de movimiento: ["parámetro"+70h] Velocidad de movimiento flotante actual.

O:["parameter"+78h]La relación de la velocidad de movimiento del flotador actual.

Código fuente: 6F201190.

Es decir: void _ _ this scall sub _ 6f 201190 (int this, inta2, inta3) y la adquisición de "parámetros": parece empujar un puntero a una serie de funciones (de devolución de llamada) para procesamiento, pero la mayoría de las funciones de procesamiento están en blanco y solo una está relacionada con la velocidad de movimiento. Escribir modificadores significa buscar estas funciones en secuencia hasta encontrar una función, sustituir los parámetros de esta función y calcular los "parámetros" necesarios para la velocidad de movimiento. Todo empezó con 6F077693.

(1)[ThisUnit+1D8] se registra como MoveAbilityIndex.

Referencia: 6F0776F6 en punto de rotura.

(2) El algoritmo 2 (MoveAbilityIndex) se expresa como I

(3) ¡En este momento, solo [I+24]&;[I + 28]! = -1, entonces:

(4) Verifique si [[I]+2D4] es igual a 6F201190 (si es 6F052080, la única función realmente ejecutada es la instrucción ret).

(5) Si es igual, el algoritmo finaliza y la velocidad de movimiento se obtiene mediante [I+70] o [I+78].

Código fuente: 6f 2011a 1: MOVEAX, [ECX+70] ECX = 07C5094.

(6) Si no es igual, entonces el siguiente I = algoritmo 2 ([I+24]13, defensa: [ThisUnit+E0] flotante.

Código fuente: 6F353250

6F3532A2: mov eax, dword ptr [ebx+e0]

Es decir: void _ _ this scall sub _ 6f 353250 (int this, inta2, inta3, inta4) 14, defensa tipo:[ThisUnit+E4] int15, coordenada x:

[ThisUnit+164], referencia: 6F2776C4

[Top +8] es el índice, [Top +C]. es la referencia, Algoritmo 0, Referencia: 6F464685

[Arriba +78], Referencia: 6F38A52C

[La imagen de arriba] es la coordenada X, referencia 6f6de77516, [Coordenada Y] = [Coordenada X +4 dirección] 4. Modificación de dinero

Referencia: 6F407220, ver último párrafo

Es decir: firmado int _ this scall sub _ 6f 407220 (int. esto, inta2 firmado, inta3 sin firmar, inta4, inta5, inta6) 1, alto 16 bits

(1)[esta memoria de juego+1 * 8+4] cuenta como Dirección2

<. p>(2)La dirección 2 tiene 16 bits altos y 16 bits bajos

1P 0190

2P 1410

3P 26a0

. 4P 3920

5P 4bb0

6P 5e30

7P 70c0

8P 8350

9P 95d0

10P a860

11P bae0

12P cd703 por jugador

Dinero 0 int x10

Madera +80 int x10

Población máxima +180 int

Población actual +200 lista de inteligencia y adquisición de bienes

1, getanita (seleccione unidad específica, índice de artículos), donde Índice de artículos = 0 -5.

Código fuente: sub_6F26E0E0

El proceso es:

(1)[Unidad seleccionada + 1f4]Registrado como una lista.

(2) Si la lista es 0, devuelve 0.

(3) De lo contrario, no juzgaremos si ItemIndex está por encima de la línea.

Referencia: 6F0F04B0

Es decir: GetListItem(List, ItemIndex)

(4) Lista+C * Itemndex+0x70, marcado como Index1, tenga en cuenta que no hay solución Cita.

(5) Algoritmo 0, dirección [Índice1], valor de referencia [Índice1+4] y el resultado se registra como RawItem.

(6) RawItem es 0 o [RawItem+0x20] no es 0, lo que provoca que se devuelva 0.

(7)[RawItem+0x54] ya que la dirección base de este artículo es CurrentItem VI. Modificaciones del proyecto.

1. Número de usos [CurrentItem+84]

2. Nombre [CurrentItem+30]