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

Discussion in 'WASM.BEGINNERS' started by FairPerson, Mar 11, 2007.

Thread Status:
Not open for further replies.
  1. FairPerson

    FairPerson New Member

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

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

    twgt New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2007
    Messages:
    1,494
    ReadProcessMemory
     
  3. FairPerson

    FairPerson New Member

    Blog Posts:
    0
    Joined:
    Sep 24, 2006
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    Нет. Первый параметр - хэндл процесса. Используй PID в OpenProcess - и получишь хендл. Второй параметр - адрес в том процессе, из которого читаешь. Последний параметр - не уверен, что можно игнорировать. Почитай примечания к ф-ии.
     
  5. Cr4sh

    Cr4sh New Member

    Blog Posts:
    0
    Joined:
    Apr 17, 2006
    Messages:
    668
    >> Последний параметр - не уверен, что можно игнорировать
    можно
     
  6. twgt

    twgt New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2007
    Messages:
    1,494
    lpNumberOfBytesRead Можно игнорировать-это адресс переменной куда запишится количество считанных байт.
     
  7. FairPerson

    FairPerson New Member

    Blog Posts:
    0
    Joined:
    Sep 24, 2006
    Messages:
    22
    Я снял дамп с процесса. Нужное мне значение по адресу 0024067С, его и передавать вторым параметром?
     
  8. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    [deleted]
     
  9. MSoft

    MSoft New Member

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

    twgt New Member

    Blog Posts:
    0
    Joined:
    Jan 15, 2007
    Messages:
    1,494
    Легче всего взять дебаггер и посмотреть адресс нужных данных
     
  11. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    А заодно и сами данные - и никаких ReadProcessMemory'ев :)

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

    FairPerson New Member

    Blog Posts:
    0
    Joined:
    Sep 24, 2006
    Messages:
    22
    АЙАЙАЙ, ничего не понимаю. Так что же передать вторым параметром?

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

    MSoft New Member

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

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

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

    nitrotoluol New Member

    Blog Posts:
    0
    Joined:
    Sep 5, 2006
    Messages:
    848
    Так, мужики, хватит людей пугать.

    OpenProcess
    VirtualProtectEx
     
  15. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    Хек, при чем тут VirtualProtectEx. Это только в дополнение к ReadProcessMemory да и то, скорее всего, хотя бы доступ на чтение на страницу есть.
     
  16. Freeman

    Freeman New Member

    Blog Posts:
    0
    Joined:
    Feb 10, 2005
    Messages:
    1,385
    Location:
    Ukraine
    файл не обязательно загружаецо с 0х400000, хотя в большинстве случаев это действительно так. зависит от imagebase, который можно посмотреть в заголовке.
     
  17. FairPerson

    FairPerson New Member

    Blog Posts:
    0
    Joined:
    Sep 24, 2006
    Messages:
    22
    Все правильно, действительно надо было передавать 64067Сh. код работает.
    Всем спасибо!

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

    steelfactor New Member

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

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    steelfactor
    Не в тему, создавай новую.
     
Thread Status:
Not open for further replies.