imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 17.06.2005, 23:15     # 1
Crow2k
Newbie
 
Регистрация: 07.05.2005
Сообщения: 32

Crow2k Нуль без палочки
Чтение/запись в памяти приложения на Delphi

Выручайте неопытного. Задача: написать программу с целью изменения данных в адресе памяти другого приложения или попросту редактора памяти.
Допустим, нужное значение находится по адресу $001695A0, программа должна преобразовать его в текст и вывести.
Всем кто откликнется, буду благодарен.
Crow2k вне форума  
Старый 18.06.2005, 03:15     # 2
knight
Junior Member
 
Регистрация: 12.09.2004
Сообщения: 106

knight Известность не заставит себя ждатьknight Известность не заставит себя ждать
Предлагаю решение :внедрить DLL в чужое адресное пространство пример на эту тему можно посмотреть у Джеффри Рихтера "Программирование под Windows для профессионалов"
или вот по этому адресу есть статья с примерами

http://codeproject.com/threads/winspy.asp
knight вне форума  
Старый 23.06.2005, 14:57     # 3
J. Bond
Guest
 
Сообщения: n/a

Если охота сделать без DLL. То можно использовать функции ReadProcessMemory/WriteProcessMemory
 
Старый 23.06.2005, 16:14     # 4
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Вот абсолютно рабочая функция получающая текст активного таба в чужом процессе . Правда на С++, но механизм , я думаю понятен.
Код:
//---------------------------------------------------------------------------------
//                 GetActiveTabText
//---------------------------------------------------------------------------------
// This function return the text(caption) of active page
// in the tabcontrol window, that it get.
//---------------------------------------------------------------------------------
typedef LPVOID (__stdcall * PFNVIRTALLEX)(HANDLE, LPVOID, DWORD, DWORD,DWORD);

 CString GetActiveTabText(HWND hWnd)
{
    DWORD dwProcessId;
    HANDLE hProcess;
    PFNVIRTALLEX pfnVirtualAllocEx;
    TC_ITEM *ptci;
    TC_ITEM tci;
    CString Text;
    int TabSelected;
    char Buffer[255] = "\n";
    TabSelected = TabCtrl_GetCurSel(hWnd);
    GetWindowThreadProcessId(hWnd, &dwProcessId);
    hProcess = OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, dwProcessId);
    if (hProcess == NULL)
    {
        MessageBox(NULL,"Could not communicate with process","", MB_OK | MB_ICONWARNING);  
        return "";//0;
    }
/// Allocate memory in the remote process's address space
//get procAddress this way so the code can be compiled on win 95/98
    pfnVirtualAllocEx = (PFNVIRTALLEX) GetProcAddress(GetModuleHandle("KERNEL32.DLL"),"VirtualAllocEx");

    ptci = (TC_ITEM*) pfnVirtualAllocEx(hProcess, NULL, sizeof(TC_ITEM)+25, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    tci.mask = TCIF_TEXT;
    tci.pszText = (LPTSTR) (ptci + 1) ;
    tci.cchTextMax = 25;
// Write the local TC_ITEM structure to the remote memory block
    WriteProcessMemory(hProcess, ptci, &tci, sizeof(tci), NULL);
    TabCtrl_GetItem(hWnd,TabSelected ,ptci);
// Read the remote text string into the end of our clipboard buffer
    ReadProcessMemory(hProcess, ptci + 1,Buffer, 24, NULL);
// Free the memory in the remote process's address space
    VirtualFreeEx(hProcess, ptci, 0, MEM_RELEASE);
    CloseHandle(hProcess);
    Text = Buffer;
    return Text;
}
// -----------------------------------------------------
__________________
Best Regards
alexey_ma вне форума  
Старый 23.06.2005, 16:17     # 5
Crow2k
Newbie
 
Регистрация: 07.05.2005
Сообщения: 32

Crow2k Нуль без палочки
Цитата:
Сообщение от J. Bond
Если охота сделать без DLL. То можно использовать функции ReadProcessMemory/WriteProcessMemory
Ясно, а как же его внедрить?
Crow2k вне форума  
Старый 23.06.2005, 17:34     # 6
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Так написал же уже.
Порядок такой :
Сначала нужно получить хендл процесса. Eсли известен хендл какого либо окна этого процесса то функция GetWindowThreadProcessId вернёт processID . Открываем по этому ID процесс и получаем хендл процесса - hProcess.
hProcess = OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, ProcessId)

И читаем по адресу
ReadProcessMemory(hProcess,адрес с которого читаем ,буфер куда читаем, сколько нужно прочитать байт, количество прочитанных байт);

Пишем аналогично (только осторожно чтобы не
завалить апликацию)
WriteProcessMemory(hProcess, адресс по которому пишем, адрес того что пишем, сколько байт хотим записать,сколько на самом деле записали)

Все функции - WindowsAPI, так-что в делфи проблем быть не должно
__________________
Best Regards
alexey_ma вне форума  
Старый 27.06.2005, 19:42     # 7
chesnok
Member
 
Аватар для chesnok
 
Регистрация: 01.01.2004
Адрес: Воронеж, Россия
Сообщения: 206

chesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форумеchesnok Популярный человек на этом форуме
alexey_ma
Только нужно добавить, что если мы пишем в чужой процесс, неплохо было бы перед этим сделать VirtualAllocEx в нём, дабы не завалить его.
rtfm
__________________
<SPEEDing|VoNK> you cant use knoppix as a server can you?
<bob> why not? people use windows as one.
chesnok вне форума  
Старый 27.06.2005, 20:23     # 8
alexey_ma
Member
 
Регистрация: 10.03.2002
Адрес: Israel
Сообщения: 245

alexey_ma Нимб уже пробиваетсяalexey_ma Нимб уже пробивается
Не, судя по вопросу, он хочет изменить данные по определенному адресу, в этом случае аллокацию делать не нужно, но почти наверняка завалим процесс.
Кстати в коде который я привел выше есть вызов VirtualAllocEx
__________________
Best Regards
alexey_ma вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 12:34.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.