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

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


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

Добрый вечер! Я пытаюсь сделать свой первый скрипт по видео-урокам "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
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Присоединяйтесь к обсуждению

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

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

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

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

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

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

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

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

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

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