Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 18.08.2013, 16:57   #1
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Эзотерическое программирование ч.2 via EndScene Hook

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

Для начала нам потребуется SlimDX с [Ссылки могут видеть только зарегистрированные пользователи. ], а так же [Ссылки могут видеть только зарегистрированные пользователи. ] из моего репозитория.

Теперь берем небольшой класс который поможет нам в дальнейшем
Код:
using System;
using System.Runtime.InteropServices;
using SlimDX.Direct3D9;
using WhiteMagic;

namespace D3DHook
{
    public static class Helper
    {
        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
        private delegate int Direct3D9EndScene(IntPtr device); //Создали делегат с подходящей сигнатурой

        private static readonly object _frameLock = new object();
        public static event EventHandler<D3DEventArgs> OnFrame; //Событие кторое будет срабатывать при каждом срабатывании хука

        private static Direct3D9EndScene _endSceneDelegate; //Экземпляр делегата, он будет вызывать оригинальную функцию

        private static IntPtr EndScenePointer = IntPtr.Zero; //Указатель на оригинальную функцию

        const int VMT_ENDSCENE = 42; //Смещение в VMTable

        public static void Initialize()
        {
            using (var d3d = new Direct3D())
            {
                using (var tmpDevice = new Device(d3d, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing, new PresentParameters() { BackBufferWidth = 1, BackBufferHeight = 1 }))
                {
                    EndScenePointer = Magic.Instance.GetObjectVtableFunction(tmpDevice.ComPointer, VMT_ENDSCENE); //Получаем указатель на оригинальную функцию
                }
            }

            _endSceneDelegate = Magic.Instance.RegisterDelegate<Direct3D9EndScene>(EndScenePointer); //Получаем делегат из указателя
            Magic.Instance.Detours.CreateAndApply(_endSceneDelegate, new Direct3D9EndScene(EndSceneHook), "D9EndScene"); //Создаем и применяем хук 
        }

        public static void Dispose()
        {
            Magic.Instance.Detours["D9EndScene"].Dispose();
        }

        private static int EndSceneHook(IntPtr device) //Обработчик хука прокидывает событие дальше, передавая указатель на устройство
        {
            lock (_frameLock)
            {
                if (OnFrame != null)
                    OnFrame(null, new D3DEventArgs(device));
            }
            return (int)Magic.Instance.Detours["D9EndScene"].CallOriginal(device); //Вызов оригинальной функции
        }
    }

    public class D3DEventArgs : EventArgs
    {
        public IntPtr Device;
        public D3DEventArgs(IntPtr device)
        {
            this.Device = device;
        }
    }
}
В принципе этого достаточно для реализации хука, теперь можно написать простое приложение
Код:
using System;
using System.Drawing;
using System.Windows.Forms;
using SlimDX;
using SlimDX.Direct3D9;

namespace D3DHook
{
    public partial class Form1 : Form
    {
        private string _input = string.Empty;

        public Form1()
        {
            InitializeComponent();
            Helper.Initialize();

            Helper.OnFrame += client_Frame;
        }

        private void client_Frame(object sender, D3DEventArgs e)
        {
            if (string.IsNullOrEmpty(_input)) return;

            using (Device device = Device.FromPointer(e.Device))
            {
                
                using (var font = new SlimDX.Direct3D9.Font(device, 30, 0, FontWeight.Bold, 0, false, CharacterSet.Default,
                    Precision.TrueType, FontQuality.Antialiased, PitchAndFamily.DontCare, "Arial"))
                {

                    font.DrawString(null, _input, new Rectangle(10, 10, 500, 30), DrawTextFormat.Top | DrawTextFormat.Left, new Color4(Color.Red));
                }
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Helper.Dispose();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _input = textBox1.Text;
        }
    }
}
Компилируете его как x86 приложение, и инжектите как было описано в первой части, или можете воспользоваться инжектором приложенным ниже

Исходники проекта [Ссылки могут видеть только зарегистрированные пользователи. ]
Инжектор [Ссылки могут видеть только зарегистрированные пользователи. ]
инжектор+пример [Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]

upd1: поправил код обработчика client_Frame, убран ненужный объект Sprite fontSprite
________________
Talk is cheap. Show me the code
— Linus Torvalds

Последний раз редактировалось Yukikaze; 19.08.2013 в 00:00.
  Ответить с цитированием
7 пользователя(ей) сказали cпасибо:
danil7496 (21.08.2013), крайслер (18.08.2013), Joker (22.08.2013), Nickitee (18.08.2013), object (18.08.2013), Sinyss (18.08.2013), warl0ck (18.08.2013)
Старый 24.07.2014, 23:19   #2
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Эзотерическое программирование ч.2 via EndScene Hook

знаю темка старая, но все же. писал на похожей библиотеке SharpDX , и вот интересен вопрос, возможно ли сделать без лишних инжекторов, просто чтобы программа сама себя использовала так сказать
  Ответить с цитированием
Старый 25.07.2014, 01:27   #3
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Эзотерическое программирование ч.2 via EndScene Hook

Если только программа сама будет инжектором, могу поделится сорсами инжектора, может чем-то помогут
injector-src.zip
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Старый 25.07.2014, 05:40   #4
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: Эзотерическое программирование ч.2 via EndScene Hook

Зачем хукать функцию, если можно рисовать на окне поверх другого окна.
Один минус - наличие оконного режима.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 25.07.2014, 11:53   #5
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Эзотерическое программирование ч.2 via EndScene Hook

Цитата:
Зачем хукать функцию, если можно рисовать на окне поверх другого окна.

так можно было бы и через Label выводить обычный, и позицию формы делать по координатам нужного окна

Цитата:
Если только программа сама будет инжектором, могу поделится сорсами инжектора

а я сижу через ILSpy ковыряю ))


P.S. Я только начал ковыряться в Direct на C# , с чего будет лучше начать? есть ли преимущество у SharpDX перед SlimDX если знаете? а то туториалов на него не найти
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2

Последний раз редактировалось Ginrey; 25.07.2014 в 12:22.
  Ответить с цитированием
Старый 25.07.2014, 16:53   #6
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Эзотерическое программирование ч.2 via EndScene Hook

SharpDX шустрее, да и разрабатывается под присмотром мелкомягких, а SlimDX вроде с 2012 года обновлений не получал
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Старый 25.07.2014, 18:50   #7
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Эзотерическое программирование ч.2 via EndScene Hook

а где тогда можно почитать про его функции и их использование, а то их куча, а как пользоваться фиг найдешь, нашел только малую часть
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Старый 26.07.2014, 01:41   #8
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Эзотерическое программирование ч.2 via EndScene Hook

С доков с офф сайта уже мало? [Ссылки могут видеть только зарегистрированные пользователи. ]
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
Старый 26.07.2014, 17:50   #9
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
 
По умолчанию Re: Эзотерическое программирование ч.2 via EndScene Hook

попробовал используя SharpDX повторить ваш код, а точнее просто вырезал из вашего кода все использования SlimDX и поставил функции из SharpDX , при попытке инжекта окно игры просто зависает
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Статья] Эзотерическое программирование ч.1 Yukikaze C# 2 20.10.2014 15:06
[Программа] Эзотерическое программирование ч. 1.5 Yukikaze C# 11 09.09.2014 00:35
[Куплю] DC hook На пуджа [H]WM [W] Dragonclaw hook Vaf Другие игры 0 02.03.2013 21:11
Программирование Mongol Вопросы и ответы, обсуждения 4 08.09.2011 21:02
[Помогите!] Программирование Destroyer74 Общение и обсуждение 9 13.08.2010 17:46

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 08:30.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net