Перейти к содержанию
Авторизация  
CHEATERCE

Перевод с C++ на C#

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

Здравствуйте! Помогите пожалуйста перевести вот этот код на язык 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.

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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