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

статья Рихтера - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу, моделирующую игру «крестики-нолики» http://www.cyberforum.ru/cpp-beginners/thread592591.html
Для указания позиции крестика или нолика играющего использовать номер строки и номер столбца, в который игрок хочет поставить символ. Не знаю как исправить. #include <stdio.h> #include <stdlib.h> char matrix; char check(); voidinit_matrix(); voidget_first_player_move();
C++ Чтение данных из файла Народ помогите что здесь неправильно,надо прочитать текст из файла и вывести на экран буквы,встречающиеся в тексте по одному разу в алфавитном порядке #include <stdio.h> #include <string.h> main() { FILE *fp; int c,s,i,j,k,a=0,n=1000; char A; fp = fopen ( "text.txt", "r" ); http://www.cyberforum.ru/cpp-beginners/thread592580.html
C++ Дана матрица. Построить вектор!
Дана матрица А(nxn). Построить вектор, каждый элемент которого равен количеству равных элементов в соответствующей строке матрицы А. Воспользоваться функцией, которая определяет это количество в i-ой строке матрицы А. Это условие задачи. Вот моя программа, подскажите где я ошибся пожалуйста #include <iostream> using namespace std; int main () {
Написать функцию, формирующую одномерный массив C++
Написать функцию, формирующую одномерный массив, состоящий из средних арифметических элементов каждой строки прямоугольной матрицы А.
C++ Координаты нахождения массива A в массиве B http://www.cyberforum.ru/cpp-beginners/thread592534.html
Доброго времени суток) Помогите пожалуйста решить и разобраться в сложной задаче, а то завтра сдавать уже в виде курсовой работы((( Условие: В бинарный файл записаны массивы A(m) и B(n). Структура файла следующая: сначала хранятся m и n, а затем массивы A и B. Утверждается, что массив A(m) целиком (последовательность) встречается в массиве B(n), n>m. Найти место массива A в массиве B или...
C++ Обьединить 2 сортированных списка в один,чередуя элементы первого и второго Обьединить 2 сортированных списка в один,чередуя элементы первого и второго сортированного списка. У меня есть похожее,но как переделать я не знаю.Вот программа,которая обьединяет 2 списка в один,в котором второй стоит перед первым. #include <iostream> #include <cstdlib> #include <ctime> using namespace::std; struct node { double num; //Описание структуры список подробнее

Показать сообщение отдельно
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12

статья Рихтера - C++

31.05.2012, 17:54. Просмотров 473. Ответов 0
Метки (Все метки)

http://wm-help.net/books-online/prin.../59464-16.html
это 22 глава книге Рихтера
раздел Перехват API-вызовов с использованием раздела импорта
в тексте я наткнулся вот на это
PROC pfnOrig = GctProcAddress(GetModuleHandle("Kernel32"), "ExitProcess");
HMODULE hmodCaller = GetModuleHandle("DataBase.exe");

void RoplaceIATEntryInOrioMod(
"Kernel32.dll", // модуль, содержащий ANSI-функцию
pfnOrig, // адрес исходной функции в вызываемой DLL
MyExitProcess, // адрес заменяющей функции
hmodCaller); // описатель модули, из которого надо вызывать новую функци

функция GetModuleHandle возвращает базу dll или exe файла которая ЗАГРУЖЕНА в виртуальное пространство текущего процесса а как быть если процесс чужой ?

Добавлено через 9 минут
прокатит ли такой способ?
процесс А inject
процесс B test
запускается процесс А, грузит длл с функциями перехватчиками в пространство выше двух гигов, потом процесс А мэпирует файл test в память ,изменяет его таблицу импорта на мои функции которые находятся в загруженной dll. есть одно но в таблице импорта находятся адреса смещения от базы или RVA адреса.
МОДЕРАТОРЫ прошу сделать эту тему доступной для asm кодеров

Добавлено через 7 минут
почему этот код не сработал ?
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
71
72
73
74
75
76
77
78
79
80
//---------------------------------------------------------------------------
#include "windows.h"
#include "Imagehlp.h"
#include <iostream>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#define MAXMODULE 50
using namespace std;
typedef HANDLE  (WINAPI*cfunc)(HWND hWnd,
    LPCTSTR lpText,
    LPCTSTR lpCaption,
    UINT uType);
cfunc MyMess;
 
void ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller)
{
 
ULONG ulSize;
 
PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR) ImageDirectoryEntryToData(hmodCaller, TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);
 
if (pImportDesc == NULL)
        return;
 
for (; pImportDesc->Name; pImportDesc++)
{
        PSTR pszModName =  (PSTR)((PBYTE) hmodCaller + pImportDesc->Name);
        if (lstrcmpiA(pszModName, pszCalleeModName) == 0)
                break;
}
 
if (pImportDesc->Name == 0)
        return;
 
PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA) ((PBYTE) hmodCaller + pImportDesc->FirstThunk);
 
 
for (; pThunk->u1.Function; pThunk++)
{
 
        PROC* ppfn = (PROC*) &pThunk->u1.Function;
        BOOL fFound = (*ppfn == pfnCurrent);
        if (fFound)
        {
                WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL );
                return;
        }
 
}
 
 
}
 
int MyMessageBox(
    HWND hWnd,
    LPCTSTR lpText,
    LPCTSTR lpCaption,
    UINT uType
)
{
 MessageBox(0,"123","123",0) ;
 return 0;
}
 
int main(int argc, char* argv[])
{
       int err;
       char mod[MAXMODULE];
       PROC pfnOrig = GetProcAddress(GetModuleHandle("KERNEL32.DLL"), "CloseHandle");
       HMODULE hmodCaller = GetModuleHandle("Test_for_inject_dll.exe");
       cout <<hex <<pfnOrig <<dec <<endl <<hmodCaller <<endl;
       PROC m;
       (void*)m=MyMessageBox;
       ReplaceIATEntryInOneMod("KERNEL32.DLL", pfnOrig,m,hmodCaller);
      // MessageBox(0,"123","123",0) ;
        CloseHandle(0);
        system("Pause");
        return  0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru