Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,674
Записей в блоге: 12
1

статья Рихтера

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

http://wm-help.net/books-online/print-page/59464/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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 17:54
Ответы с готовыми решениями:

Вывод характеристики землетрясения по шкале Рихтера
Напишите программу для вывода характеристики землетрясения по шкале Рихтера,...

Читать ли Рихтера "Создание эффективных win32 приложений"?
Решил почитать Рихтера - вроде все хорошо отзываются. Но книга 2008 года (может...

На сколько правдива статья о С++ на луркморе?
сабж ясен из заголовка

Статья о создании и использовании DLL
Ребят плз подкиньте доку о создании DLL на VC++. и если кто знает линк,...

Статья на rsdn, перехват API-функций
Разбираю статью на рсдн, а именно Метод 1. Перехват API непосредственной...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 17:54

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран...

Насколько актуальна книга Рихтера
Есть книга CLR via C#. Программирование на платформе Microsoft.NET Framework...

Ошибка в примере из книги Рихтера
Пытаясь просмотреть пример из книги Рихтера windows для профессионалом,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru