Перейти к содержанию

Synapsehome

Пользователи
  • Постов

    77
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные Synapsehome

  1.  Почитай мануалы в Интернете о записи данных в файл + обработку исключений, чтобы всегда, как в данном примере так и в других уметь определять ошибку. А также отладку dll-ок в Visual Studio в редакторе кода, если это тебе надо. 

    Не ну конешн спасибо за разъяснение :grin:

    Ошибка была в GetLogFilePath, даже скорее не ошибка не недочёт. я переписал и сделал немного проще. Народ, пользуйте:

    ofstream LogFile;

    BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpvReserved)
    {
    if(dwReason == DLL_PROCESS_ATTACH) {
    CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Log, 0, 0, 0);
    }
    else if(dwReason == DLL_PROCESS_DETACH) {
    }
    return TRUE;
    }


    void Log(){
    LogFile.open("c:\\D3DTest.txt");
    LogFile.clear();
    DWORD XP = FindPattern((DWORD)IW5SPbase, 0x005E5000, (BYTE*)"\xA1\x00\x00\x00\x00\x85\xC0\x74\x06\x05", "x????xxxxx");
    LogFile << "XP Address: " << XP;
    }

    XP Address: 1521881249

    главное, что работает! ;)

    • Плюс 1
  2. Всем привет! Задача такова: не искать каждый раз адрес с жизнями, решил сделать автологгер(используя findpattern), в который должны заноситься новые адреса (к примеру - адреса опыта для кооперативного режима, статичные). Так вот, сам логер работает как присоединяемая к игровому процессу dll. Покажу, как именно я пытаюсь писать (ударение на 2-й слог) в файл:


    #include <windows.h>
    #include <fstream>
    #include <stdio.h>
    #define LOGFILE "logfile.txt"
    using namespace std;
    char logFilePath[260];

    void getLogFilePath( HINSTANCE hinstDLL )
    {
    if (GetModuleFileNameA(hinstDLL, logFilePath, sizeof(logFilePath)))
    {
    for (int i = strlen(logFilePath) - 1; i >= 0; i--)
    {
    if (logFilePath[i] == '\\'){
    logFilePath[i+1] = 0;
    strcat(logFilePath,LOGFILE);
    break;
    }
    }
    }
    }

    void add_log(const char *fmt, ...)
    {
    va_list va_alist;
    ofstream ofile;
    char logbuf[256] = {0};
    if(!fmt) { return; }
    ofile.open(logFilePath, ios::app);
    va_start (va_alist, fmt);
    _vsnprintf(logbuf, sizeof(logbuf) - sizeof(char), fmt, va_alist);
    va_end (va_alist);
    ofile << logbuf << endl;
    ofile.close();
    }

    void MyLogThread()
    {
    add_log("TEXT");
    }

    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,LPVOID lpReserved )
    {
    switch( fdwReason )
    {
    case DLL_PROCESS_ATTACH:
    getLogFilePath(hinstDLL);
    CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)MyLogThread, NULL, NULL, NULL);
    break;

    case DLL_THREAD_ATTACH:
    break;

    case DLL_THREAD_DETACH:
    break;

    case DLL_PROCESS_DETACH:
    break;
    }
    return TRUE;
    }

    В директории с dll лежит файл logfile.txt. Но строчка TETX в файл не записывается :o:huh:

  3. Но прежде чем пойти от него, надо бы ВиртуалБокс поставить, да ДОС сверху накатить....

    Как знакомо, но я перестал этой камастурой заниматься и перешел на PABC : ) Никогда не любил паскаль и никогда не использовал "досовскую" версию, есть намного лучше - http://pascalabc.net/ssyilki-dlya-skachivaniya.html, сейчас там 4 фреймворк поддерживается и конструктор форм. ;)

    • Плюс 1
  4. memcpy((void*)4553935, "\x75\x12", 3);Вместо "\x75\x12" должен быть указатель на данные.

    MasterGH, необязательно, эта функция лишь копирует данные. Я ошибся , вставив 10-тичное число 4553935, это я экспериментировал, и указал не тот размер, не 2 а 3 ))

    Добавил VirtualProtect, вроде всё заработало, тьфу тьфу


    unsigned long Protection;
    VirtualProtect((void*)0x00425FC7 2, PAGE_READWRITE, &Protection);
    memcpy((LPVOID)0x00425FC7, "\x75\x12", 2);
    VirtualProtect((void*)0x00425FC7, 2, Protection, 0);

  5. Я хочу вместо WiriteProcessMemory использовать memcpy, ведь dll аттачится к процессу, значит, необходимости в WPM. Следующий код даёт возможность убрать туман войны и видеть, где строится компьютер в Galactic Battlegrounds:

    BYTE NoFogOfWar[] = {0x75, 0x12};
    WriteProcessMemory(BATTLEGROUNDS, (void*)0x00425FC7, &NoFogOfWar, 2, 0);

    Для memcpy:

    memcpy((LPVOID)0x00425FC7, "\x75\x12", 2);

    Для примеры с WriteProcessMemory всё работает, для memcpy - игры вылетает сразу же после инжекта.

    Полный код:

    #include <windows.h>
    void __stdcall FogOfWar(void)
    {
    for(;; Sleep(200)){
    if(GetAsyncKeyState(VK_NUMPAD1)){
    memcpy((void*)00425FC7, "\x75\x12", 3);
    }
    }
    }

    int __stdcall WINAPI DllMain(HINSTANCE hModule, DWORD dwAttached, LPVOID lpvReserved)
    {
    if(dwAttached == DLL_PROCESS_ATTACH)
    CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)FogOfWar, NULL, NULL, NULL);
    return 1;
    }

    В чем проблема?

  6. Не буду создавать дополнительную тему, так что продолжу эту. Проект представляет собой DLL, которая инжектится любым инжектором. Польза - получение адреса d3d9.dll Ошибка сотоит в том, что ругается:

    аргумент типа const char не совместим с параметром типа LPCWSTR


    DWORD D3DADDRESS = NULL;
    while(D3DADDRESS == NULL)
    {
    D3DADDRESS = (DWORD)GetModuleHandle("d3d9.dll");
    }

    Изменено:

    Забыл про GetModuleHandleA

  7. Izmalkoff, может я не понял вопрос, но объяви в глобалах переменную, например, ClickCounter:

    Dim ClickCounter As Integer = 0

    Перед Catch ex As Exception присвоить ей значение 1:

    ClickCounter = 1

    А после MsgBox("Login failed", MsgBoxStyle.Critical, "Error") присвоить ей 0:

    ClickCounter = 0

    А для кнопки2 сделать так:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    If ClickCounter = 0 then
    MsgBox("You must be logged in!", MsgBoxStyle.Critical, "Error")
    else
    MsgBox("Hack successful", VbOkOnly, "Hack successful")
    End If
    End Sub

  8. MasterGH, разобрался:

     Const PAGE_READWRITE = &H4&
    Const PROCESS_ALL_ACCESS = &H1F0FFF
    Private Declare Function GetWindowThreadProcessId Lib "User32" (ByVal hwnd As Integer, ByRef lpdwProcessId As Integer) As Integer
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer
    Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal Classname As String, ByVal WindowName As String) As Integer
    Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    Private Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    Private Declare Function VirtualProtectEx Lib "kernel32" (ByVal hProcess As Integer, ByRef lpAddress As Object, ByVal dwSize As Integer, ByVal flNewProtect As Integer, ByRef lpflOldProtect As Integer) As Integer
    Dim Address(0 To 1) As Integer
    Dim vBuffer(0 To 1) As Long
    Dim convert(0 To 1) As Integer
    Dim byte_array0 As Byte() = Nothing

    Все работает. Сейчас выложу полный сурс :rolleyes:

    UPD Вот, качайте, смотрите, код можно ужать раз в 10, но этим займусь на досуге. Халва пиратка, так что работать у вас вряд-ли будет, но за пример сгодится/

    НО - осталась малюсенька проблемка с записью float.

    Если объявить массив:

    Dim sBuffer(0 To 1) As Double 

    И записать 0,03 - ничего не записывается:

    Dim myProcesses As Process() = Process.GetProcessesByName("hl2")
    Dim processHandle As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, myProcesses(0).Id)
    Address(0) = Address
    byte_array0 = BitConverter.GetBytes(vBuffer(0))
    convert(0) = BitConverter.ToInt32(byte_array0, 0)
    vBuffer(0) = "0,03"
    VirtualProtectEx(processHandle, Address(0), 4, PAGE_READWRITE, 0)
    WriteProcessMemory(processHandle, Address(0), vBuffer(0), 4, 0)

    Всё! Разобрался!

  9. Нет, теперь ругается на все:

    769908fb12f7400160c4c8ce9be41dcd.jpeg

    Тот адрес (AddressWith0X) уже имеет вид 0xXXXXXXX, может я не понял, ты хотел из 10-ного в 16-ный конвертировать? Или нет... я запутался. У кого стоит HL2, попробуйте сделать - для активации в найденный адрес AddressWith0X записать 1, для деактивации 0. O-=

  10. MasterGH, собаку съел пытаясь использовать CreateToolhelp32Snapshot, но потом нашел более лучшее решение.

    Вот на VB:

    Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Object, ByVal lpBuffer As Object, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long
    Public Shared Function WriteProcessMemory(ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByVal lpBuffer As Byte(), ByVal nSize As UIntPtr, ByRef lpNumberOfBytesWritten As IntPtr) As Boolean
    End Function

    Код на нажатие кнопки:

    Dim HL2WriteProcess As Process = Process.GetProcessesByName("hl2")(0)
    Dim ValueToWrite As Integer = 1
    Dim pBytes As Byte() = BitConverter.GetBytes(ValueToWrite)
    WriteProcessMemory(HL2WriteProcess.Handle, AddressWith0X.Text, pBytes, pBytes.Length, 0)

    При записи выдаёт ошибку - Приведение строки 0x01B0250 к типу Long недопустимо. <_<

  11. Одну тему я вроде создавал, но черт с ней. Побаловался, намулевал простенький трейнер для (спасибо MasterGH, что разрулил мои проблемы с чекбоксами) HL2:

    060c6e03e00ebd71183d13c71c7b9811.jpeg

    Хотя после обновы перестали работать беск хп :angry: Я хочу перенести его хотя бы в VS, не всё же время на CE сидеть, нужно что-то менять. Туторы, которые я нашел, мне малость неонятны - например, автор находит адрес с хп, пишет программку за полминуты, и вставляет туда этот адрес (DMA! :ninja: ), и, мол, готово. Адрес изменится после перезапуска в любом случае. Так вот, это на первое. На второе - пончик у меня адрес с освещением (все вокруг подсвечивается равномерно, т.е. нет теней и пр. темных и страшных закоулков) статичен и имеет вид типа

     materialsystem.dll+ED5A8

    Как правильно сделать инжектор к нему? Лучше, если на C++ CLI, неуправлялку я знаю, но использовать не хочу, т.к. люблю повозиться с интерфесом :grin:


  12. local te_health = getTableEntry("health")

    function CECheckbox1Change(sender)
    if ( checkbox_getState(sender) )
    then
    memoryrecord_freeze(te_health, 0)
    else
    memoryrecord_unfreeze(te_health)
    end
    end

    Подправил добавив then. Работает но наоборот, т.е. когда чекбокс неактивен - замораживается, как активен - размораживается, а если поменять код местами, у меня не рабоатет :ninja:

    Я не буду использовать .CETRAINER, а хочу скомпилировать в экзешник, пусть хоть 3 мб, чтобы тот, кто будет использовать, не заботился о скачивании СЕ и пр. Мне нужно лишь чтобы значение 100 записывалось при активации, а значение 99 при деактивации без холодильника (заморозки). Так что вышеописанный вариант с таблицей как я понял мне не подходит.

    Помогите уж :inlove:

  13. Стал замечать, что по СЕ 6.1 да и по его проблемах появляются одинаковые темы, с одинаковым названием, и проблемами, кстати тоже. Посему, делаю одну тему, что все писали по проблемам с этой версией только сюда, и не создавали клонов в диких количествах. При том, что в оригиналах уже давно даны ответы.

    //Kvazimado

    В последнее время надоело делать использовать хотклавиши для активации функций. Приглянулись чекбоксы, но событий типа checked и unchecked я не нашел. Спрошу на примере: у меня есть игрушка, в ней статичное значение жизней, при активации чекбокса (с галочкой) - в адресс ZZZ (это хп) должно записаываться 100, а при деактивации - 99 (смысл не в 100% жизнях, а в их восстановлении (да да, вот так тупо, но мне так нужно :rolleyes: )). Весь вопрос в том - как черт возми это сделать? :ninja:

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.