Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ WinAPI Как обновить ListView? ка обновить обычный list view? https://www.cyberforum.ru/ win-api/ thread1071392.html C++ WinAPI Простой авторитетный сервер DNS
Здравствуйте, уважаемые форумчане! Понимаю, что, возможно, у всех сейчас дела, но прошу помощи, потому что горит сдача программы:( Сижу уже второй месяц, но никак не могу придумать реализацию. Задача стоит следующая: необходимо написать на С++ авторитетный DNS-server с использованием WinSock, который проверяется стандартным клиентом типа nslookup. Реализация полностью на локальной машине, зона...
C++ WinAPI Можно ли как получать уведомление о изменении области памяти другого процесса? Возникла необходимость получать изменения в памяти одной программы. Есть вариант просто читать память процесса через определённые участки времени и сравнивать. Но хотелось бы этого избежать. Может есть какое либо API для мониторинга изменений определённой области памяти процесса? https://www.cyberforum.ru/ win-api/ thread1071176.html C++ WinAPI Перехват блокировки windows, Win+L Здравствуйте. Возникла необходимость при включении компьютера, когда пользователь видит окно выбора учетной записи и последующего ввода пароля, перехватить это окно. Те мне необходима написать и предоставить пользователю свою программу авторизации, в частности по NFC карте, приложенной к ридеру, подключенному по USB. Возможно ли это сделать? и как, где почитать, где посмотреть примеры, я в... https://www.cyberforum.ru/ win-api/ thread1071084.html
C++ WinAPI Генерация HMAC CALG_SHA_256 под WindowsXP (CryptoAPI)
Привет! Подскажите, возможно ли под XP SP3 генерить SHA256 под заданному ключу (байт массив) ? В документации расплывчито напоминается, что толи эта штука работает только с SP3, а где - то вообще говорится, что только с Vista поддерживается :) Хотя эта штука не работает даже под Windows 7 почему то. Вот простой пример: #define _WIN32_WINNT 0x05010300 #include <stdio.h> #include...
C++ WinAPI Нужно сравнить размер, и вывести список файлов, которые больше размера кластера Добрый день. Люди, подскажите в чем ошибка. Нужно сравнить размер, и вывести список файлов, которые больше размера кластера. Узнал размер кластера f=4096. Получаю размер 1-ого файла, и после первых 2 циклов, переменные принимают какие-то не мыслимые значения, включая даже счетчик (Kol-количество файлов). #include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <string.h>... https://www.cyberforum.ru/ win-api/ thread1070942.html
C++ WinAPI Winapi - Dialog. Need advice https://www.cyberforum.ru/ win-api/ thread1070765.html
Помогите пожалуйста :( Как сделать функцию, которая еще до открытия диалогового окна будет посылать какие-то данные в оконную процедуру? Например у меня есть Picture Control и функция OnCommand. Если в OnCommand прописать загрузку изображения, то оно загрузится после нажатия на какую либо из кнопок и отобразится, а мне надо сразу при открытии окна. Есть функция: INT Window :: Run ( HINSTANCE...
C++ WinAPI Ожидаемые таймеры
Помогите пожалуйста с программой! Привести исходный код программы, производящей вывод 3-х сообщений на экран раз в пять минут. Каждое сообщение должно выводится отдельным потоком. Использовать для выполнения работы ожидаемые таймеры. Задание необходимо выполнить на языке программирования С++. При выполнении задания необходимо пользоваться функциями Windows API и не использовать библиотеки и...
C++ WinAPI Вывод информации о процессе Здравствуйте, очень нужна ваша помощь, не могу сделать вывод информации о процессе запущенном с помощью этой программы. Помогите пожалуйста:( #include <windows.h> #include <iostream> #include <stdio.h> #include <conio.h> LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); HWND zapproc, procclc, https://www.cyberforum.ru/ win-api/ thread1070456.html C++ WinAPI Процессы - Slave и Master https://www.cyberforum.ru/ win-api/ thread1070379.html
Ребят как правильно запускать процессы slave и master? они должны находится в 1 папке или разных?как разные проекты?просто мы имеем 2 main при запуске ерундистика происходит с ошибками,может кто то протестировать этот код? Заранее спасибо! Задание: 1. Написать программу SLAVE , которая выводит день недели по дате, переданной в качестве параметра. Если параметр не передан, вывести об этом...
C++ WinAPI Отображение файлов в память
#include <Windows.h> int _cdecl main(int argc, char** argv) { HANDLE hfile = CreateFile(L"666.txt", GENERIC_READ, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); HANDLE hFM = CreateFileMapping(hfile, NULL, PAGE_READONLY, 0, 0, NULL); LPSTR p = (LPSTR)MapViewOfFile(hFM, FILE_MAP_READ, 0, 0, 0); DWORD size = GetFileSize(hfile, NULL); HANDLE hOut = CreateFile(L"6662.txt",...
C++ WinAPI Неверная кодировка при чтении из файла https://www.cyberforum.ru/ win-api/ thread1069689.html
Добрый вечер! Пытаюсь прочитать файл. Текст посылаю в диалоговое окно. на выходе иероглифы. Пожалуйста помогите разобратьс
Эксперт С++
3701 / 2835 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 22
0

Сканер сигнатур - C++ WinAPI - Ответ 5640588

15.01.2014, 00:12. Показов 8350. Ответов 3
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
в продолжении этой темы Остановить процесс загрузки файла в память на конкретном адресе но по другому вопросу

в общем получилась данная задумка подменил параметр D3D_FEATURE_LEVEL_11_1 на D3D_FEATURE_LEVEL_10_0 и запустил D3D11-приложение на DX10-видеокарте.

Dll (хук)
Кликните здесь для просмотра всего текста
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
#include <Windows.h>
#include <d3d11_2.h>
 
#pragma comment(lib, "d3d11.lib")
 
DWORD WINAPI Hook_thread(LPVOID);
DWORD hooked_D3D11CreateDeviceAndSwapChain = 0;
 
DWORD APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
    switch (dwReason)
    {
    case DLL_PROCESS_ATTACH:
        CreateThread(NULL, NULL, Hook_thread, NULL, NULL, NULL);
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    default:
        break;
    }
    return true;
}
 
HRESULT HookedD3D11CreateDeviceAndSwapChain(
    _In_   IDXGIAdapter *pAdapter,
    _In_   D3D_DRIVER_TYPE DriverType,
    _In_   HMODULE Software,
    _In_   UINT Flags,
    _In_   const D3D_FEATURE_LEVEL *pFeatureLevels,
    _In_   UINT FeatureLevels,
    _In_   UINT SDKVersion,
    _In_   const DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,
    _Out_  IDXGISwapChain **ppSwapChain,
    _Out_  ID3D11Device **ppDevice,
    _Out_  D3D_FEATURE_LEVEL *pFeatureLevel,
    _Out_  ID3D11DeviceContext **ppImmediateContext
    )
{
    D3D_FEATURE_LEVEL g_pFeatureLevels = D3D_FEATURE_LEVEL_10_0;
    pFeatureLevels = &g_pFeatureLevels;
 
    return D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software,
        Flags, pFeatureLevels, FeatureLevels, SDKVersion,
        pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext);
}
 
void CallHook()
{
    _asm call dword ptr hooked_D3D11CreateDeviceAndSwapChain
}
 
DWORD WINAPI Hook_thread(LPVOID)
{
    hooked_D3D11CreateDeviceAndSwapChain = (DWORD)HookedD3D11CreateDeviceAndSwapChain;
    DWORD call_address = 0x0; // адрес функции D3D11CreateDeviceAndSwapChain в памяти (нужно искать вручную)
 
    DWORD old_prot = 0;
 
    VirtualProtect((void*)call_address, 6, PAGE_EXECUTE_READWRITE, &old_prot);
    memcpy((void*)call_address, (PBYTE)CallHook, 6);
    VirtualProtect((void*)call_address, 6, old_prot, &old_prot);
    ::ExitThread(1337);
}


программа для приостановки процесса инициализации (со встроенным инжектором)
Кликните здесь для просмотра всего текста
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
typedef LONG(WINAPI* NTRESUMEPROCESS)(HANDLE pHandle);
 
HANDLE hProc = 0;
 
PROCESS_INFORMATION StartProcess(char* AppName)
{
    cout << "AppName: " << AppName << endl;
    PROCESS_INFORMATION procInfo;
    STARTUPINFO startInfo;
    memset(&procInfo, 0, sizeof(procInfo));
    memset(&startInfo, 0, sizeof(startInfo));
    startInfo.cb = sizeof(startInfo);
 
    char temp[MAX_PATH];
    CreateProcess(AppName, temp, NULL, NULL, FALSE,
        CREATE_SUSPENDED, NULL, NULL, &startInfo, &procInfo);
 
    return procInfo;
}
 
bool Inject(DWORD pID, char* path)
{
    LPVOID RemoteString;
    LPVOID LoadLibAddr;
    if (pID == 0)
        return false;
    if (hProc == 0)
        return false;
    LoadLibAddr = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
    RemoteString = VirtualAllocEx(hProc, NULL, strlen(path),
        MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(hProc, RemoteString, path, strlen(path), NULL);
    CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddr,
        RemoteString, NULL, NULL);
    CloseHandle(hProc);
    return true;
}
 
int main()
{
    DWORD time;
    cout << "Time for sleep thread, in milliseconds: ";
    cin >> time;
    cout << endl;
 
    char AppName[256];
    cout << "Enter AppName name: ";
    cin >> AppName;
    cout << endl;
 
    PROCESS_INFORMATION procInfo = StartProcess(AppName);
    cout << "Process is SUSPENDED." << endl;
    cout << endl << "Press F1..." << endl;
    hProc = procInfo.hProcess;
    while (1)
    {
        if (GetAsyncKeyState(VK_F1))
        {
            NTRESUMEPROCESS Resume = (NTRESUMEPROCESS)GetProcAddress(
                GetModuleHandle("ntdll.dll"), "NtResumeProcess");
            cout << "Process is RESUME." << endl;
            Resume(procInfo.hProcess);
            Sleep(time);
            SuspendThread(procInfo.hThread);
            cout << "Thread is SUSPENDED." << endl;
            cout << endl << "Press F2 for using dll_injector..." << endl;
        }
 
        if (GetAsyncKeyState(VK_F2))
        {
            char DllName[256];
            cout << "Enter DllName name: ";
            cin >> DllName;
            cout << endl;
            Inject(procInfo.dwProcessId, DllName);
            cout << "Dll injected." << endl;
            cout << endl << "Press F3 for resume thread..." << endl;
        }
 
        if (GetAsyncKeyState(VK_F3))
        {
            ResumeThread(procInfo.hThread);
            cout << "Thread is RESUME." << endl;
        }
 
        Sleep(100);
    }
 
    return 0;
}


ну и само тестовое D3D11-приложение
Кликните здесь для просмотра всего текста
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <d3d11_2.h>
 
#pragma comment (lib, "d3d11.lib")
 
ID3D11Device* device;
IDXGISwapChain* swapChain;
ID3D11RenderTargetView* renderTarget;
ID3D11DeviceContext* context;
ID3D11Texture2D* texture;
 
void CleanD3D()
{
    device->Release();
    swapChain->Release();
    renderTarget->Release();
    context->Release();
    texture->Release();
}
 
void RenderFrameD3D()
{
    float ClearColor[4] = { 0.396078431372549f, 0.6117647058823529f,
        0.9372549019607843f, 1.0f };
    context->ClearRenderTargetView(renderTarget, ClearColor);
    swapChain->Present(0, 0);
}
 
void InitializeD3D(HWND hWnd)
{
    UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
#if defined(_DEBUG)
    creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
    D3D_FEATURE_LEVEL featureLevels = D3D_FEATURE_LEVEL_11_1;
 
    DXGI_SWAP_CHAIN_DESC desc = { 0 };
    ZeroMemory(&desc, sizeof(DXGI_SWAP_CHAIN_DESC));
    desc.BufferCount = 2;
    desc.Windowed = TRUE;
    desc.OutputWindow = hWnd;
    desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    desc.SampleDesc.Count = 1;
    desc.SampleDesc.Quality = 0;
    desc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
 
    D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, creationFlags,
        &featureLevels, 1, D3D11_SDK_VERSION, &desc, &swapChain, &device, NULL, &context);
 
    swapChain->GetBuffer(0, IID_PPV_ARGS(&texture));
    device->CreateRenderTargetView(texture, NULL, &renderTarget);
}
 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    ZeroMemory(&wc, sizeof(WNDCLASSEX));
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(0, IDC_ARROW);
    wc.lpszClassName = "WindowClass";
    RegisterClassEx(&wc);
    HWND hWnd = CreateWindowEx(0, "WindowClass", "Test D3D11.2",
        WS_SYSMENU | WS_MINIMIZEBOX, (GetSystemMetrics(SM_CXSCREEN) - 1280) / 2,
        (GetSystemMetrics(SM_CYSCREEN) - 720)/ 2, 1280, 720, 0, 0, hInstance, 0);
    ShowWindow(hWnd, nCmdShow);
    InitializeD3D(hWnd);
    MSG msg;
    while (1)
    {
        while (PeekMessage(&msg, 0, 0, 0, 1))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        if (msg.message == WM_QUIT) break;
        RenderFrameD3D();
    }
    CleanD3D();
    return msg.wParam;
}


вопрос в следующем: искать постоянно меняющийся адрес не вариант. Помогите со сканером сигнатур (точнее с функцией или прототипом функции). Пробовал те, которые в инете есть - результата никакого не дало. В OllyDbg сигнатуру с маской находить умею

пользовался вот такой заготовкой
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
bool Data(const BYTE* pData, const BYTE* pattern, const char* mask)
{
    for (; *mask; mask++, pData++, pattern++)
    if (*mask == 'x' && *pData != *pattern)
        return false;
    return (*mask) == NULL;
}
 
DWORD FindPattern(DWORD addr, DWORD length, BYTE* pattern, char* mask)
{
    for (DWORD i = 0; i < length; i++)
    if (Data((BYTE*)(addr + i), pattern, mask))
        return (DWORD)(addr + i);
    return NULL;
}
 
DWORD WINAPI Hook_thread(LPVOID)
{
    hooked_D3D11CreateDeviceAndSwapChain = (DWORD)HookedD3D11CreateDeviceAndSwapChain;
 
    DWORD call_address = FindPattern((DWORD)module.LpBaseOfDll, module.SizeOfImage,
        (PBYTE)"\xFF\x15 ...", "xxxx????xxx ..."); // module - это MODULEINFO
 
    DWORD old_prot = 0;
 
    VirtualProtect((void*)call_address, 6, PAGE_EXECUTE_READWRITE, &old_prot);
    memcpy((void*)call_address, (PBYTE)CallHook, 6);
    VirtualProtect((void*)call_address, 6, old_prot, &old_prot);
    ::ExitThread(1337);
}
но как было сказано выше - безрезультатно.

Вернуться к обсуждению:
Сканер сигнатур C++ WinAPI
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2014, 00:12
Готовые ответы и решения:

Сканер портов
Всем привет.Пишу сканер портов.Как мне сделать так,что бы вывод шёл в главное окно?то есть нажимаю...

Сканер отпечатков пальцев
Здравствуйте! Можно ли подключится к драйверу сканера для получения изображения (на него нет SDK...

Как ускорить сканер памяти
Вот код #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;tlhelp32.h&gt; #include &lt;algorithm&gt; ...

Сканер IP - Адресов, Порт - сканер (в локальной сети)
Доброе время суток) Написана программа для сканирования портов (указал диапазон 5900 - 5906), на...

3
15.01.2014, 00:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2014, 00:12
Помогаю со студенческими работами здесь

Создание каркаса программы из namespace`ов и сигнатур
Всем привет. Возникла следующая проблема :) Вернулся с Java на C++. Расстроился. Раздражает то, что...

Код поиска сигнатур (нужны комментарии)
требуется разобрать код #include &lt;iostream&gt; using namespace std; int cmp_func(const void...

Лексический сканер
Лексический сканер должен учитывать области видимости и кодировать их по-разному. Содержание...

Сканер портов
Всем добрый день! У меня возникла проблема при реализации сканера портов под Линукc: Программа...

Сканер портов
Всем привет :) Не могу реализовать сканер по диапазону ip-адресов и на определённый порт(по...

сканер proxy
Здравствуйте уважаемые форумчане! Никогда не работал с сетью в с++ поэтому прошу объясните что...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru