Форум программистов, компьютерный форум CyberForum.ru

Внедряемся в память чужого процесса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Номер строк и столбцов всех седловых точек матрицы. http://www.cyberforum.ru/cpp-beginners/thread528423.html
#include <iostream.h> void main(void) { int const n = 3, m = 3; int mas; int i,j; cout << "Vvedite matricy" << endl; for (i = 0; i < n; i++) for (j = 0; j < m; j++)
C++ Заданы три корня кубического уравнения: a, b, c. Написать программу Дано: Заданы три корня кубического уравнения: a, b, c. Задание: Найти коэффициенты данного уравнения. http://www.cyberforum.ru/cpp-beginners/thread528419.html
C++ Найти количество строк матрицы, элементы которых упорядочены по возрастанию
помогите исправить ошибки,я задачу решил только ошибки выходят!Matrix42. Дана матрица размера M . N. Найти количество ее строк, элементы которых упорядочены по возрастанию. #include<iostream.h> #include<math.h> #define m 5 #define n 5 void main() {int a,i,j,s; for(i=0;i<m;i++) for(j=0;j<n;j++) cin>>a;
Найти максимальный элемент главной диагонали матрицы, поменять местами строку/столбец, где он находится C++
С клавиатуры вводится матрица чисел P Найти максимальнный элемент главной диагонали Поменять местами элементы строки и столбца , на пересечение которых находится максимальный элемент.
C++ Как изменить регистр всех символов в String? http://www.cyberforum.ru/cpp-beginners/thread528374.html
Подскажите, пожалуйста - "как привести регистр всех символов, находящихся в string к нижнему регистру?". Нашел функцию string std::strlwr(char *str), но использовать ее не получается. Пытался сделать так: string word="Some text"; word = strlwr(word.data()); - ругается на то, что word.data возвращает const char*, а нужно char*
C++ Логическая игра Учюсь в Германии. В школе на информатике играли против учителя в игру. Он всегда выигрывал. Вот игра и правила: | | | 3 | | | | | 5 | | | | | | | 7 Кто уберёт последнюю палочку(-ки) - выйграл. Можно брать сколько хочешь, но только из одного ряда. Если будет не трудно - напишите программу на с++ ( начинаю изучать ) подробнее

Показать сообщение отдельно
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
26.03.2012, 17:50  [ТС]     Внедряемся в память чужого процесса
Цитата Сообщение от taras atavin Посмотреть сообщение
Подглядывание данных?
Да, пока хотел по подглядывать... Думал что все - разобрался, аннет...

Код с хабра сработал нормально...
Внедрились в калькулятор.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <windows.h>
#include <tlhelp32.h>
#include <winbase.h>
#pragma comment(linker,"/BASE:0x13140000") // сдвигаем базу нашего процесса
 
 
// ------- объявляем функции --------
 
DWORD GetProcessID(char*);
BOOL Inject(HANDLE,DWORD(WINAPI* func)(LPVOID));
DWORD WINAPI func(LPVOID);
 
//-------- главная функция ---------
 
int  main(HINSTANCE,HINSTANCE,LPTSTR,int)
    {
        if(!Inject(OpenProcess(PROCESS_ALL_ACCESS,false,GetProcessID("calc.exe")),&func)){ return false;}
    return true;
 
    }
 
//-------- функция, которая будет выполняться в чужом процессе -------
 
DWORD WINAPI func(LPVOID)
    {
    LoadLibrary((LPCSTR)"kernel32.dll");
    LoadLibrary((LPCSTR)"user32.dll");
    MessageBox(0,(LPCSTR)"Hello from addres area of calc",(LPCSTR)"title",0);
    return true;
    }
 
//-------- поиск процесса ---------
 
DWORD GetProcessID(char* lpNameProcess) // в параметре - имя процесса для внедрения
    {
    HANDLE snap;
    PROCESSENTRY32 pentry32;
    snap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        if(snap==INVALID_HANDLE_VALUE) return 0;
        pentry32.dwSize=sizeof(PROCESSENTRY32);
            if(!Process32First(snap,&pentry32)) {CloseHandle(snap);return 0;}
                do
                {
                    if(!lstrcmpi((LPCSTR)lpNameProcess,&pentry32.szExeFile[0]))
                    {
                    CloseHandle(snap);
                    return pentry32.th32ProcessID;
                    }
                }
        while(Process32Next(snap,&pentry32));
        CloseHandle(snap);
    return 0; 
    }
 
//-------- функция внедрения в чужой процесс -------------------
 
    BOOL Inject(HANDLE hProc,DWORD(WINAPI* func)(LPVOID))
{
    DWORD id;
    DWORD ByteOfWriten;
    HMODULE hModule = GetModuleHandle(NULL);
    DWORD size=((PIMAGE_OPTIONAL_HEADER)((LPVOID)((BYTE*)(hModule)+((PIMAGE_DOS_HEADER)(hModule))->e_lfanew+sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER))))->SizeOfImage;
        char* hNewModule = (char*)VirtualAllocEx(hProc,hModule,size,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
            if(hNewModule==NULL) return false;
            WriteProcessMemory(hProc,hNewModule,hModule,size,&ByteOfWriten);
                if(ByteOfWriten!=size){return false;}
                HANDLE hThread=CreateRemoteThread(hProc,NULL,0,func,(LPVOID)hNewModule,0,&id);
                    if(hThread==0) return false;
return true;
}

Хочу реализовать поиск адреса сигнатуры с выведение его вместо "Hello from addres area of calc"

Попытался совместить этот код с
Тут взять функцию поиска паттерна..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>* 
#include <windows.h>
#include <iomanip>
using namespace std;
 
bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
        for(;*szMask;++szMask,++pData,++bMask)
                if(*szMask=='x' && *pData!=*bMask )
                        return false;
        return (*szMask) == NULL;
}
 
DWORD dwFindPattern(DWORD dwAddress,DWORD dwLen, BYTE *bMask, char * szMask) {
        for(DWORD i=0;i<dwLen;i++)
                if( bDataCompare( (BYTE*)( dwAddress+i ),bMask,szMask) )
                        return (DWORD)(dwAddress+i);
        return (-1);
}
 
int main ()
{ ::setlocale(LC_ALL,"");
   
        DWORD MyAddress = NULL; // Адрес сигнатуры
        
        HWND hWnd = FindWindowA(0,"Timerocketxby");
 
        if (hWnd == 0) {
                cerr << "Запустите Timerocketxby" << endl;
        }else {
                    cerr << "процесс найден" << endl;
                        DWORD pId;
                        GetWindowThreadProcessId(hWnd, &pId);
                        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, pId);
 
                        if (!hProc){
                        cerr << "не могу открыть процесс" << endl;
                        }else{
                                                                        
                                        bool findOffsets();{
                
                                                DWORD start = 0x0151D426; //начало сканирования
                                                DWORD dwLen = 0x0151D626 - start;   //  Длина модуля сканирования
                                                cerr << "Длина модуля = " <<dwLen << endl;
                                                
                                                MyAddress = dwFindPattern(start, dwLen, (BYTE*)"\x89\xBE\x0A\x02\x00\x00\xE9\x87\x00\x00\x00\x83\xE8\x00\x74\x12", "xxxxxxxxxxxxxxxx"); //ищем адрес по маске
                                                cout << "Значение MyAddress = " << MyAddress << endl;
                                                 if (MyAddress == -1){
                                                        clog << "Искомой сигнатуры нет" << endl;
                                                        
                                                }else{
                                                        cerr << "Адрес найден" << endl;
                                                }
 
                                        }
 
                                
                                CloseHandle(hProc);
                        }
                }
                
        system("pause");
 
        return 0;
}

Но как организовать поиск после внедрения в чужой процесс...
В каком виде нужно вписать функцию писка в блок " функция, которая будет выполняться в чужом процессе"

Ушел гуглить и перечитывать Рихтера...
 
Текущее время: 10:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru