Перейти к содержанию
Karabatus

Значение адреса в другой адрес

Рекомендуемые сообщения

Добрый вечер! Я пытаюсь сделать свой первый скрипт по видео-урокам "08. Пишем первый скрипт". И у меня весь код брякается как в видео-уроке и что-то делает в выделенной памяти. Но в анализе структуры данных значение не меняется. Для теста я решил из структуры игрока (ebx) взять значение маны(int 188) по смещению FC и записать это значение в адрес хп(текущий int 3500) по смещению F4 и у меня не изменяется здоровье. Я понимаю, что его возможно перезаписывает что-то (но вроде не должно), так же я пробовал задействовать и другие смещения для записи (к которым инструкции не обращаются) И проверил эти другие адреса на запись, чтение после выполнения моего скрипта. Ничего не произошло. Этот скрипт я делаю для теста, чтобы научится писать, а по факту у меня есть задача считать адрес структуры игрока из ebx и закинуть куда-то в переменную, может быть в незадействованный адрес. И считывать потом из указанных мною адресов, структуры, которые мне интересны. Видел видео о поиске незадействованных адресов от Garik, в них он указывает скрипт, который ищет незадействованные адреса, но только со значением 0. После того как он выложил урок, он сказал, что скрипт не верно работает и поэтому я данный урок отсеял (возможно он мне подойдет, я не знаю) Очень извиняюсь за простыню слов, был бы рад с помощью моего текущего скрипта и подсказка почему может не работать. И буду рад если кто подскажет как выявить незадействованные адреса в памяти и записать в них адреса своих структур, которые я нашел в различных инструкциях (конкретно значения регистров)

Спойлер

код


{ Game   : warspear.exe
  Version: 1.0
  Date   : 09-14-21
  Author : [open aamaker.lua and pastle Author]

  This script does blah blah blah
  
  Make by aamaker Lua plagin 
}

[ENABLE]

aobscanmodule(INJECT,PPPP,8bxxxxxxxxxx85xx79xx33xxebxx8bxxxxxxxxxx3bxx0f4fxx3bxxxxxxxxxx75xx8bxxxxxxxxxx3bxxxxxxxxxx0f84xxxxxxxx8dxxxxxx8bxxe8xxxxxxxxa1xxxxxxxx8bxxxx8bxxxx0fb7xxxxxxxxxxxxc1xxxxf7xxxx0facxxxxc1xxxxc1xxxx89xxxx66xxxxxx66xxxx75xxc1xxxx66xxxxxx74xx8bxx8dxxxxxx8bxxffxxxx8bxxe8xxxxxxxxc6xxxxxx8bxxxxxxxxxx85xx79xx33xxebxx8bxxxxxxxxxx3bxx0f4fxx89xxxxxxxxxx8bxxxxxxxxxx83xxxx8dxxxx89xxxxxxxxxxe8xxxxxxxx83xxxx8dxxxxxx8dxxxxxxxxxxc7xxxxxxxxxxxxe8xxxxxxxx8bxxxx8dxxxxeb)
alloc(newmem,$1000)

label(code)
label(return)
registersymbol(INJECT)

newmem:
    push dword ptr [ebx+000000FC]
    pop dword ptr [ebx+000000F4]
code:
    mov ecx,[ebx+000000FC]
    jmp return

INJECT:
    jmp newmem
    nop

return:


[DISABLE]

INJECT:
    mov ecx,[ebx+000000FC]

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: PPPP

warspear.exe+4355D9: EB 02 - jmp 008355DD
warspear.exe+4355DB: B3 01 - mov bl,01
warspear.exe+4355DD: 88 5D F0  - mov [ebp-10],bl
warspear.exe+4355E0: FF 75 F0  - push [ebp-10]
warspear.exe+4355E3: 8D B7 54060000  - lea esi,[edi+00000654]
warspear.exe+4355E9: 8B CE  - mov ecx,esi
warspear.exe+4355EB: E8 405EFDFF - call 0080B430
warspear.exe+4355F0: 84 DB  - test bl,bl
warspear.exe+4355F2: 0F84 E9000000 - je 008356E1
warspear.exe+4355F8: 8B 9F C4000000  - mov ebx,[edi+000000C4]
// ---------- INJECTING HERE ----------
PPPP: 8B 8B FC000000  - mov ecx,[ebx+000000FC]
// ---------- DONE INJECTING  ----------
warspear.exe+435604: 85 C9  - test ecx,ecx
warspear.exe+435606: 79 04 - jns 0083560C
warspear.exe+435608: 33 C9  - xor ecx,ecx
warspear.exe+43560A: EB 0B - jmp 00835617
warspear.exe+43560C: 8B 83 00010000  - mov eax,[ebx+00000100]
warspear.exe+435612: 3B C8  - cmp ecx,eax
warspear.exe+435614: 0F4F C8  - cmovg ecx,eax
warspear.exe+435617: 3B 8F 684F0000  - cmp ecx,[edi+00004F68]
warspear.exe+43561D: 75 12 - jne 00835631
warspear.exe+43561F: 8B 83 00010000  - mov eax,[ebx+00000100]
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во

20 минут назад, Karabatus сказал:

Добрый вечер!

1. Читаем правила (оформление поста - у тебя не заюзан тег кода - поэтому код плохо читается).
2. почему у тебя не работает - потому что ты взял инструкцию работающую с маной.
Если ты хочешь изменить значение именно ХП. то и нужно брать инструкцию по хп.
3. лучше для записи юзать не стек, а обычной mov в твоем случае
 

newmem:
    mov ecx,[ebx+000000F4]
    mov [ebx+000000FC],ecx
code:
    mov ecx,[ebx+000000FC]

Если ты сделаешь так к примеру в выложенном тобой скрипте, то у тебя мана станет как НР.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. Значения поменялись! А может кто подсказать, как мне считать регистр ebx (адрес структуры игрока) и занести в какой-нибудь незадействованный статичный адрес? Основная задача - иметь несколько адресов, к которым я могу обращаться и в которых будут адреса моих структур, даже после перезагрузки игры

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, Karabatus сказал:

как мне считать регистр ebx (адрес структуры игрока) и занести в какой-нибудь незадействованный статичный адрес?

Полно уроков у нас на канале, смотри, во многих из них используются метки в качестве переменных, и в паре точно есть сохранение базового адреса структуры в такую метку/переменную

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я имею в виду, можно ли записать адрес структуры в статичный адрес игры, который никак не используется. Т.е. сделать так, что по адресу 123 у меня всегда будет лежать значение - адрес структуры игрока, по адресу 456 у меня всегда будет значение - адрес на структуру мира (к примеру). Может быть можно вычислить, что адрес 123 в игре не используется и в него мы запишем любое значение какое захотим (в частности адрес структуры из инструкции) Переменная это хорошо, но я хотел бы считывать это значение из Cheat engine в C# или python, но пока только без проблем могу считать указанный адрес и его значение, а вот переменную cheat engine, думаю более проблематично будет считать (возможно я не прав)

Изменено пользователем Karabatus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, Karabatus сказал:

Переменная это хорошо, но я хотел бы считывать это значение из Cheat engine в C# или python, но пока только без проблем могу считать указанный адрес и его значение, а вот переменную cheat engine, думаю более проблематично будет считать (возможно я не прав)

а зачем тебе считывать переменные СЕ из C# или python? Делай всё что нужно сразу при помощи C# или python. А ещё удобнее(на мой взгляд) писать подобные штуки на c++(альтернатив мало, если речь идёт о чём-то крупном). Или же прямо в CE lua(lua ничуть не хуже, чем тот же python).
Но кажется для начала тебе(возможно) следует немного больше попрактиковаться с CE. Если у тебя есть серьёзная причина поступить иначе то попробуй для начала просто записать адрес переменной в файл, самое быстрое решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все секции исполняемых файловы выравниваются по 4кб границе. Поищи "пустые" места на границе любой секции, и используй адрес. Разумеется, этот адрес ты просто так не вычислишь извне - тебе надо будет знать базовый адрес исполняемого модуля игры, и плюс смещение до найденного тобой неиспользуемого адреса. Если то, что я сейчас написал, непонятно, топай смотреть все уроки цикла "Взлом игр от А до Я" на нашем канале, и возвращайся только после просмотра всего цикла. Разумеется, если после просмотра у тебя еще останутся вопросы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот в том и проблема, что я это затеял из-за тех значений, базовый адрес которых я не могу найти, у меня таких адресов не более 10% из всех, но их знать мне тоже важно. Поэтому решил их брать из инструкций. Делаю это для того, потому что пишу бота для игры и считываю весь адрес с офсетами, а вот значение регистра из инструкций пока не сообразил как считывать. Решил что самым простым будет вписывание в файл, но этот скрипт почему-то не хочет работать, выдавая какую то ошибку синтаксиса.
 

Ошибка:[string "local syntaxcheck,memrec=...
..."]:6: attempt to concatenate a nil value
Спойлер

{ Game   : warspear.exe
  Version: 1.0
  Date   : 09-15-21
  Author : [open aamaker.lua and pastle Author]

  This script does blah blah blah
 
  Make by aamaker Lua plagin ;)
}

[ENABLE]

{$LUA}
-- запись в файл Garik66.txt
function write_file()
if readInteger('WriteID') == 1 then
file=io.open('Garik66.txt','a+')
file:write("newID - "..readInteger('IDItem66 '.."\n")..";  ")
file:close()
writeInteger('WriteID', 0)
end
end

-- таймер для проверки
t=createTimer(nil)
timer_setInterval(t, 100)
timer_onTimer(t, write_file)
timer_setEnabled(t, true)
{$ASM}


aobscanmodule(INJECT,warspear.exe+3C0088,8bxxxxxxxxxx3bxx0f4fxx8bxxxxxxxxxxxx81)
alloc(newmem,$1000)

label(WriteID)
label(code)
label(return)
registersymbol(INJECT)
registersymbol(WriteID)

newmem:
    mov eax,[edi+000000F4]
    mov [edi+00000100],eax
code:

    mov eax,[edi+00000100]
    jmp return

WriteID:
    dd 1
IDItem66:
    dd 0

INJECT:
    jmp newmem
    nop

return:


[DISABLE]
{$LUA}
-- отключение таймера
timer_setEnabled(t, false)
{$ASM}

INJECT:
    mov eax,[edi+00000100]

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: warspear.exe+3C0088

warspear.exe+3C0074: 83 C0 14 - add eax,14
warspear.exe+3C0077: 74 ED - je 007C0066
warspear.exe+3C0079: 80 78 34 00 - cmp byte ptr [eax+34],00
warspear.exe+3C007D: 74 E7 - je 007C0066
warspear.exe+3C007F: B0 01 - mov al,01
warspear.exe+3C0081: 5F - pop edi
warspear.exe+3C0082: 5E - pop esi
warspear.exe+3C0083: 59 - pop ecx
warspear.exe+3C0084: 5D - pop ebp
warspear.exe+3C0085: C2 0400 - ret 0004
// ---------- INJECTING HERE ----------
warspear.exe+3C0088: 8B 87 00010000  - mov eax,[edi+00000100]
// ---------- DONE INJECTING  ----------
warspear.exe+3C008E: 3B F0  - cmp esi,eax
warspear.exe+3C0090: 0F4F F0  - cmovg esi,eax
warspear.exe+3C0093: 8B 8F 9C030000  - mov ecx,[edi+0000039C]
warspear.exe+3C0099: 52 - push edx
warspear.exe+3C009A: 81 C1 98000000 - add ecx,00000098
warspear.exe+3C00A0: E8 5B720200 - call 007E7300
warspear.exe+3C00A5: 33 C9  - xor ecx,ecx
warspear.exe+3C00A7: 3B F0  - cmp esi,eax
warspear.exe+3C00A9: 5F - pop edi
warspear.exe+3C00AA: 0F9D C0  - setge al
}

 

На счет делать все сразу в питоне. Я искал в гугле информацию, но там есть ясный ответ, что питон слаб для такого. В данный момент бот написан на питоне и он работает но с изображением. Я решил его переписать на работу с памятью, но переписывать с нуля его на С++ (который я пока не знаю) или C# это не тот вариант, что я бы хотел (согласен, это мои проблемы). Я подумал, что работать с регистром это не должно быть сложным, но столкнулся с проблемой с вписывания в файл, а так по сути это тот вариант, что меня бы устроил

Изменено пользователем Karabatus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Karabatus сказал:

базовый адрес которых я не могу найти, у меня таких адресов не более 10% из всех, но их знать мне тоже важно. Поэтому решил их брать из инструкций.

А я тебе говорил не про базовый адрес твоих значений. Я тебе говорил найти свободный адрес на границе секции. Относительно базового адреса исполняемого модуля смещение до найденного тобой адреса будет постоянным. Вот это и используй.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот пришел к такому, файл создаётся но значение регистра не вписывается.

Спойлер

{ Game   : warspear.exe
  Version: 1.0
  Date   : 09-14-21
  Author : [open aamaker.lua and pastle Author]

  This script does blah blah blah
  
  Make by aamaker Lua plagin ;)
}

[ENABLE]


aobscanmodule(INJECT,PPPP,8bxxxxxxxxxx85xx79xx33xxebxx8bxxxxxxxxxx3bxx0f4fxx3bxxxxxxxxxx75xx8bxxxxxxxxxx3bxxxxxxxxxx0f84xxxxxxxx8dxxxxxx8bxxe8xxxxxxxxa1xxxxxxxx8bxxxx8bxxxx0fb7xxxxxxxxxxxxc1xxxxf7xxxx0facxxxxc1xxxxc1xxxx89xxxx66xxxxxx66xxxx75xxc1xxxx66xxxxxx74xx8bxx8dxxxxxx8bxxffxxxx8bxxe8xxxxxxxxc6xxxxxx8bxxxxxxxxxx85xx79xx33xxebxx8bxxxxxxxxxx3bxx0f4fxx89xxxxxxxxxx8bxxxxxxxxxx83xxxx8dxxxx89xxxxxxxxxxe8xxxxxxxx83xxxx8dxxxxxx8dxxxxxxxxxxc7xxxxxxxxxxxxe8xxxxxxxx8bxxxx8dxxxxeb)
alloc(newmem,$1000)

label(code)
label(register)
label(return)
registersymbol(INJECT)


newmem:

code:
    mov [register], ebx
	mov ecx,[ebx+000000FC]
	jmp return

{$LUA}
   file=io.open('Garik66.txt','w')
   file:write(readInteger(register))
   file:close()
{$ASM}

register:
    db 00 00 00 00


INJECT:
	jmp code
	nop

return:

[DISABLE]
{$LUA}
{$ASM}

INJECT:
	mov ecx,[ebx+000000FC]


unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: PPPP

warspear.exe+4355D9: EB 02 - jmp 008355DD
warspear.exe+4355DB: B3 01 - mov bl,01
warspear.exe+4355DD: 88 5D F0  - mov [ebp-10],bl
warspear.exe+4355E0: FF 75 F0  - push [ebp-10]
warspear.exe+4355E3: 8D B7 54060000  - lea esi,[edi+00000654]
warspear.exe+4355E9: 8B CE  - mov ecx,esi
warspear.exe+4355EB: E8 405EFDFF - call 0080B430
warspear.exe+4355F0: 84 DB  - test bl,bl
warspear.exe+4355F2: 0F84 E9000000 - je 008356E1
warspear.exe+4355F8: 8B 9F C4000000  - mov ebx,[edi+000000C4]
// ---------- INJECTING HERE ----------
PPPP: 8B 8B FC000000  - mov ecx,[ebx+000000FC]
// ---------- DONE INJECTING  ----------
warspear.exe+435604: 85 C9  - test ecx,ecx
warspear.exe+435606: 79 04 - jns 0083560C
warspear.exe+435608: 33 C9  - xor ecx,ecx
warspear.exe+43560A: EB 0B - jmp 00835617
warspear.exe+43560C: 8B 83 00010000  - mov eax,[ebx+00000100]
warspear.exe+435612: 3B C8  - cmp ecx,eax
warspear.exe+435614: 0F4F C8  - cmovg ecx,eax
warspear.exe+435617: 3B 8F 684F0000  - cmp ecx,[edi+00004F68]
warspear.exe+43561D: 75 12 - jne 00835631
warspear.exe+43561F: 8B 83 00010000  - mov eax,[ebx+00000100]
}

 

если написать  file.write("123") , то в файл без проблем впишется 123

Изменено пользователем Karabatus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

image.png

Зачем у тебя двоеточия? о_О

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, Xipho сказал:

А я тебе говорил не про базовый адрес твоих значений. Я тебе говорил найти свободный адрес на границе секции. Относительно базового адреса исполняемого модуля смещение до найденного тобой адреса будет постоянным. Вот это и используй.

если правильно понял:
мой базовый адрес модуля warspear.exe - 400000
получается что смещение 14 это свободный адрес? или я не верно понялspacer.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотри, обрисую тебе общий алгоритм приблизительно:

1. Находишь инструкцию, работающую с нужным тебе значением

2. Находишь неиспользуемый адрес на границе секций модуля, в котором находится твоя инструкция (в том же СЕ есть функционал поиска кейвов)

3. Вычисляешь базовый адрес модуля, в котором находится твоя инструкция.

4. Вычисляешь смещение от базового адреса модуля, в котором находится твоя инструкция, до найденного тобой свободного адреса в этом же модуле

5. В кейве на инструкцию делаешь запись в найденный тобой адрес
6. В коде твоего собственного приложения, бот это или что, неважно, ты точно также находишь базовый адрес модуля, в котором была исходная инструкция, и добавляешь найденное ранее смещение. Таким образом ты будешь иметь "статичный" адрес нужного тебе значения. 

 

Есть вариант попроще, но он работает далеко не всегда - найти вручную цепочку указателей методом реверсивного поиска (урок есть у нас на канале).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, Xipho сказал:

image.png

Зачем у тебя двоеточия? о_О

скопировал из скрипта Garik66. Если поставлю точку то скрипт не разрешает изменения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, Karabatus сказал:

получается что смещение 14 это свободный адрес?

Может быть свободный, но может быть и нет, ты этого не можешь знать. А вот адреса в конце секций в пределах четырех килобайт почти всегда бывают свободны (особенность компиляторов и оптимизаций).

2 минуты назад, Karabatus сказал:

Если поставлю точку то скрипт не разрешает изменения

Странная конструкция. Впрочем, в СЕ Lua я не силён, может, так должно быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, Xipho сказал:

Смотри, обрисую тебе общий алгоритм приблизительно:

1. Находишь инструкцию, работающую с нужным тебе значением

2. Находишь неиспользуемый адрес на границе секций модуля, в котором находится твоя инструкция (в том же СЕ есть функционал поиска кейвов)

3. Вычисляешь базовый адрес модуля, в котором находится твоя инструкция.

4. Вычисляешь смещение от базового адреса модуля, в котором находится твоя инструкция, до найденного тобой свободного адреса в этом же модуле

5. В кейве на инструкцию делаешь запись в найденный тобой адрес
6. В коде твоего собственного приложения, бот это или что, неважно, ты точно также находишь базовый адрес модуля, в котором была исходная инструкция, и добавляешь найденное ранее смещение. Таким образом ты будешь иметь "статичный" адрес нужного тебе значения. 

 

Есть вариант попроще, но он работает далеко не всегда - найти вручную цепочку указателей методом реверсивного поиска (урок есть у нас на канале).

 

на счет варианта попроще, 90% указателей я нашел вручную, вот с 10% проблема, не получается найти. Поэтому и решил работать с инструкциями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
31 минуту назад, Xipho сказал:

Смотри, обрисую тебе общий алгоритм приблизительно:

1. Находишь инструкцию, работающую с нужным тебе значением

2. Находишь неиспользуемый адрес на границе секций модуля, в котором находится твоя инструкция (в том же СЕ есть функционал поиска кейвов)

3. Вычисляешь базовый адрес модуля, в котором находится твоя инструкция.

4. Вычисляешь смещение от базового адреса модуля, в котором находится твоя инструкция, до найденного тобой свободного адреса в этом же модуле

5. В кейве на инструкцию делаешь запись в найденный тобой адрес
6. В коде твоего собственного приложения, бот это или что, неважно, ты точно также находишь базовый адрес модуля, в котором была исходная инструкция, и добавляешь найденное ранее смещение. Таким образом ты будешь иметь "статичный" адрес нужного тебе значения. 

 

Есть вариант попроще, но он работает далеко не всегда - найти вручную цепочку указателей методом реверсивного поиска (урок есть у нас на канале).

 

нашел кейвы в структуре игрока где лежит инструкция, с которой работал. Но вот не задача, именно с 3 пунктом, потому как реверсивным поиском мне не удавалось найти базовый адрес, со смещениями до моей структуры. А автоматический поиск не стабилен.

Если бы я мог найти указатель на структуру, то мне и кейвы не нужны были бы 😃

Изменено пользователем Karabatus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, Karabatus сказал:

нашел кейвы в структуре игрока где лежит инструкция, с которой работал

кажется ты сделал что-то не то. В ce есть специальный инструмент для поиска неиспользуемой памяти. Пересмотри обучающие ролики с канала гхл, там это точно было. Вот этот плейлист(вообще весь) обязателен к внимательному просмотру: 

 

 

4 часа назад, Xipho сказал:

Странная конструкция. Впрочем, в СЕ Lua я не силён, может, так должно быть.

оба варианта верны. В данном случае вызывается метод конкретного объекта, это работает примерно как и в c++ соглашение thiscall. Если поставить двоеточие то в качестве первого параметра отправляется указатель на объект, если точку то необходимо самому передать указатель(file:write("что-то там ") vs file.write(file,"что-то там"))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, youneuoy сказал:

кажется ты сделал что-то не то. В ce есть специальный инструмент для поиска неиспользуемой памяти. Пересмотри обучающие ролики с канала гхл, там это точно было. Вот этот плейлист(вообще весь) обязателен к внимательному просмотру: 

 

не очень понял, а что там сложного в инструменте. Ввести начальный адрес поиска и конечный. Я ввожу начальный адрес структуры (по правильному бы знать еще и конечный) но по факту в конечный поиск не трогаю. Находит адреса в структуре, которые я могу перезаписывать - всё супер, могу даже ручками вписать. Но по факту, мне ведь чтобы найти смещение надо найти базовый адрес структуры, а его я как раз и хочу закинуть в какой-нибудь кейв)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, Karabatus сказал:

чтобы найти смещение надо найти базовый адрес структуры,

Я устал повторять. Пожалуйста, перечитай мои предыдущие сообщения. И постарайся еще понять/погуглить, чем отличается базовый адрес модуля от адреса структуры (его еще называют базовым адресом игрока)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
23 минуты назад, Karabatus сказал:

не очень понял, а что там сложного в инструменте.

здесь речь идёт скорее об обучении основам реверса вообще, а не только о СЕ. Мне кажется, что если бы ты просмотрел это всё то вопросов многих у тебя бы не возникло(а ещё ответы на вопросы были бы прям совсем понятны). Ты ведь спрашиваешь здесь о банальных вещах не потому, что всё очень просто, верно?

 

А вообще я уже успел забыть о чём разговор ведём😆

Изменено пользователем youneuoy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, Xipho сказал:

Я устал повторять. Пожалуйста, перечитай мои предыдущие сообщения. И постарайся еще понять/погуглить, чем отличается базовый адрес модуля от адреса структуры (его еще называют базовым адресом игрока)

базовый адрес модуля (warspear.exe) у меня всегда статичный и он равен 400000

 

если у меня кейв лежит в структуре игрока, то по отношению к модулю он ведь будет разный т.к. структура игрока меняется после перезагрузки, поправьте если я не прав

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 минут назад, Karabatus сказал:

поправьте если я не прав

ты не прав, было предложено использовать кейв возле инструкции, а не структуры и записать туда адрес структуры. 

 

Посмотрел твои старые посты, впечатление произвели не оч. хорошее.

Цитата

Задача выцепить из памяти игры нужные мне базовые адреса, а потом уже выдать эти адреса кодеру, с помощью которых он будет писать бота. Основной вопрос, почему не находит адрес на 3 уровне через поиск ручками(

 

Изменено пользователем youneuoy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, youneuoy сказал:

ты не прав, было предложено использовать кейв возле инструкции, а не структуры и записать туда адрес структуры. 

да, тут была проблема в том, что я не понял фразу "на границе секций модуля", а переспросить постеснялся. Но по факту я хотел попробовать взять адрес вне границ структур, но начал воевать с Lua

6 минут назад, youneuoy сказал:

Посмотрел твои старые посты, впечатление произвели не оч. хорошее.

 

да это вроде посты, когда я пытался с разбегу залезть в память, год или два назад. В тот момент я решил работать с изображением. Теперь вот пробую работать с памятью. 90% своих адресов я все же нашел вручную, на 2 своих проекта) Вот из-за немногих адресов решил поизучать ассемблер

Изменено пользователем Karabatus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Karabatus сказал:

а переспросить постеснялся

зато глупости писать не постеснялся😜

 

1 минуту назад, Karabatus сказал:

Но по факту я хотел попробовать взять адрес вне границ структур, но начал воевать с Lua

ничегошеньки не понял. Как и писал выше - лучше сначала пересмотри все ролики, потом попробуй сделать что хотел самостоятельно, а после уже пости вопросы/решения и т.п.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.