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

Hack

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

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

  • Посещение

  • Победитель дней

    5

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

  1. align ставится перед меткой с данными, которые нужно выровнить. 10 = 16 байт CC этим значением заполняет пустоту. Можно поставить любое значение, на работу это не повлияет. xmm 128bit 16byte = 4 младших бита адреса - должны быть в 0. ymm 256bit 32byte = 5 младших бита адреса - должны быть в 0. zmm 512bit 64byte = 6 младших бита адреса - должны быть в 0.
  2. http://konishchevdmitry.blogspot.com/2010/01/blog-post.html
  3. 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
  4. 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 пока точно не понял.
  5. [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 бит.
  6. да Ну если тебе нужно перепрыгнуть на адрес который лежит в пределах 32bit, то этот короткий код прыжка подойдет.
  7. Попутал не 16 а 14 FF 25 - код. 00 00 00 00 - относительный адрес где хранится указатель, если 0 то используются следующие 8 байт. 00 00 00 00 00 00 00 00 - адрес.
  8. registersymbol - эта функция даст адресу имя. по имени можно обращаться с разных мест.
  9. Если не ставить, то там может использоваться jmp размером 16 байт. Вот проблема. Когда автоматический переводится код в автоассемблер, то туда переводятся только три инструкции с размером 6 байт. А этот jmp весит 16 байт. Дописывай все инструкции которые jmp сотрет. Вот можно укоротить jmp до 7ми байт. mov eax, newmem jmp eax
  10. Можешь не ставить третий параметр в alloc, но jmp будет длинным.
  11. RIP==getAddress('game.exe')+0x1234 Можно еще заставить exe загружаться статический.
  12. Условие LUA Для x86 EIP==0x00000000 Для x64 RIP==0x00000000
  13. Так можно адрес функции получить или адрес на jmp в зависимости от настроек компилятора. Затем тут тип LPTHREAD_START_ROUTINE?
  14. Нет, так как минимальное разделение страницы это 4096 байт. DWORD getBaseAddress(DWORD Address) { MEMORY_BASIC_INFORMATION mbi; if (!VirtualQuery((void*)Address, &mbi, sizeof(mbi))) return 0; return (DWORD)mbi.BaseAddress; }
  15. Так правильно. 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);
  16. Я не знаю что ты делаешь, для чего тебе отлов исключение? Какие функции из коробки?
  17. UnhandledExceptionFilter Работает только в текущем процессе. Зачем ловить исключение и менять адрес? jmp что не катит?
×
×
  • Создать...

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

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