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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2013, 23:08   #31
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
Радость

В том, что нужно использовать не то, что видишь.
Указатель не меняется. Меняется адрес куда он указывает.
Берите адрес, тот что исчезает(после перезапуска программы), находите новое число, и вы найдете тот же исчезнувший адрес, но уже со значением.
Ставите бряк на доступ. Получаете асм инструкции которые пишут данные в адрес.
к примеру у меня это:
Цитата:
005A866B - 89 43 04 - mov [ebx+04],eax
из
Код:
005A8661 - B8 01000000 - mov eax,00000001
005A8666 - E8 F9FAE8FF - call DMA.exe+38164
005A866B - 89 43 04  - mov [ebx+04],eax
005A866E - 66 83 7B 0A 00 - cmp word ptr [ebx+0A],00
005A8673 - 74 08 - je DMA.exe+1A867D

EAX=000003E4
EBX=01509FE8
ECX=14C47376
EDX=000003E3
ESI=0052C1AC
EDI=0012F70C
ESP=0012F544
EBP=0012F560
EIP=005A866E
Указатель ebx+04(01509FE8) содержит наше число 613 по адресу 015F9FEC.

Адрес 015F9FEC начинает, каждый раз, свою жизнь заново, когда процесс DMA.exe, стартует по-новой, и необходимо снова повторить поиск значения.
А вот указатель 01509FE8 никуда не исчезает! В него-то и надо писать!

Потому во второй программе я пишу это:
Код:
const
  {
  mov [ebx+04], eax

  ebx = 01509FE8
  }
  cAddr = $01509FE8;
  cOffset = $04;
  cBaseAddr = cAddr + cOffset;

procedure TForm4.Button1Click(Sender: TObject);
var
  hW: HWND;
  hProc, hWProcID: THandle;
  iVal1: Integer;
  Dummy: NativeUInt;
begin
  hW := FindWindow(nil, PChar('DMA Example #1'));
  if hW <> INVALID_HANDLE_VALUE then
  begin
    GetWindowThreadProcessId(hW, @hWProcID);
    if hWProcID <> INVALID_HANDLE_VALUE then
    begin
      hProc := OpenProcess(PROCESS_VM_READ or PROCESS_VM_OPERATION or
        PROCESS_VM_WRITE, False, hWProcID);
      try
        if hProc <> INVALID_HANDLE_VALUE then
        begin
          if ReadProcessMemory(hProc, Ptr(cBaseAddr), @iVal1, SizeOf(Integer),
            Dummy) then
          begin
            ShowMessage('Прочитали: ' + IntToStr(Dummy) + ' Байта' + #10 +
              'Число в памяти: ' + IntToStr(iVal1));
            iVal1 := 1001;
            if WriteProcessMemory(hProc, Ptr(cBaseAddr), @iVal1,
              SizeOf(Integer), Dummy) then
            begin
              ShowMessage('Записали: ' + IntToStr(Dummy) + ' Байта' + #10 +
                'Число: ' + IntToStr(iVal1));
            end;
          end;
        end;
      finally
        CloseHandle(hProc);
      end;
    end;
  end;
end;

end.
И все работает.

Пример прилагаю.

Мне самому не достает понимания работы процесса и оперативной памяти. Пойду поищу чего-нибудь.
Вложения
Тип файла: rar GameTrainer.rar (1.40 Мб, 16 просмотров)

Последний раз редактировалось Человек_Борща; 17.02.2013 в 23:13.
Человек_Борща вне форума Ответить с цитированием
Старый 18.02.2013, 08:30   #32
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Вот СПАСИБО!!!!!!
То что нужно!
Посмотрю когда дома буду.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 18.02.2013, 21:04   #33
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Сижу, экспериментирую. У меня почему-то с вышим DMA.exe получилось
mov dword ptr ds:[ebx+4], eax
Это та я понял, но получился адрес указателя в регистре EBX не 01509FE8, а 00C09FE8. Так и должно быть???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 18.02.2013, 21:27   #34
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

А перекомпиляцию не делали?
Человек_Борща вне форума Ответить с цитированием
Старый 18.02.2013, 22:01   #35
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Нет не делал. Только что скачал архив заново и перепроверил. Правдо может это я где нибудь лохонулся. Я вычислял адрес переменой при помощи ArtMoney. Затем олли смотрел процесс, искал в памяти этот адрес переменной (от ArtMoney), нахадил, и савил брейкпоинт на запись, затем изменял значение и собственно олли мне говорило строку и содержание регистра EBX.
Вам не трудно перепроверить???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 18.02.2013, 22:07   #36
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Цитата:
005A866B - 89 43 04
У нас с вами полностью сошлось

Цитата:
Указатель не меняется.
Я дальше листаю по коду, и EBX меняется!
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-

Последний раз редактировалось vovken1997; 18.02.2013 в 22:11.
vovken1997 вне форума Ответить с цитированием
Старый 18.02.2013, 22:26   #37
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Адрес указателя не меняется.
а место куда он указывает - меняется.

Мне самому это не до конца понятно. Но это так.
Человек_Борща вне форума Ответить с цитированием
Старый 18.02.2013, 22:52   #38
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Так вы перепроверили наши разногласи с адресами???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 18.02.2013, 22:56   #39
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Цитата:
Я дальше листаю по коду, и EBX меняется!
Ну это я ещё понимаю, просто регистров мало, и адрес записывается только тогда, когда это надо. Но вот почему не меняющиесе указатели у нас с вами изменились, это я вообще не понимаю. Как вы узнали этот адрес???
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 18.02.2013, 22:59   #40
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Но вот почему не меняющиесе указатели у нас с вами изменились, это я вообще не понимаю.
значения регистра зависят от места, откуда идет вызов. Там 4 инструкции асма вызываются. Я взял 1 из них.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для public переменной класса присвоить адрес ячеек из внешней переменной _KUL Qt и кроссплатформенное программирование С/С++ 2 28.05.2012 12:04
Адрес переменной _-Re@l-_ Паскаль, Turbo Pascal, PascalABC.NET 16 30.12.2010 12:02
Адрес переменной _-Re@l-_ Общие вопросы .NET 3 25.12.2010 16:58
Адрес переменной kostyan777 Общие вопросы C/C++ 4 11.07.2010 22:16
Адрес переменной Pedro Общие вопросы Delphi 11 16.12.2008 13:03