1 Востаннє редагувалося FakiNyan (13.08.2013 21:43:45)

Тема: C# Як запихнути якусь інформацію в вікно іншої програми?

Привіт. Знаєте, є така прога  - Mumble, так ось вона має функцію, котра дозволяє бачити певну інформацію в той час, коли граєш в якусь гру. Ця інформація відображаєтся в вікні гри поверх GUI та всього, що є в грі. Ну ви зрозуміли. Як зробити подібну штуку на C#, якщо взагалі таке можливо.

Post's attachments

ss (2013-08-13 at 03.30.05).jpg 477.08 kb, 312 downloads since 2013-08-13 

2

Re: C# Як запихнути якусь інформацію в вікно іншої програми?

Цей мумбл? Якщо так, то залишається лише зазирнути до джерельного коду, бо відкрите воно.

3 Востаннє редагувалося FakiNyan (17.08.2013 11:44:13)

Re: C# Як запихнути якусь інформацію в вікно іншої програми?

Очі.завидющі написав:

Цей мумбл? Якщо так, то залишається лише зазирнути до джерельного коду, бо відкрите воно.

ой блін, там стільки тисяч строк коду і все таке, а я думав, що є якась проста функція типу
VstavitiKartinkuUVikno(string path,int pid); хДД
а там якісь хуки, перехват directx. Я-то знайшов на ютубі, як чювак пише такий хук, і навіть переписав весь той код, суть в тому, щоб створенну dll інжектити в процесс гри, в котру тре шось запихнути. Але в мене це не спрацювало і хз чому. В коді використовувався якись покажчик direct3D приладу і ідентифікатор сцени. Так от я хз, що це за адрес, може він у всіх різний типу. Ось той шматочок коду, він на с++

#include "Main.h"
#include "DXhook.h"
#include <detours.h>

EndScene tEndScene;

bool APIENTRY DLLMain (HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
    if(dwReason == DLL_PROCESS_ATTACH)
    {
        LPDIRECT3DDEVICE9 pDevice;
        pDevice = (LPDIRECT3DDEVICE9)*(int*)0x21BEC28; //0x21BEC28 - покажчик d3d-приладу
        DWORD* pvTable = (DWORD*)*(DWORD*)pDevice;
        tEndScene = (EndScene)DetourFunction((PBYTE)pvTable[42], (PBYTE)&Dfunctions.temporary_EndScene); // 42 - індекс EndScene
    }
    return true;
}

4

Re: C# Як запихнути якусь інформацію в вікно іншої програми?

Справа в тому, що вказівник може не туди вказувати, бо навіть базова адреса завантаження ехе може відрізнятися. Треба сканувати пам'ять для такого діла. А з інжектом длл я вам допоможу. Спершу гляньте для якої  архітектури ваша гра? (х86/х86-64) Бо треба, щоб длл, що інжектиться, із грою була однієї архітектури.

5

Re: C# Як запихнути якусь інформацію в вікно іншої програми?

Очі.завидющі написав:

Справа в тому, що вказівник може не туди вказувати, бо навіть базова адреса завантаження ехе може відрізнятися. Треба сканувати пам'ять для такого діла. А з інжектом длл я вам допоможу. Спершу гляньте для якої  архітектури ваша гра? (х86/х86-64) Бо треба, щоб длл, що інжектиться, із грою була однієї архітектури.

все однієї архітектури, 32. там може бути проблема в діректІксі, в мене 10, а хук для 9, я зробив ще одну длл, котра піпікає і малює, так от вона нічо не малює, а піпіканя є.

6

Re: C# Як запихнути якусь інформацію в вікно іншої програми?

І знову АПІ монітор вам в поміч. Хоча в дірект ікс я нічого не тямлю, але пропоную подивиться на послідовність команд малювання(особли ініціалізації оточення дірект ікс), щоб зрозуміти чого йому не вистачає.