Загрузка...

[C#] Обманка для реверсеров, вызов метода по хукам

Тема в разделе C# создана пользователем r3xq1 20 дек 2020. 537 просмотров

  1. r3xq1
    r3xq1 Автор темы 20 дек 2020 https://t.me/DarkSoft_Extra 119 27 июл 2018
    Итак, создаем проект, я взял на пример консоль, там не важно.
    В настройках сразу включили возможность юзать unsafe (небезопасный код)

    У нас есть два класса:
    Код
    namespace inline_hook
    {
    public static class Original
    {
    public static void Write()
    {
    Console.WriteLine("Оригинальная функция.");
    }
    }

    public static class ToHook
    {
    public static void Write()
    {
    Console.WriteLine("Дубликат.");
    }
    }
    }
    Задача хука в следующем: при вызове
    Код
    Original.Write();
    должна сработать
    Код
    ToHook.Write();
    как это устроить?
    Вот так:
    Код
    namespace inline_hook
    {
    using System;
    using System.Reflection;

    internal static class Program
    {
    [STAThread]
    public static void Main()
    {
    MethodBase original = typeof(Original).GetMethod("Write", BindingFlags.Static | BindingFlags.Public);
    MethodBase hooked = typeof(ToHook).GetMethod("Write", BindingFlags.Static | BindingFlags.Public);

    Original.Write();
    Hook.HookFunction(original, hooked);
    Original.Write();

    Console.ReadKey();
    }
    }

    public static class Hook
    {
    public static unsafe void HookFunction(MethodBase Original, MethodBase HookClass)
    {
    if (Original == null || HookClass == null) { return; }

    IntPtr functionPointer = Original.MethodHandle.GetFunctionPointer(),
    functionPointer2 = HookClass.MethodHandle.GetFunctionPointer();

    byte* ptr = (byte*)functionPointer.ToPointer();
    int num = (int)functionPointer.ToPointer();
    int num2 = (int)functionPointer2.ToPointer();

    *ptr = 0xE9; // E9 = _asm jmp - безусловный прыжок на другую область памяти.

    *(int*)(ptr + 1) = num2 - (num + 5); // запись адреса для прыжка
    }
    }
    }
    [IMG]

    Оригинальная функция - обман для человека который хочет крякнуть твое ПО, а в дубликате - весь нужный тебе метод.
    Представим ситуацию: выложил ты программу в сеть, сделал привязку к ПК, и назвал стоимость активации.
    Хитрый человек - платить за удобство предоставляемое программой естественно не захочет и попытается что-то предпринять какие то меры, разкалупал но твою программу, видит, вызов какой то функции, допустим связанной с лицензией, название которой аппетитно звучит, переходит, а там белиберда несвязная.
    Когда дубликат, в свою очередь, выполняет нужные действия.
    В масштабных проектах, с кучами кода, такие махинации в виде хуков, сплошное издевательство.
     
  2. dandlmorrow
    dandlmorrow 23 дек 2020 87 11 янв 2020
    где то я это уже видел...
     
  3. Pabloo_T
    Pabloo_T 30 дек 2020 610 24 июн 2016
    r3xq1, Реверсер наверное не умеет ставить бряк и делать отладку пошагово с заходом?
     
  4. CoderVir
    подойдёт для снижения детектов.
     
  5. TheWall_inactive2650523
    TheWall_inactive2650523 7 сен 2021 Waiting for the worms to come 52 23 сен 2019
    Полезно, спасибо
     
  6. Yotic
    Yotic 8 сен 2021 Ебашу на C# всё что захотите(Разноцветное) 43 13 янв 2021
    visual studio 2010?????
     
Загрузка...
Top