Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2009, 23:40   #61
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Потому что методом научного тыка тут нифига не сделать. По порядку:

GetModuleBase(ProcessId, 'Game.dll') возвращает базовый адрес загрузки Game.dll в процессе ProcessId - место в памяти, где лежит первый байт библиотеки, т.е. то самое "Game.dll+". Это значение может быть при каждом запуске разное.

Если в библиотеке есть статическая переменная - её значение будет лежать в памяти по адресу game.dll+X, где X - константа.

Если переменная динамическая - Х хранит адрес указателя. В этом случае сначала находят этот адрес (var pi: PInteger), затем читают значение на которое он показывает (integer_value = pi^, и это значение, кстати, тоже может быть указателем и т.д.)

Код:
Pointer1Addr := GetModuleBase(ProcessId, 'Game.dll')+$62EB7;
Pointer2Addr := dword(ptr(Pointer1Addr)^)+$1C4;
value := dword(ptr(Pointer2Addr)^)+$34;
Только вот в режиме телепатии я не могу определить что такое $1C4, $34 - это адрес следующего указателя или смещение поля в какой-то структуре или вообще константа
Кароче вот надо что.
Game.dll+$4F5874 всегда одна и таже, но в неё же хранится разная информация, и чтобы её получить нужно сделать смещение как я понял.
Например чтобы получить жизни нужно сделать смещение 0х034, чтобы получить имя нужно сместить 0х036.
Если сместить он выдаст значение. В проге чит енгин он выдает, в делфи непоняли как сделать.

Цитата:
address := GetModuleBase(ProcessId, 'Game.dll')+$4F5874;
address2 := dword(ptr(address)^)+$034;
Безрезультатно, еррор при компиляции
address,2 : dword;
Вот жизни и имя
Кликнув на P->????? он выдает то что на сером фоне.


а вот еррор компиляции
Niklan вне форума Ответить с цитированием
Старый 22.11.2009, 12:05   #62
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

В чем проблема еррора? Как ему может не хватать прав?
Если убрать address2 := dword(ptr(address)^)+$034; то работает без еррора но значение не то.
Права в h стоят на PROCESS_ALL_ACESS
Niklan вне форума Ответить с цитированием
Старый 22.11.2009, 15:58   #63
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

как побывали

Код:
procedure tform2.name;
  begin
    HandleWindow :=FindWindow(nil, 'name');
      if(HandleWindow  <> 0) then
    GetWindowThreadProcessId(HandleWindow  ,@ProcessId);
    address := GetModuleBase(ProcessId, 'Game.dll')+$4F5874;

    h := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
    if(h <> 0) then
    begin

    if(ReadProcessMemory(h, Pointer(address), @buf, sizeof(DWORD), outbytes) and (outbytes = sizeof(DWORD))) then
        begin
            address2 := dword(Pointer(address)^)+$1C4;
            if(ReadProcessMemory(h, Pointer(address2), @buf, sizeof(DWORD), outbytes) and (outbytes = sizeof(DWORD))) then
        begin
            address3 := dword(Pointer(address)^)+$34;
            if(ReadProcessMemory(h, Pointer(address3), @buf, sizeof(DWORD), outbytes) and (outbytes = sizeof(DWORD))) then
        begin
               Label64.Caption:=IntTostr(buf);
          end;

          end;
       
        end;
      CloseHandle(h);
    end;
end;
Код:
procedure tform2.name;
  begin
    HandleWindow :=FindWindow(nil, 'name');
      if(HandleWindow  <> 0) then
    GetWindowThreadProcessId(HandleWindow  ,@ProcessId);
    address := GetModuleBase(ProcessId, 'Game.dll')+$4F5874;
    address2 := dword(ptr(address)^)+$1C4;
    address3 := dword(ptr(address2)^)+$34;
    h := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
    if(h <> 0) then
    begin
        // buf: DWORD;

        if(ReadProcessMemory(h, Pointer(address3), @buf, sizeof(DWORD), outbytes) and (outbytes = sizeof(DWORD))) then
        begin
          Label64.Caption:=IntTostr(buf);
        end;
      CloseHandle(h);
    end;
end;
везде один и тот же еррор при компиляции
Niklan вне форума Ответить с цитированием
Старый 23.11.2009, 21:40   #64
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

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

Последний раз редактировалось Niklan; 23.11.2009 в 21:47.
Niklan вне форума Ответить с цитированием
Старый 23.11.2009, 21:54   #65
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Niklan Посмотреть сообщение
Проблема все еще актуальна...
Интересно бы узнать что означает ^
(ptr(address2)^)....
ведь без него компилируется.... но значение не то, зато найдена проблема
по моему ^ это возведение в степень так обозначают
Думаю после этого поста, Вам врятли кто поможет. Почему может спросите Вы ? Я вам отвечу, Вы незнаите азов Delphi (да видимо и других языков), а уже беретесь за столь я бы сказал не легкую задачу. Может логичней будет, не "терраризировать" форумчан, с просьбами выполнить вашу задачу, а попытатся, самому либо поискать в сети синтаксис, а лучше для начала книжечку купить по Delphi, потом когда выучитесь, даже азы, потом можно будет с Вами по нормальному обсудить вашу задачу и решить проблемы. Щас Вам говорят что и как лучше всего сделать, Вы же стоите на своем, и как было сказано раньше, "методом тыка" пытаитесь решить эту задачу, врятли из этого что-то выйдет. Не хотите учится ? Ну тогда думаю тема и вопросы исчерпали себя. Хотя есть решение, идите во Фриланс, там Вас делают, но разумеется не за "просто так".
BOBAH13 вне форума Ответить с цитированием
Старый 25.11.2009, 11:13   #66
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Все сделали по вашим советам. Почитали и т.д.
Вчера 3 часа сидел с программистом у которого уже есть высшее образование. Перепробывали более 100 вариаций наверное.
То выводит ненужное, в миллиардах, то вообще ничего не выводит, то еррор.
Ладно, пошли на фриланс, нам сказали сделать так и так. Но всеравно он ничего не выводит. Хотя мы так тоже пробывали.
Уже если и на фрилансе не помогли и программист то тут вообще ерь получается.

Посоветуйте литературу что ли уж, где можно подробнее о работе с памятью прочитать. Конкретно о её чтение. А то о подмене дополна, и очень много ненужных действий которые сбивают с толку.
Niklan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
внедрение MatLab в Web-приложения Honey JavaScript, Ajax 2 27.05.2009 20:52
Внедрение кода в EXE prizrak1390 Общие вопросы Delphi 16 07.05.2008 08:10
Внедрение звука WAW/MP3 в файл GAGARIN-NEW Мультимедиа в Delphi 26 02.04.2008 13:52
Внедрение ActiveX компонент в проект D@rk M@k Общие вопросы Delphi 5 29.01.2008 19:40
внедрение Delphi приложения в КПК shkiper Общие вопросы Delphi 2 05.04.2007 20:59