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

DarkPower2

Пользователи
  • Постов

    32
  • Зарегистрирован

  • Посещение

Весь контент DarkPower2

  1. Может быть модульную адресацию? "Показать метки и так отключена". Не понял...
  2. Проблема в том, что если использовать переход на прямую jmp .................., то прыжок будет на 4 байта, а следующие 4 байта записывается в следующую команду. В этой теме http://forum.gamehacklab.ru/topic/4234-problema-s-adresom-v-x64-igre-c/ посоветовали занести в регистр, а потом прыгать на регистр... Но из-за этого игра просто крашится... Код оригинальных инструкций: newmem:originalcode://mov R13, ["server.dll"+01C508B8]//mov R13, [R13]//mov R13, [R13+48]//mov R13, rbx//add R13, 590//cmp rbx, [R13]//je exitmovss [rbx+000007EC],xmm7exit:movss xmm1, [rbx+7EC]jmp returnhere"server.dll"+884A2A:push RDImov RDI, newmemjmp RDInopnopreturnhere:pop RDI
  3. Все таки не подходит этот mov rax... Из-за него игра крашится! Пробовал разные регистры... Все равно, а если обычный переход делать, то все окей! Вот допустим этот код приводит к краху игры: newmem:originalcode://mov R13, ["server.dll"+01C508B8]//mov R13, [R13]//mov R13, [R13+48]//mov R13, rbx//add R13, 590//cmp rbx, [R13]//je exitmovss [rbx+000007EC],xmm7exit:movss xmm1, [rbx+7EC]jmp returnhere"server.dll"+884A2A:push RDImov RDI, newmemjmp RDInopnopreturnhere:pop RDI
  4. Сейчас попробую Вроде оно... Щас еще протесю Спасибо, помогло!
  5. Отладкой только нашел то, что BitConverter.GetBytes возвращает массив байтов в инверсионном порядке. Поменял порядок но проблема осталась... Вот в чем проблема: Помогите написать jump для 64 битного адреса. Переводит половину адреса в следующую команду... Или подскажите как jmp 8 байтовый переделать в 4-х байтовый... или заставить jmp читать 8 байт...
  6. Уже все перепробовал, что только мог... После выполнения в CE пишет неверный адрес перехода... Я думаю проблема в том, что caveAddress = 0000000011223344 (пример), a addressFrom = 000007FED32A22DA (тоже). Помогите решить эту проблему! И при выполнении замененного кода возвращает тоже на неверный адрес. var valueon = new byte[] { 0x50, 0x48, 0xA1, 0xB8, 0x08, 0xCE, 0xD6, 0xFE, 0x07, 0x00, 0x00, 0x48, 0x8B, 0x00, 0x48, 0x8B, 0x40, 0x48, 0x48, 0x05, 0x90, 0x05, 0x00, 0x00, 0x48, 0x3B, 0x18, 0x74, 0x0C, 0x90, 0x90, 0x90, 0x90, 0xF3, 0x0F, 0x11, 0xBB, 0xEC, 0x07, 0x00, 0x00, 0x58 }; var valueoff = new byte[] { 0xF3, 0x0F, 0x11, 0xBB, 0xEC, 0x07, 0x00, 0x00, 0xF3, 0x0F, 0x10, 0x8B, 0xEC, 0x07, 0x00, 0x0 }; // Байты оригинальной команды var patern = new byte[] { 0xF3, 0x0F, 0x11, 0xBB, 0xEC, 0x07, 0x00, 0x00, 0xF3, 0x0F, 0x10, 0x8B, 0xEC, 0x07, 0x00, 0x00 }; MakeCave(valueon, valueoff, patern); Console.ReadKey();public static void MakeCave(byte[] valueon, byte[] valueoff, byte[] patern) { if (GHandle != IntPtr.Zero) { long caveAddress = (long)(Win32.VirtualAllocEx(GHandle, IntPtr.Zero, (IntPtr)(valueon.Length + 9), Win32.AllocationType.Commit, Win32.MemoryProtection.ExecuteReadWrite)); long addressFrom = FindWSignature(patern); if (addressFrom != -1) { Console.WriteLine(addressFrom.ToString("X")); //playSound("FIND.wav"); } else { Console.WriteLine("NOT FINDED"); //playSound("NOFIND.wav"); return; } long addressTo = addressFrom - caveAddress - valueon.Length; var buffer = new byte[valueoff.Length]; buffer[0] = 0xE9; var d = BitConverter.GetBytes(caveAddress - addressFrom); var f = BitConverter.GetBytes(caveAddress - addressFrom - d.Length); Array.Copy(f, 0, buffer, 1, f.Length); for (var i = d.Length+1; i < valueoff.Length; i++) { buffer[i] = 0x90; } var dummy = 0; var caveBuffer = new byte[valueon.Length + 9]; Array.Copy(valueon, caveBuffer, valueon.Length); caveBuffer[valueon.Length] = 0xE9; var retAddress = BitConverter.GetBytes(addressTo); Array.Copy(retAddress, 0, caveBuffer, valueon.Length + 1, retAddress.Length); Win32.WriteProcessMemory(GHandle, (long)caveAddress, caveBuffer, (int)caveBuffer.Length, ref dummy); var dummy1 = 0; Win32.WriteProcessMemory(GHandle, (long)addressFrom, buffer, (int)buffer.Length, ref dummy1); //VirtualFreeEx(handle, (IntPtr)0x09E90000, 0, FreeType.Release); Console.ReadKey(); } }
×
×
  • Создать...

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

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