ReadProcessMemory

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by SuperTroll, 7 May 2011.

  1. SuperTroll

    SuperTroll Member

    Joined:
    19 Jul 2010
    Messages:
    36
    Likes Received:
    14
    Reputations:
    4
    ReadProcessMemory как реализовать на Delphi 7? Перерыл кучу сайтов, но на всех копипаст который или не работает или выдаёт какуюта херню. Дайте исходник у кого есть.
     
  2. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    #2 yuran666666, 7 May 2011
    Last edited: 7 May 2011
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Открываешь MSDN и смотришь параметры ReadProcessMemory
    а вообще для успешной работы, надо открыть процесс с соответствующими правами,
    А чтобы открыть процесс с соответствующими правами нужны часто привилегии отладчика.
     
  4. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Один из алгоритмов таков:
    1. FindWindow() - находим хендл окна.
    2. GetWindowThreadProcessId() - находим PID (ID процесса), передав хендл окна из п.1.
    3. OpenProcess() - открываем процесс, передав PID из п.2.
    4. ReadProcessMemory()

    Когда-то писал тренер для игры. Там используется WriteProcessMemory, но заменить на Read не составит труда:
    Code:
    ......
    
    var
      wBuff: byte;
      wHandle: integer;
      tHandle, ProcessID, pHandle, temp: cardinal;
    
    ......
    
    wHandle := FindWindow(nil, 'Заголовок окна');
    if wHandle <> 0 then
    begin
      tHandle := GetWindowThreadProcessId(wHandle, @ProcessID);
      pHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
      WriteProcessMemory(pHandle, ptr($0043231F), @wBuff, 1, temp);
      MessageBox(Form1.Handle, 'Ок', 'Ок', 0);
      CloseHandle(pHandle);
    end
    else
    begin
      MessageBox(Form1.Handle, 'Ошибка', 'Ошибка, 0);
    end;
     
    1 person likes this.
  5. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    2 Sams если в функцию MessageBox 3 параметром передать NULL , то слово ошибка будет по умолчанию... а так ты потратил аж лишних 10 байт
     
    _________________________
    1 person likes this.
  6. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Перебор.
    Ну а если в пользователя винда на английском языке?
     
  7. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Gar|k, как я мог столь не рационально использовать такой не мало важный ресурс - как память! 10 байт в ООП, где Делфи по умолчанию запихивает около 300+ кб ненужного кода - это существенное замечание. Всё, пожалуй на этом моя карьера окончена. Пойду писать mov eax,0 вместо xor eax,eax.
    Печальная судьба :( А ведь у меня когда-то могло быть светлое будущее! Мои детские мечты разрушены. Mad world.
     
    #7 Sams, 8 May 2011
    Last edited: 8 May 2011
    1 person likes this.
  8. SuperTroll

    SuperTroll Member

    Joined:
    19 Jul 2010
    Messages:
    36
    Likes Received:
    14
    Reputations:
    4
    ReadProcessMemory Delphi 7

    Дайте пожалуйста исходник для реализации ReadProcessMemory на Delphi 7 на примере вот этой программы http://zalil.ru/31001131
    P.S. Нужно получить число и записать его в Edit или Label.
    Google не помог
     
  9. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Честно, в твоем примере написать такую прогу - пол беды. Нужно еще найти адрес, по которому хранится число в 1.exe. И не факт, что он не динамический. Так что помогу тебе написать, но только если дашь адрес. Ковыряйся в отладчике сам.
     
  10. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    2 Sams, да не это не замечание, просто к слову. ХЗ, в общем в глаз ударило это :)
    я в крайнем написал бы так
    Code:
    char *text="ошибка";
    MessageBoxA(NULL, text, text, MB_OK);
    
    В общем я за рациональный обдуманный код, пусть там делфи пхает 300+, главное что бы в голове была идея, как сделать лучше.
    В ООП это выражается хорошей архитектурой.
     
    _________________________
  11. SuperTroll

    SuperTroll Member

    Joined:
    19 Jul 2010
    Messages:
    36
    Likes Received:
    14
    Reputations:
    4
    Адрис находится при помощи программа Artmoney и Cheat Engeine
    P.S Он денамический, но мне нужен сам способ реализации на Delphi 7
     
  12. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Оно запихивает это при GUI проектах. На консоли или же на "ручном" создании гуев ты можешь их избежать.

    А вообще, это реальная проблема дельфи - размер при подключении модулей увеличивается только потому, что там там объявлены глобальные переменные. Если хотя бы юзать статик члены класса, или был бы более умный компоновщик то таких проблем не было бы.
     
  13. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 GhostOnline в делфи проблема - VCL
    1) VCL основана на классах, и по этому при использовании хотябы одной функции класс, ты автоматически будешь тащить все фунции данного класса.
    2) VCL форму создаёт динамически, на основе данных в ресурсах. А там ты можешь подправить любую форму (убрать или добавить элементы (если конечно ранее юзался элемент)) и изменить любой параметр для компонента на форме, по этой причине и происходит тот факт что VCL таскает всё с собой, даже если ты это не используешь.
    3) код инициализации программы - тоже весит. Хоть и не много но всё же весит, а всё потому что в него встроена работа со строками, а работа по строками (в делфи) предполагает использование собственного (дельфового) менеджера памяти и всех других промежуточных функций для обработки строк. + там же ГСЧ, параметыр командной строки, функции ввода-выхода и прочей хрени (по факту упращенное подобие сишного CRT), но в отличии от Си (где CRT можно отрубить) в делфи придется хорошо пошаманить чтобы выкинуть этот код (в частности рекомпил нескольких файлов + линковска сторонним компилятором и прочая хрень)