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

Laziz

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

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

  • Посещение

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

    12

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

  1. Ну меня в чем задумка то... Хочу сделать dll'ку которая будет просто выводить заданный текст по заданным координатам в окне игры. И что б эту dll'ку можно было инжектить в процесс игры, изменять значение выводимого текста, координат, размера шрифта итд,..

    Например: Пишу приложение на C#, инжектю мою dll'ку в процесс игры, запускаю свое приложение написанное на C#, ввожу в поле нужный мне текст "OneTwoThre", dll'ка принимает этот текст и в окне игры выводит его, меняю текст на другой, жму применить, и dll'ка выводит уже другой текст...

    Вот какой мне метод под такую идею подойдет лучше всего? Думаю тут только "shared memory section" и прокатит...

    Та прога который я дал, делает тоже самое, Только немного надо понастроить, и будет работать на всех версиях ДиректИкса и где хочешь там и будет выводить сообщение, плюс, С++ там не участвует, все на C# и длл тоже. (ссылку дал на прошлой теме). (Ну... Это все к тому, если тебя тянет на С#))

  2. Пробовал на играх:

    Lineage2 C6 - работает

    B&S (RU) - зависает после аттача

    Need for speed shift - работает

    Need for Speed™ Rivals - зависает после аттача

    CS 1.6(D3DMode) - не происходит ничего после аттача.

    забыл сказать, "Корректно работает в играх, где DirectX9 версия" 10 и 11 версия пока не корректно, возможно вообще не будет работать.

    Может из за этого? Версии директ икса проверь.

  3. Я немного поковырял SharpDX и SlimDX но не сумел найти способ рисовать в чужом процессе. Конечно могу сильно ошибаться но, думаю что с помощью этих обертков нельзя рисовать в чужой процесс.

    тут я не совсем прав был, SharpDX и EasyHook если соединить(условно) то получаеться это http://forum.gamehacklab.ru/topic/2749-d3d-hook-%d0%ba%d0%be%d0%b4-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0/page__view__findpost__p__18664

  4. Вот такой вот подход подойдет?

    https://yadi.sk/d/6slQHKnlZbccg

    если че... C#

    в проекте, в Preferences добавляешь

    DXC.dll

    EasyHook.dll

    SharpDX.D3DCompiler.dll

    SharpDX.Direct3D10.dll

    SharpDX.Direct3D11.dll

    SharpDX.Direct3D11.Effects.dll

    SharpDX.Direct3D9.dll

    SharpDX.dll

    SharpDX.DXGI.dll

    остальные кидаеш в папку с exe.


    CaptureProcess _captureProcess;
    int processId = 0;
    Process _process;

    private void button1_Click(object sender, EventArgs e)
    {
    if (_captureProcess == null)
    {
    button1.Enabled = false;
    AttachProcess();
    }
    else
    {
    HookManager.RemoveHookedProcess(_captureProcess.Process.Id);
    _captureProcess.CaptureInterface.Disconnect();
    _captureProcess = null;
    }

    if (_captureProcess != null)
    {
    button1.Text = "Detach";
    button1.Enabled = true;
    }
    else
    {
    button1.Text = "Atach";
    button1.Enabled = true;
    }
    }

    private void AttachProcess()
    {
    string exeName = textBox2.Text; // Имя процесса

    Process[] processes = Process.GetProcessesByName(exeName);
    foreach (Process process in processes)
    {
    // Simply attach to the first one found.

    // If the process doesn't have a mainwindowhandle yet, skip it (we need to be able to get the hwnd to set foreground etc)
    if (process.MainWindowHandle == IntPtr.Zero)
    {
    continue;
    }

    // Skip if the process is already hooked (and we want to hook multiple applications)
    if (HookManager.IsHooked(process.Id))
    {
    continue;
    }

    Direct3DVersion direct3DVersion = Direct3DVersion.Direct3D10;
    direct3DVersion = Direct3DVersion.AutoDetect;

    CaptureConfig cc = new CaptureConfig()
    {
    Direct3DVersion = direct3DVersion,
    ShowOverlay = true
    };

    processId = process.Id;
    _process = process;

    var captureInterface = new CaptureInterface();
    try
    {
    _captureProcess = new CaptureProcess(process, cc, captureInterface);
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }


    break;
    }
    System.Threading.Thread.Sleep(10);

    if (_captureProcess == null)
    {
    MessageBox.Show("В списке процессов не найдень: '" + exeName + "'");
    }
    }

    private void button2_Click(object sender, EventArgs e)
    {
    _captureProcess.CaptureInterface.DisplayInGameText("Текст который надо показат в чужом окне", 20, 20, 20); // цыферки положения размер
    }

    Код целиком не мой, взял с интернета, (http://spazzarama.co...ct3d-api-hooks/ (имя автора не нашел))

  5. А просто на экран можно рисовать?

    А зачем на экран рисовать? Я что то не понимаю наверно...

    Ничего по библиотеке не скажу, т.к. очень лень. Могу дать мелкий совет. Перед тем как рисовать что-то в чужой игре на C# желательно пройти 4 этапа

    1. Рисовать в своем окне на C++

    2. Рисовать в чужом окне на C++

    3. Рисовать в чужом окне на C# переписав программу на C++.

    4. Разобраться в библиотеке, которую вы хотите прикрутить

    Те кто предпочитают С++, то этим счастливчикам повезло. Им не нужны пункты 3 и 4.

    Идея понятно, попробую осилить.

  6. Laziz, зачем тебе этот плеер? Вряд ли от него какая-то прибыль будет

    Если есть желание, то попробуй поставить Unity3d фришную и придумай себе игру на Андроид на Гугл Плей (или Yahoo), ну или под Windows (с возможность платежей sms через робокассу и вывод с пейпал). Писать будешь на любимом C#.

    Встраивай рекламу и

    . Может получится и прибыль будет.

    Особенно интересно многопользовательские игры (посмотри например на игру "Трагедия Белок", 2д игра, а донатят там постоянно). Логику удаленного сервера может выполнять сервис яхоо геймс. Есть тариф бесплатный на определенное количество пользователей

    Знаю что плеер никому не нужно и пользы тоже нет. Просто другого занятие себе не нашел.

    За идею огромная спасибо, с этим обязательно буду заниматься.

    Совмещать приятного с пользой - это куул ), да и C# - то что надо.

    • Плюс 1
  7. ооо все таки сделал ) молодец ) проверил плеер 2 норм пашет ))) еще эквалайзер сбоку скачает)

    а первый тупит до ужаса

    Спасибо за проверку, но я разобрался уже. (Для WPF приложения нужны не только сам *.exe но еще ряд других файлов в сборке)

    Да первый и меня разочаровал, в библиотеке Naudio оказывается мала возможностей и пришлась несколько потоков создавать. А потоки быстро не останавливаются.

    • Плюс 1
  8. Все значения заранее искал через CE.

    искал значения за какую расу играю.

    Получил тип: byte

    А значения расы меняется от 0 до 4 (в игре 5 рас)

    если тип 1-байт то конвертировать не надо. Скорее всего не тот адрес читаешь

  9. Как я понял, значения size отвечает за тип значения который мы читаем.

    size отвечает за количество байтов который надо читать. К примеру: если на CheatEngine`е посмотреть в память, "4 байт" и "float" обе четыре байта занимает в памяти.


    //exp - 4 byte
    address = 0x00800150;
    offsets = new int[] { 0x38, 0x4, 0x0, 0x3a4 };
    size = 4;
    ReadBytes(address, offsets, size);
    exp.Text = Convert.ToString(result);

    //race - 1 byte
    address = 0x00800150;
    offsets = new int[] { 0x38, 0x4, 0x0, 0x11 };
    size = 1;
    ReadBytes(address, offsets, size);

    exp - читает правильно

    race - выдает отрицательные значения, Как исправить?

    а тут не совсем понял вопрос. подозреваю, тебе надо переконвертировать на нужный тип и все.

  10. Вид, имхо, бред полный. Дизайн любой программы должен на интуитивном уровне подсказывать ее предназначение. То есть, если это плеер, то кнопки в нем должны быть выполнены в стиле, привычном всем с детства.

    Пожалуй ты прав, к томе же никуда не могу пристроит полосу прокрутки.

    Поменяю вид и выложу заново и исходник тоже выложу (кто то просил).

  11. Плеер для ВКонтакте:

    UPD: (внешний вид сделал обычным)

    ________________________________________

    Этот плеер создана с помощью библиотеки Naudio: (Этот пример на любителя, с исходным кодом)

    Исходник на VS 2010 C#

    PleerVKontakte.7z

    Плеер (.NET 4.0)

    VKPlayer.7z

    Скриншот

    post-8512-0-06826300-1399615195_thumb.jp

    _______________________________________

    Windows Presentation Foundation

    Этот плеер создана с помощью библиотеки BASS.NET:

    Плеер (WPF NET 4.0)

    VK Player WPF.7z

    post-8512-0-26286200-1400142974_thumb.jp

    Плеер пока сырой, много чего надо делать.

    Если что, пишите об ошибках и предложениях

    P.S. В многих форумах пишет что библиотек BASS.NET хуже чем Naudio, но мне больше нравиться BASS.NET. Во первых, сразу воспроизводить не дожидаясь полного загрузки с интернета. Во вторых быстрее.

    • Плюс 1
  12. 2 суток сижу над следующей проблемой, не получается организовать запись своего значения в память.

    Имеется (пример):


    Textbox.text="50000"; //значение денег который я получил из игры

    //Я хочу ввести свое значение, допустим 250000

    Textbox.text="250000"; //ввели значение через форму

    Как теперь это значение перевести в hex и записать в массив byte[], для последующей записи в память через WriteProcessMemory?

    из своих кодов взял, думаю разберешься


    if (comboBox1.Text == "4 Байт")
    {
    Int32 int32Z = Int32.Parse(writeString);
    byte[] write = BitConverter.GetBytes(int32Z);
    writeMetod(write);
    }
    if (comboBox1.Text == "1 Байт")
    {
    Int16 intZ = Int16.Parse(writeString);
    byte[] write = BitConverter.GetBytes(intZ);
    writeMetod(write);
    }
    if (comboBox1.Text == "2 Байт")
    {
    short intZ = short.Parse(writeString);
    byte[] write = BitConverter.GetBytes(intZ);
    writeMetod(write);
    }
    if (comboBox1.Text == "8 Байт")
    {
    Int64 intZ = Int64.Parse(writeString);
    byte[] write = BitConverter.GetBytes(intZ);
    writeMetod(write);
    }
    if (comboBox1.Text == "Float")
    {
    float intZ = float.Parse(writeString);
    byte[] write = BitConverter.GetBytes(intZ);
    writeMetod(write);
    }
    if (comboBox1.Text == "Double")
    {
    double intZ = double.Parse(writeString);
    byte[] write = BitConverter.GetBytes(intZ);
    writeMetod(write);
    }

  13. Адрес и поинтеры значения опыта:


    address = 0x00800150;
    offsets = new byte[] { 0x38, 0x4, 0x0, 0x3a4};

    Выдает ошибку на массиве byte: 0x3a4

    byte принимаяет от 0 до 255 (десятичный) или 0 до FF (Hex)

    а массив смещение хранит лучше в Int.

    к примеру


    address = 0x00800150;
    int[] offsets = new int[] { 0x38, 0x4, 0x0, 0x3a4};

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

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

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