Компиляция уже написанного C-скрипта.Визуальные Студии 2017 - PullRequest
0 голосов
/ 10 декабря 2018

У меня уже есть написанный скрипт для C, который я хочу использовать вместе с Texmod.Был пост об этом давно, но я не могу получить к нему доступ.По сути, он позволяет вам использовать TexMod с аргументами для .exe, например -log.Я скачал Visual Studios 2017 и попытался скомпилировать его, используя консоль разработчика, перейдя в папку cd, а не в «script.c» для его компиляции.Это делает .exe и .obj, но ничего не делает после этого, даже когда я дважды щелкаю по .exe. Проблема в том, что я знаю java и никогда ничего не делал на языке Си.Вот код:

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>

UINT WINAPI EzGetPid(LPCSTR procName, UINT *pid, UINT size);

int main(int argc, char *argv[])
{
    if (argc < 1) {
        puts("You must specifie the arguments");
        return 1;
    }

    UINT pid = 0;
    if (!EzGetPid("Texmod.exe", &pid, 1)) {
        puts("You must open Texmod first.");
        return 1;
    }

    BYTE shellcode_tramp[] = "\x58\x6A\x00\x6A\x00\x68\x00\x00\x00\x00\xFF\xE0";
    UINT size_tramp = 12;

    char arguments[0x500] = {0};
    strcpy(arguments, argv[1]);

    HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    LPVOID remote_tramp = VirtualAllocEx(proc, NULL, 0x1000, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    LPVOID remote_args = (LPVOID)((DWORD)remote_tramp + size_tramp);

    *(DWORD*)(&shellcode_tramp[6]) = (DWORD)remote_args;
    WriteProcessMemory(proc, remote_tramp, shellcode_tramp, size_tramp, NULL); // Write the trampoline
    WriteProcessMemory(proc, remote_args, arguments, strlen(arguments), NULL); // Write the arguments

    BYTE firstCall[] = "\xE8\x00\x00\x00\x00\x90";
    BYTE secondCall[] = "\xE8\x00\x00\x00\x00\x90";
    *(DWORD*)(&firstCall[1]) = (DWORD)remote_tramp - 0x4012E1 - 5;
    *(DWORD*)(&secondCall[1]) = (DWORD)remote_tramp - 0x40145B - 5;
    WriteProcessMemory(proc, (LPVOID)0x4012E1, firstCall, 6, NULL); // Write first detour call
    WriteProcessMemory(proc, (LPVOID)0x40145B, secondCall, 6, NULL); // Write second detour call

    CloseHandle(proc);
    return 0;
}

UINT WINAPI EzGetPid(LPCSTR procName, UINT *pid, UINT size)
{
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 buffer = {0};
    buffer.dwSize = sizeof(PROCESSENTRY32);

    UINT count = 0;

    while (Process32Next(hSnap, &buffer) && count < size) {
        if (!strcmp(buffer.szExeFile, procName))
        pid[count++] = buffer.th32ProcessID;
    }

    CloseHandle(hSnap);
    return count;
}

ps Я добавил последнюю закрытую скобку, так как думал, что, возможно, скопировал ее неправильно, когда копировал ее очень давно.

Нужно ли использовать VisualИнтерфейс студии, чтобы сделать это?Мне было интересно, может ли кто-нибудь, кто знает C, посмотреть на код, который я пытаюсь скомпилировать, и помочь объяснить, что мне не хватает, или какие-либо специальные инструкции о том, как его запустить.Большое спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...