Тема: Warden
Показать сообщение отдельно
Старый 28.03.2011, 14:09   #84
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от MaS0n Посмотреть сообщение
Спасибо, да, походу оно все так и есть) ну проверка сложная для самоделки, да и модули с ней редкость

Последние вопросы
*** скрытый текст ***
Для этого и используется относительный адрес в проверках, а не абсолютный.

Код:
Console.Write("Enter file name: ");
var file = Console.ReadLine(); // имя DLL

Process p = null;
var baseAddr = IntPtr.Zero;

var wow = Process.GetProcessesByName("Wow");

if (wow.Length == 0)
{
    Console.WriteLine("Wow isn't running");
    return;
}
else
{
    p = wow[0];
    foreach (ProcessModule module in p.Modules)
    {
        if (module.ModuleName.ToLowerInvariant() == file.ToLowerInvariant())
        {
            baseAddr = module.BaseAddress;
            Console.WriteLine("Name: {0}, EP: {1:X8}, base: {2:X8}, EP offset: {3}", module.ModuleName, module.EntryPointAddress.ToInt32(), module.BaseAddress.ToInt32(), module.EntryPointAddress.ToInt32() - module.BaseAddress.ToInt32());
            break;
        }
    }

    if (baseAddr == IntPtr.Zero)
    {
        Console.WriteLine("Module {0} not found in Wow process!", file);
        return;
    }
}

Console.Write("Enter start: ");
var start = Convert.ToInt32(Console.ReadLine()); // относительный адрес

Console.Write("Enter size: ");
var size = Convert.ToInt32(Console.ReadLine());  // размер блока данных

using (var pm = new ProcessMemory(p))
{
    var addr = (uint)(baseAddr.ToInt32() + start);
    var buffer = pm.Read(addr, size);
    Console.WriteLine("Buffer: {0}", buffer.ToHexString());
    GetHash(buffer);
}

private static string GetHash(byte[] bytes)
{
    var random = new Random();

    var seed = new byte[4];

    random.NextBytes(seed);

    var hmac = new HMACSHA1(seed);
    var hash = hmac.ComputeHash(bytes);

    Console.WriteLine("Seed: {0}", seed.ToHexString());
    Console.WriteLine("SHA1: {0}", hash.ToHexString());

    return seed.ToHexString() + hash.ToHexString();
}
Как именно используются функции, адреса которых идут в 0x03 пакете я не разбирался, но врядли можно так выполнить произвольную функцию...
TOM_RUS вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
MaS0n (28.03.2011), Ranger (18.06.2011)