Форум программистов, компьютерный форум 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, 20:47  [ТС]     Внедряемся в память чужого процесса
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я так понимаю, что тебе нужно получить ВСЮ память занятую процессом и сканировать её на наличие совпадений.
Если речь не о поиске вирусов, а о сканировании простых программ, то можно проверять только память, помеченную "на исполнение".
Да какие регионы сканировать мне понятно, вопрос в другом, как запустить сканер в чужой памяти? Сейчас у меня такой код для поиска в чужом процессе из своего:
Код
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
if(DoRtlAdjustPrivilege()){
 
    while (lpMem < si.lpMaximumApplicationAddress) {
 
        VirtualQueryEx(phandle, lpMem, &mbi, sizeof(MEMORY_BASIC_INFORMATION));   // Узнаем о текущем регионе памяти.
    
        if(PAGE_EXECUTE_READWRITE){         // Если он доступен для записи                                              
 
                PBYTE pBuffer = new BYTE[mbi.RegionSize];                                // Буфер под считываемый регион
 
                ReadProcessMemory(phandle, mbi.BaseAddress, pBuffer, mbi.RegionSize, 0); // Считываю весь найденный регион  
                
                int k = 0;
                                for (int  i = 0; i < mbi.RegionSize && k<SIZE; i++) { 
 
                                    if (pBuffer[i] == Prob[k])
                                    {
                                            if ( k == SIZE-1){
                                                cerr << "Маска найдена " <<endl; 
                                                MyAddress = (LPVOID)((DWORD)mbi.BaseAddress + (DWORD)i-SIZE+1);
                                                cerr << "Найденный адрес = " << hex << MyAddress << endl;
                                                k = 0;      j++;        
 
                                                break;
                                            }
                                             k++; //i++;
                                    }
 
                                    else {  k = 0; //i++;
                                    }
                                }
                                if (j > 0){ break;  }
            free(pBuffer); 
            //  } 
        lpMem = (LPVOID)((DWORD)mbi.BaseAddress + (DWORD)mbi.RegionSize);
        }
    }
}

Теперь хочу организовать тоже самое только изнутри чужого процесса. Для этого имеется такая функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 0;
}
 
MyAddress = dwFindPattern(start, dwLen, (BYTE*)"\x89\xBE\x0A\x02\x00\x00\xE9\x87\x00\x00\x00\x83\xE8\x00\x74\x12", "xxxxxxxxxxxxxxxx"); //ищем адрес по маске
Это я так страдал тут, пока не понял, что сканирую сам себя. Как теперь это использовать для поиска в чужом процессе изнутри?
 
Текущее время: 13:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru