Цитата:
Сообщение от 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 пакете я не разбирался, но врядли можно так выполнить произвольную функцию...