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

SiriusED

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

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

  • Посещение

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

    1

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

  1. Все таки проблема во общем не в передаче данных, через StringBuilder все нормально передается, но проблема получается черт знает в чем даже, во общем вот код:

    extern "C" __declspec(dllexport) void SetOptions(char* string);#pragma data_seg("sms")char* viewString = "Test1";#pragma data_seg()#pragma comment(linker, "/section:sms,RWS")extern "C" __declspec(dllexport)void SetOptions(char* string = "Test1"){	MessageBox(NULL, string, "FromDll", 0); // Выводит правильно	viewString = string;	MessageBox(NULL, viewString, "FromDll", 0); // Выводит правильно тоже...}// А вот проблема скорее всего вот тут:HRESULT WINAPI hookedEndScene(LPDIRECT3DDEVICE9 pDevice){	RECT pRect = RECT{ 50, 50, 150, 150 };	// Вот скорее всего вот в этих строках создания и вывода текста.	D3DXCreateFont(pDevice, 16, 0, FW_NORMAL, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PALETTE | FF_DONTCARE, "Arial", &font);	font->DrawText(NULL, viewString, -1, &pRect, 0, D3DCOLOR_ARGB(255, 230, 230, 230));}

    Во общем гляньте в чом может быть косяк?

  2. Во общем почитал, написал код и работает все просто замечательно. но как всегда есть проблема...

    Короче как из c# передать char* в dll'ку?

    пробовал передавать: string, StringBuilder, IntPtr ничего не работает, на одних зависает игра, на других кракозябры вместо текста...

    Подскажите как нужно писать в коде(c#) что б передать строку(char*) в dll'ку.

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

    Имеешь введу там реализовано тоже через "shared memory section"?

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

    Во общем понятно, буду копать инфу об "shared memory section", если что еще спрошу по этой теме.

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

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

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

  5. Ага, вот теперь понял. Ну как с этой секцией работать думаю найду примеры в инете что б вас уже не доставать, если что не пойму то еще спрошу.

    И так для справки, это единственный способ взаимодействия в заинжекченной дллкой?

  6. Так, правильно ли я понял, есть игра, я инжектю в нее длл которая создает "shared memory section" и потом я из своего совсем левого приложения программно могу что-то записать в эту секцию и моя заинжекченная дллка это сможет прочесть и заюзать да?

  7. Во общем есть dll'ка, она инжектится к D3D9 игре и через D3D хук, выводит там текст "000" по координатам.

    Вопрос такой: каким образом я могу изменить этот текст и координаты из своего приложения что б dll'ка не выводила один и тот же текст а на пример я мог его как то задавать непосредственно из своего приложения? Или такое сделать нельзя?

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

    Но все равно иногда что б прямо наверняка уже закрепить инфу надо спросить у профи :) Ну а так ищу инфу на забугровых ресурсах нашел несколько форумов а один так во обще чисто по директу и хукам по нему... так что по техоньку вьезжаю в тему...

    Просто не понимая ничерта очень сложно так вот сразу разобратся в терминах итд, А обычно все видосы и мануалы делаются что б показать как умело и легко их авторы умеют делать ту или иную вещь, но еденицы из них перед написанием кода объясняют логику работы и даже рисуют картины(пример: Keng) что б не знающий человек понял не как писать код а каким образом это все работает, вот этим людям огроменное спасибо, просто от души.

    Ну и по теме еще, во общем на данный момент написал dll на C++ которая инжектится в D3D9 приложение и выводит там заданный текст по координатам. И такой вопрос, а как мне эти значения изменить, на пример что б значение выводимой строки не было статическим а данные брались от куда то и выводились, ну если грубо так сказать то как мне управлять этой dll'кой то? Одно что я придумал пока что это читать данные из файла или регистров, но это же не то я уверен...

    Инфы даже пока по этому не искал так что это стандартная тема и полно инфы в гугле извеняйте..

  9. Да, подменять d3d9.dll мне предлагали тоже на одном форуме...

    Ну а так в принципе понял все кроме "4. Загрузчик для программы.". И как вижу оригинального способа нету в любом случае нужно сначала узнавать версию DX, и потом уже исходя из этой информации искать адрес устройства. Ну в таком случае 5й вариант так ниче выглядит... Просто хочу сделать информен аля RivaTuner overlay что б его было видно во всех играх независимо от версии используемых ими DX.

    И да я тоже так думал что статик адресс был запилен именно под ту игру что он демонстрировал.

  10. Да, все верно Вы поняли. Я просто тут сейчас раздупляюсь с темой DX hook'а, И нашел вот этот вот код, но он почему-то не работает, ну вернее я знаю почему он не работает а именно потому, что тут указатель на девайс задается статически "pDevice = (PDIRECT3DDEVICE9) *(int*) 0x21BEC28; ". Черт знает как у того чувака он работал, может быть он под его игру суто его подобрал просто я хз.

    Ну одним словом я заменил эту часть кода на поиск адреса девайса по паттерну(ну который в ольке делается), паттерн тоже нашел в инете кстати. ну и во общем после этого все заработало. И я на конец то хоть чуток догнал каким образом это все работает, а надо было просто найти рабочий код и прочесть его а не читать всякие гамнотуториалы...

    Во общем на счет функции спасибос, попробую все равно этот способ.

    Ну и еще пару вопросов по этой теме:

    1. Правильно ли я понял что существует всего лишь два способа найти адрес DX девайса, а именно через создание своего девайса в нужном процессе, ну и собственно по паттерну в d3d модуле нужного процесса или есть еще какие способы?

    2. И я вот сейчас сделал поиск по паттерну для d3d9 а есть у кого для d3d10 и 11 может паттерны, очень был бы признателен за них.

  11. Собственно сабж.

    Вот код на пример:


    bool APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
    {
    if (dwReason == DLL_PROCESS_ATTACH)
    {
    LPDIRECT3DDEVICE9 pDevice;
    pDevice = (PDIRECT3DDEVICE9) *(int*) 0x21BEC28;
    If (pDevice is D3DDevice) // Типа вот так
    }
    }

  12. Ну B&S'ка и CS 1.6 на d3dx9.dll работают вроде бы... Ну а по остальным возможно и да, особенно NFS Rivas точно не на d3dx9... Ну а так то по тебе я нашел короче какойт-то код, который ищет d3dDevice не по таблице а по сигнатуре, и вот он как раз нормально во всех играх работает(кроме NFS Rivas). Сейчас буду его ковырять что б оставить только кусок кода который выводит текст, а то там что-то типа менюшки при чом даже функциональная. И кстати код на C++..

  13. Да да, все нагуглил и сделал, во общем dll'ка скомпилировалась но тольку просто ноль, после инжекта ничего нету.. Креша нету это норм, но и текста нету тоже.. Хотя на видео из которого я этот код и взял все норм работало... Попробую покопаться в коде, надо хоть посмотреть перехватывает ли во обще endSceen..

  14. А вы вот мне пишете как надо сделать это у вас все нормально работает мой проэкт с вашими изменениями?

    А то я вот записал и так и так и опять ошибки...

    Error 3 error LNK1281: Unable to generate SAFESEH image. ...\RenderD3DText\Release\RenderD3DText.dll RenderD3DText

    Error 1 error LNK2026: module unsafe for SAFESEH image. ...\RenderD3DText\RenderD3DText\detours.lib(detours.obj) RenderD3DText

    Error 2 error LNK2026: module unsafe for SAFESEH image. ...\RenderD3DText\RenderD3DText\detours.lib(disasm.obj) RenderD3DText

  15. Да, если записать так тогда вылазит две ошибки:

    Error 1 error C2440: 'type cast' : cannot convert from 'HRESULT (__stdcall DirectFunctions::* )(LPDIRECT3DDEVICE9)' to 'PBYTE' ....\RenderD3DText\DllMain.cpp 13 1 RenderD3DText

    Error 2 error C2660: 'DetourFunction' : function does not take 1 arguments ....\RenderD3DText\DllMain.cpp 13 1 RenderD3DText

  16. Во общем надыбал d3d хук, по статье он должен быть рабочий(выводить текст) на 100%, но у меня ошибка:

    "error C2373: 'DirectFunctions::temporaly_EndScene' : redefinition; different type modifiers"

    Посмотрите код, в чом может быть проблема, а то вроде все нормально и только одна вот эта ошибка все портит. В плюсах опыта просто ноль что б самому разобратся, подозреваю это из-за какой нить настройки которых я не знаю вообще...

    http://webfile.ru/09...20cf44a94339272

  17. Не ну в принципе на C++ тут даже видео есть как хукать EndScene в директиксе, но я думал есть уже готовые решения под шарп типа что б в две строчки можно было рисовать в приложения DirectX...

    Не ужели придется самому пилить dll на плюсах и потом использовать в шарпе..

    Или тут еще почитал про EasyHook библиотеку, пока что гуглю пример, но если у кого есть ссылка на пример ее работы киньте.

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

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

  19. А есть у кого ссылка на именно пример рабочий, а то я уже просто обгуглился ни в доках ни в гугле не могу найти рабочий пример использования или хотя бы даже логики использования данной либы... По ходу должно же быть все просто регнул девайс, регнул текст и установил его параметры и потом DrawText(); но не работает...

  20. Подскажите, есть ли возможно уже готовая библиотека для того что б просто вывести заданный текс в окне игры по координатам относительно этого окна?

    Имею введу что то типа:


    c#:
    DllImport функции из библиотеки. Для примера функция будет RenderText(IntPtr pHandle, string text, int coordX, int coordY);

    Ну и потом простое ее использование в c#.

  21. Инглиш так и не выучил толком что б читать свободно( И знаю что это вселенская печаль для меня..

    Ну на пальцах вроде догнал, надо еще догнать в коде и реверсинге и будет во обще норм. Пока разбираюсь по техоньку с адресами памятью, пространствами, читаю как это во обще все работает и дизасемблер учу, короче очень все интересно и думаю через месяц уже со мной можно будет говорить адекватным языком)

    Закончу разбираться с этим буду пробовать хуки и отпишусь о результате.

    На разе спасибос за инфу, реально форум у вас, конечно, эпичный.

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

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

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