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

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

Восстановить пароль Регистрация
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
31.05.2012, 17:54     статья Рихтера #1
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 17:54     статья Рихтера
Посмотрите здесь:

Учебная статья Assembler
статья о создании и использовании DLL C++
Java Статья о Томкат
Научная статья
C++ WinAPI Ошибка в примере из книги Рихтера
Перехват TerminateProcess по примеру Рихтера. Не работает C++ WinAPI
Большая ли разница для новичка в книгах Рихтера (CLR via c#).Net 2.0 и 4.5? C#
Статья

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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