

Hack
Пользователи+-
Постов
108 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент Hack
-
align ставится перед меткой с данными, которые нужно выровнить. 10 = 16 байт CC этим значением заполняет пустоту. Можно поставить любое значение, на работу это не повлияет. xmm 128bit 16byte = 4 младших бита адреса - должны быть в 0. ymm 256bit 32byte = 5 младших бита адреса - должны быть в 0. zmm 512bit 64byte = 6 младших бита адреса - должны быть в 0.
-
http://konishchevdmitry.blogspot.com/2010/01/blog-post.html
-
addps и mulps работают сразу с четырьмя float значениями. alloc(memory, 0x400) label(float_4) memory: //... mulps xmm0,[float_4] //... align 10 CC float_4: dd (float)5.0 dd (float)1.0 dd (float)1.0 dd (float)1.0
-
https://github.com/gtvx/scanner-signatures
-
b == 8 (byte) w == 16 (word) d == 32 (dword) ib == imm8 ( i == imm, b == 8 ) imm – immediately непосредственное значение const которое записано в коде. rb == регистр 1 байт rw == регистр 2 байта rd == регистр 4 байта /0 пока точно не понял.
-
[C6 /0 ib] - [MOV r/m8, imm8] // C6 87 D0 00 00 00 01 mov byte ptr [rdi+0D0h], 1 [REX.W + 8B /r] - [MOV r64,r/m64] // 49 8B 3E mov rdi, [r14] (стр 1170) Использование префикса REX.W продвигает работу до 64 бит.
-
это в x86 "41", а в x64 это "FF C1". (inc ecx)
-
Если не ставить, то там может использоваться jmp размером 16 байт. Вот проблема. Когда автоматический переводится код в автоассемблер, то туда переводятся только три инструкции с размером 6 байт. А этот jmp весит 16 байт. Дописывай все инструкции которые jmp сотрет. Вот можно укоротить jmp до 7ми байт. mov eax, newmem jmp eax
-
RIP==getAddress('game.exe')+0x1234 Можно еще заставить exe загружаться статический.
-
Условие LUA Для x86 EIP==0x00000000 Для x64 RIP==0x00000000
-
Так можно адрес функции получить или адрес на jmp в зависимости от настроек компилятора. Затем тут тип LPTHREAD_START_ROUTINE?
-
Что? Как это использовать потом?
-
-
Нет, так как минимальное разделение страницы это 4096 байт. DWORD getBaseAddress(DWORD Address) { MEMORY_BASIC_INFORMATION mbi; if (!VirtualQuery((void*)Address, &mbi, sizeof(mbi))) return 0; return (DWORD)mbi.BaseAddress; }
-
Так правильно. const DWORD game_dll = (DWORD)GetModuleHandle(L"Game.dll"); const DWORD from_addr = game_dll + 0x36143B; const DWORD jmp_original = game_dll + 0x361440; void JMP(PBYTE buffer, DWORD A, DWORD B) { buffer[0] = 0xE9; *(long*)&buffer[1] = long(B - A) - 5; } BYTE jmp[5]; JMP(jmp, alloc_addr + 0x5, jmp_original); memcpy((void*)(alloc_addr + 0x5), (void*)jmp, 5); Или так, если есть прямой доступ записи. void JMP(DWORD A, DWORD B) { PBYTE buffer = (PBYTE)A; buffer[0] = 0xE9; *(long*)&buffer[1] = long(B - A) - 5; } JMP(alloc_addr + 0x5, jmp_original);
-
Я не знаю что ты делаешь, для чего тебе отлов исключение? Какие функции из коробки?
-
Есть API функции для отладки.
-
UnhandledExceptionFilter Работает только в текущем процессе. Зачем ловить исключение и менять адрес? jmp что не катит?