Чтение данных из памяти

Тема в разделе "WASM.BEGINNERS", создана пользователем FairPerson, 11 мар 2007.

Статус темы:
Закрыта.
  1. FairPerson

    FairPerson New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2006
    Сообщения:
    22
    Есть некая программа. Как мне прочитать строку из памяти по определенному фиксированному смещению в этой программе. Пожалуйста наставьте на путь истинный, никаких идей нет. Если такая тема была хоть ссылку дайте.

    PS поиском пользовался, но он как-то вяло отреагировал на мою формулировку, все не то :dntknw:
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    ReadProcessMemory
     
  3. FairPerson

    FairPerson New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2006
    Сообщения:
    22
    HANDLE hProcess, // handle of the process whose memory is read - PID
    LPCVOID lpBaseAddress, // address to start reading - это мое смещение
    LPVOID lpBuffer, // address of buffer to place read data - буфер для приема
    DWORD nSize, // number of bytes to read - количество байт для копирования
    LPDWORD lpNumberOfBytesRead // address of number of bytes read - можно проигнорировать

    Я все правильно понял?
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Нет. Первый параметр - хэндл процесса. Используй PID в OpenProcess - и получишь хендл. Второй параметр - адрес в том процессе, из которого читаешь. Последний параметр - не уверен, что можно игнорировать. Почитай примечания к ф-ии.
     
  5. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    >> Последний параметр - не уверен, что можно игнорировать
    можно
     
  6. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    lpNumberOfBytesRead Можно игнорировать-это адресс переменной куда запишится количество считанных байт.
     
  7. FairPerson

    FairPerson New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2006
    Сообщения:
    22
    Я снял дамп с процесса. Нужное мне значение по адресу 0024067С, его и передавать вторым параметром?
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    [deleted]
     
  9. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    НЕТ! Твой процесс начинается тока с 400 000h :) Наверное тебе надо прибавить базу образа. Если это exe, то 400 000h - стандартно. Народ, я ж правильно говорю? :) А вообще есть программы типа LordPE, которые помогают перевести OFFSET, RVA и VA друг в друга. Тебе нужен VA
     
  10. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Легче всего взять дебаггер и посмотреть адресс нужных данных
     
  11. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    А заодно и сами данные - и никаких ReadProcessMemory'ев :)

    P.S.: Классный у тебя девиз (ну или подпись) - чего тока не прочитаешь на этом форуме ;) Надо бы и себе чего-нибудь придумать
     
  12. FairPerson

    FairPerson New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2006
    Сообщения:
    22
    АЙАЙАЙ, ничего не понимаю. Так что же передать вторым параметром?

    Я так понял это указатель, но на что?
     
  13. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Второй параметр - это указатель на память в другом процессе, откуда ты начинаешь читать эту самую память. Так вот, 0024067С - это видимо смещение относительно базы образа!!! Т.е. относительно начала файла в памяти. В процессе твои данные будут находится по адресу (400000h + 0024067Сh), т.к. твой файл в памяти будет начинаться именно с адреса 400000h. Т.е. в качестве переметра передай 64067Сh.

    Просто понимаешь, может быть такая загвоздка: если ты просто тупо сдампил кусок памяти, то твое 0024067С - это RVA. Если ты сдампил все по правилам (т.е. все секции и т.д.), то 0024067С - это может быть OFFSET. А тебе нужен VA.

    Короче, попробуй ввести 64067Сh. Если не поможет, будем думать над ньюансами.
     
  14. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Так, мужики, хватит людей пугать.

    OpenProcess
    VirtualProtectEx
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Хек, при чем тут VirtualProtectEx. Это только в дополнение к ReadProcessMemory да и то, скорее всего, хотя бы доступ на чтение на страницу есть.
     
  16. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    файл не обязательно загружаецо с 0х400000, хотя в большинстве случаев это действительно так. зависит от imagebase, который можно посмотреть в заголовке.
     
  17. FairPerson

    FairPerson New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2006
    Сообщения:
    22
    Все правильно, действительно надо было передавать 64067Сh. код работает.
    Всем спасибо!

    Творческих успехов! ;)
     
  18. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    В продолжение темы....
    Каким образом можно считать данные с файла, промэппированного в память?
    Я пытался выделить память alloc'om и скопировать в буфер нужную часть файла (секцию .text) для дальнейшей работы, но чёт не работает... В буфер пишется мусор
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    steelfactor
    Не в тему, создавай новую.
     
Статус темы:
Закрыта.