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

Рекомендуемые сообщения

Здравствуйте! Помогите пожалуйста перевести вот этот код на язык C#


const int size = sizeof(pattern) / sizeof(pattern[0]);
for(int j=0; j<size; j++)
{
if ((pBuffer[i+j] ^ pattern[j]))
{
break;
}
else
{
if(n==size-1)
{
address = (LPVOID)((DWORD)mbi.BaseAddress+(DWORD)i);
WriteProcessMemory(GameHandle,(LPVOID)(address), pattern,6,0);
}
}
}

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Я хочу что-бы трейнер считывал найденый регион памяти и потом в нем искал сигнатуру.

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

Вот такой код:


static void memsrc ()
{
Process hackProc = Process.GetProcessesByName("WindowsFormsApplication1.vshost")[0];
MEMORY_BASIC_INFORMATION mbi = new MEMORY_BASIC_INFORMATION();
SYSTEM_INFO si = new SYSTEM_INFO();
GetSystemInfo(ref si);
byte[] pattern = new byte[] { 0x2A, 0x00, 0x00, 0x0F, 0xB6, 0x87, 0x81, 0x02, 0x00, 0x00, 0x00, 0x00 };
uint startMem = 0x0;
IntPtr nRead = IntPtr.Zero;
VirtualQueryEx(hackProc.Handle, (IntPtr)startMem, ref mbi, Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION)));
byte[] buffer = new byte[(int)mbi.RegionSize];
ReadProcessMemory(hackProc.Handle, mbi.BaseAddress, buffer, (uint)mbi.RegionSize, ref nRead);

}

Ссылка на комментарий
Поделиться на другие сайты

Поищи у меня в видеоуроках (ссылка у меня в подписи) - я писал сканер сигнатур на решётках. Там достаточно медленный и сырой алгоритм, но простой и вполне рабочий.

Ссылка на комментарий
Поделиться на другие сайты

Получился вот такой код, но он что-то не работает.


public void memsrc()
{
Process hackProc = Process.GetProcessesByName("WindowsFormsApplication1.vshost")[0];
MEMORY_BASIC_INFORMATION mbi = new MEMORY_BASIC_INFORMATION();
SYSTEM_INFO si = new SYSTEM_INFO();
GetSystemInfo(ref si);
byte[] pattern = new byte[] { 0x2A, 0x00, 0x00, 0x0F, 0xB6, 0x87, 0x81, 0x02, 0x00, 0x00, 0x3D };
var startMem = 0;
var counter = 0;
startMem = (int)mbi.BaseAddress;
IntPtr nRead = IntPtr.Zero;
VirtualQueryEx(hackProc.Handle, (IntPtr)startMem, ref mbi, Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION)));
byte[] buffer = new byte[(uint)mbi.RegionSize];
ReadProcessMemory(hackProc.Handle, (IntPtr)startMem, buffer, (uint)mbi.RegionSize, ref nRead);
if (pattern.Length <= buffer.Length)
{
for (var i = 0; i < buffer.Length; i++)
{
if (buffer[i] == pattern[0])
{
for (var j = 0; j < pattern.Length; j++)
{
if (buffer[i + j] == pattern[j])
{
counter++;
if (counter == pattern.Length)
{
int result = i + startMem;
toolStripTextBox2.Text = result.ToString();
return;
}
}
}
}
}
}
}

Ссылка на комментарий
Поделиться на другие сайты

Получился вот такой код, но он что-то не работает.


public void memsrc()
{
Process hackProc = Process.GetProcessesByName("WindowsFormsApplication1.vshost")[0];
MEMORY_BASIC_INFORMATION mbi = new MEMORY_BASIC_INFORMATION();
SYSTEM_INFO si = new SYSTEM_INFO();
GetSystemInfo(ref si);
byte[] pattern = new byte[] { 0x2A, 0x00, 0x00, 0x0F, 0xB6, 0x87, 0x81, 0x02, 0x00, 0x00, 0x3D };
var startMem = 0;
var counter = 0;
startMem = (int)mbi.BaseAddress;
IntPtr nRead = IntPtr.Zero;
VirtualQueryEx(hackProc.Handle, (IntPtr)startMem, ref mbi, Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION)));
byte[] buffer = new byte[(uint)mbi.RegionSize];
ReadProcessMemory(hackProc.Handle, (IntPtr)startMem, buffer, (uint)mbi.RegionSize, ref nRead);
if (pattern.Length <= buffer.Length)
{
for (var i = 0; i < buffer.Length; i++)
{
if (buffer[i] == pattern[0])
{
for (var j = 0; j < pattern.Length; j++)
{
if (buffer[i + j] == pattern[j])
{
counter++;
if (counter == pattern.Length)
{
int result = i + startMem;
toolStripTextBox2.Text = result.ToString();
return;
}
}
}
}
}
}
}

Если говорить честно, то код ужасный.

Ссылка на комментарий
Поделиться на другие сайты

Ага и не работает, поправьте что нек так пожалуйста)

Тебе писали что C# с C++ никогда не сравнится. А ты играешь ещё и по правилам C++ на C#, без знаний архитектуры обоих языков.

Для начала тебе бы не помешало представлять как работает сканер сигнатур, и если ты уж любитель фреймворка такой, то используй regex.

Ссылка на комментарий
Поделиться на другие сайты

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

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

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