Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ WinAPI Как добавить программу в список установки и удаления программ на winapi? Как добавить программу в список установки и удаления программ на winapi? Пробовал разные ключи реестра не получается может кто-то подскажет решение? https://www.cyberforum.ru/ win-api/ thread1797614.html C++ WinAPI В случае если процесс не найден сделать что то
#include <TlHelp32.h> using namespace std; bool main() { const TCHAR* procname = "skaner.exe"; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pe;
C++ WinAPI Дата изменении и дата создания файла https://www.cyberforum.ru/ win-api/ thread1797095.html
Здравствуйте господа , есть такой код - SYSTEMTIME lf; FILETIME ft; OFSTRUCT of; HANDLE hFile=(HANDLE)OpenFile(name, &of, OF_READWRITE); if(!hFile) {} GetFileTime(hFile, &ft, NULL, NULL); FileTimeToSystemTime(&ft, &lf);
C++ WinAPI Утечка памяти VirtualAlloc() https://www.cyberforum.ru/ win-api/ thread1797063.html
Всем привет! Есть функция, которая совершает очень большое количество повторений и выделяет при выполнении динамическую память. При таком раскладе: // TODO: smthng BYTE *buffer = (BYTE *)VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); // TODO: smthng
Создание и подключение DLL C++ WinAPI
Добрый вечер, уважаемые форумчане, Прошу помощи в коде создания и подключения DLL. Вот код: header DLL-файла sergei.h: __declspec (dllexport) int WINAPI Fun151(int, int); __declspec (dllexport) float WINAPI Fun152 (int, int, int);
C++ WinAPI Как устроена графика? Я сделал программу с минимумом графики на чистом WinApi. Приведу конкретный пример: WM_PAINT: Нарисована гайка. При наведении на окно WM_MOUSEMOVE: Активируется поток(единственный при всех mousemove пока курсор не выйдет за границы окна), гайка уже под углом рисуется заново, чтобы создавалось впечатление буд-то она вертится. Итерация происходит каждые 0,25с. Это конечно ерунда. Далее мне стало... https://www.cyberforum.ru/ win-api/ thread1797028.html
C++ WinAPI Поясните строку расчета синусойды https://www.cyberforum.ru/ win-api/ thread1796739.html
#define TWOPI (2 * 3.14159) case WM_PAINT: hdc = BeginPaint(hWnd, &ps); MoveToEx(hdc, 0, cyClient / 2, NULL); LineTo(hdc, cxClient, cyClient / 2); for (i = 0; i < NUM; i++) {
C++ WinAPI Рекурсивный поиск файлов
Привет всем! Пишу программу, имеющую функционал поиска файлов по ключевым словам. Для начала написал программу, которая перебирала бы дескрипторы всех файлов на всех логических дисках. Получилось у меня следующее: #include <Windows.h> WIN32_FIND_DATA findData; char path;
C++ WinAPI Какой стиль окна отвечает за то, что оно всегда активно, пока в него не ввести текст? Друзья! Есть программка. Там есть всплывающее окно. Пока в него текст не введёшь, все остальные окна этой программы неактивны и при тыкании на них система пикает. Нужно сделать так, чтобы это всплывающее окно не обладалоо такими свойствами. ТО есть показалось и показалось, чтобы дальше я мог с другими окнами работать. Для этого я хочу динамически изменить его стиль. Предполагаю, что один из... https://www.cyberforum.ru/ win-api/ thread1796502.html C++ WinAPI FindFirstFile() падает с кодом c0000005 когда находит файл https://www.cyberforum.ru/ win-api/ thread1796341.html
Всем привет! Текст программы: #include <Windows.h> int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { LPWIN32_FIND_DATA findData; HANDLE find = FindFirstFile("qwe.txt", findData);
C++ WinAPI Функция Shell_NotifyIcon
В общем BOOL Shell_NotifyIcon( _In_ DWORD dwMessage, _In_ PNOTIFYICONDATA lpdata ); аля msdn, меня интересует второй параметр, ipdata - PNOTIFYICONDATA, как его заполнять? помогите пожалуйста) структуру надо определить? хелп кр4)
C++ WinAPI Segfault после WriteProcessMemory https://www.cyberforum.ru/ win-api/ thread1796259.html
#include <windows.h> #include <string> using namespace std; int main() { string s = "dd"; HANDLE prcs = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID); DWORD protection = PAGE_EXECUTE_READWRITE; VirtualProtect( (LPVOID) offset, sizeof (s), PAGE_EXECUTE_READWRITE, &protection );
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
0

VirtualAllocEx + _asm - C++ WinAPI - Ответ 9481290

24.08.2016, 08:02. Показов 1780. Ответов 5
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
По адресу 1012954e находится следующие инструкции, которые оперирует с адресами жизней как самого игрока так и врагов
Assembler
1
2
3
mov [ebx],eax       ; 89 03
mov ebx,eax         ; 8B D8
mov eax,[esp+14]   ; 8B 44 24 14
С помощью Cheat Engine сделал убийство с удара:
Auto Assemble script
Memory View - Go to Address 1012954e - AutoAssemble edit: Auto Assemble script - File->Assign to current cheat table
Assembler
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
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,38)
label(returnhere)
label(originalcode)
label(exit)
 
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
cmp dword ptr [ebx-ec],1
js @F
mov [ebx],0
jmp originalcode
 
@@:
mov [ebx],eax
 
originalcode:
nop
mov ebx,eax
mov eax,[esp+14]
 
exit:
jmp returnhere
 
"Core.dll"+2954E:
jmp newmem
nop
nop
nop
returnhere:
 
 
 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"Core.dll"+2954E:
mov [ebx],eax
mov ebx,eax
mov eax,[esp+14]
//Alt: db 89 03 8B D8 8B 44 24 14

Ну, и, естественно, чтобы каждый раз не проделывать эти операции с помощью CE хочу сделать это программно на C++.
Вот моя попытка записать инструкции в виде байтов:
C++ Code
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
#include <iostream>
#include <windows.h>
#include <TlHelp32.h>
#include <string>
 
#define MEMSIZE 38
 
void *p = NULL;
bool active = false;
byte original[8] = { 137, 3, 139, 216, 139, 68, 36, 20 };
byte jmp[8] = { 233, 173, 106, 28, 247, 144, 144, 144 };
byte hack[MEMSIZE] = {
    0x83, 0xBB, 0x14, 0xFF, 0xFF, 0xFF, 0x01,
    0X0F, 0x88, 0x0B, 0x00, 0x00, 0x00,
    0XC7, 0x03, 0x00, 0x00, 0x00, 0x00,
    0XE9, 0x02, 0x00, 0x00, 0x00,
    0X89, 0x03,
    0X90,
    0X8B, 0xD8,
    0X8B, 0x44, 0x24, 0x14,
    0XE9, 0x30, 0x95, 0xAD, 0x09
};
 
void toggle(HANDLE hProc, DWORD address);
DWORD getProcessIdByName(std::string processName);
 
 
// 0x1012954e
int main()
{
    DWORD pId = getProcessIdByName("KillingFloor.exe");
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId);
    p = VirtualAllocEx(hProc, NULL, MEMSIZE, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    WriteProcessMemory(hProc, p, &hack, MEMSIZE, NULL);
    std::cout << "hack bytes located at: 0x" << p << std::endl;
 
    system("pause");
    VirtualFreeEx(hProc, p, MEMSIZE, MEM_RELEASE);
    CloseHandle(hProc);
    return 0;
 
}
 
DWORD getProcessIdByName(std::string processName)
{
    DWORD pid = 0;
 
    // Create toolhelp snapshot
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 process;
    ZeroMemory(&process, sizeof(process));
    process.dwSize = sizeof(process);
 
    // Walkthrough all processes
    if (Process32First(snapshot, &process))
    {
        do
        {
            // Compare process.szExeFile based on format of name, i.e., trim file path
            // trim .exe if necessary, etc
            if (processName == static_cast<std::string>(process.szExeFile))
            {
                pid = process.th32ProcessID;
                break;
            }
        } while (Process32Next(snapshot, &process));
    }
 
    CloseHandle(snapshot);
    return pid;
}
 
void toggle(HANDLE hProc, DWORD address)
{
    //p = VirtualAllocEx(hProc, NULL, MEMSIZE, MEM_RESERVE, PAGE_READWRITE);
 
    if (active)
    {
        WriteProcessMemory(hProc, (LPVOID)address, &original, 8, NULL);
        //VirtualFreeEx(hProc, p, MEMSIZE, MEM_RELEASE);
    }
    else
    {
        WriteProcessMemory(hProc, (LPVOID)address, &jmp, 8, NULL);
        //WriteProcessMemory(hProc, &p, &hack, 33, NULL);
    }
    active = !active;
}

Но проблема в том что инструкция jmp 10129556 каждый раз записывается разными байтами(это зависит не от фазы луны, а от места в адресном пространстве).
Т.е. когда первый раз выделяю память VirtualAllocEx получаю допустим hack bytes located at: 0x165F0000
и тогда по адресу 0x165F0021 будет такие байты E9 2895B3F9 аналогичные инструкции jmp 10129556.

В другой раз когда снова выделяю память VirtualAllocEx получаю допустим hack bytes located at: 0x37BA0000
и тогда по адресу 0x37BA0021 будет такие байты E9 3095AD09 (jmp 41749556 - прыжок неизвестно в какие дебри),
а должны быть E9 309547D8 аналогичные инструкции jmp 10129556.

Теперь собственно вопрос как правильно преобразовать инструкцию jmp 10129556 в байты?

Или же можно записать _asm код в прямом виде, а не байтами?
C++ ->asm WriteProcessMemory
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
__declspec(naked) void stub_start() {
    __asm {
        cmp dword ptr[ebx - 0xec], 0x1
        js @F
        mov[ebx], 0x0
        jmp originalcode
 
        @@:
        mov[ebx], eax
 
        originalcode :
        nop
        mov ebx, eax
        mov eax, [esp + 0x14]
        jmp 0x10129556
    }
} 
void stub_end() {
}
 
DWORD nBytes;
void* p = VirtualAllocEx(....);
WriteProcessMemory(hProc, p, stub_start, stub_end-stub_start, &nBytes);
main.cpp(4): error C2018: неизвестный знак "0x40"
1> 1>
main.cpp(8): error C2018: неизвестный знак "0x40"
1> 1>
main.cpp(8): error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено ":"
1> 1>
main.cpp(15): error C2415: недопустимый тип операнда

в гугле нашёл код, но он не работает

ScreenShots:
1 - 0x1012954e оригинальные байты
2 - 0x1012954e байты для прыжка
3 - 0x06650000 байты иньекции (сгенерированы скриптом CE)
4 - 0x165F0000 неверные байты иньекции (C++ VirtualAllocEx)
5 - 0x165F0000 верные байты иньекции (вручную подправил инструкцию)

Вернуться к обсуждению:
VirtualAllocEx + _asm C++ WinAPI
Миниатюры
VirtualAllocEx + _asm   VirtualAllocEx + _asm   VirtualAllocEx + _asm  

VirtualAllocEx + _asm   VirtualAllocEx + _asm  
0
Заказать работу у эксперта
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2016, 08:02
Готовые ответы и решения:

VirtualAllocEx возвращает ошибку 487
Здравствуйте! HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, false, process_id); new_memory =...

VirtualAllocEx возвращает ошибку The handle is invalid
вопрос собственно уже в заголовке , не пойму почему ? Хэндл точно находит нормально !!!...

VirtualAllocEx, попытка инжекта DLL - доступ запрещен
пытаюсь заинжектить DLL в игру (разработчики хорошо постарались чтоб защитить её) при вызове...

Взаимодействие с asm-кодом из-под Си
Не нашел подходящего подфорума, поэтому разместил здесь. Итак, речь не о том, как написать часть...

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

Asm из cpp, с или других расширений
Можно ли в автоматическом режиме в Visual Studio получить asm-файл из cpp-файла или c-файла или...

Получение serial number CPU/HDD asm
Можно ли получить серийный номер процессора или жесткого диска с помощью WinApi? Или же путем...

Delphi и ASM - не работает вызов функции Invoke через asm
В Delphi не работает вызов функции Invoke через asm. часть кода: asm invoke...

Создание проекта с участием c++ и asm модулей. Ошибка asm модуля
Доброго времени суток! Подскажите, пожалуйста, как исправить данную ошибку (А2008)?

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