CHBS
-
Постов
62 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные CHBS
-
-
22 минуты назад, partoftheworlD сказал:
Расширение для r регистров r8-r15
Всё равно не ясно, ведь 41 опкод зарезервирован для инструкции INC, та же кстати история с
// C6 87 D0 00 00 00 01 mov byte ptr [rdi+0D0h], 1 // 49 8B 3E mov rdi, [r14]
Даже если документацию открыть на 1169 странице,
https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf,
То опкоды MOV начинаются с 88+, что там делает в первой строке 87 мне не понятно, а еще более не понятен порядок байт, должно быть либо с лева, либо с права на лево, а опкоды по середине почему-то.
-
2 минуты назад, partoftheworlD сказал:
советую прочитать их и использовать как справочник.
Да там же 5 тысяч страниц, https://en.wikipedia.org/wiki/X86_instruction_listings
Даже тут не указано про что инструкция push может иметь назначение опкода 41.
// 41 55 push r13
Если я все правильно понял, то r13 это регистр общего назначения, и push у него должен быть соответственно в диапазоне 0x50-0x57, в чём подвох?
-
4 минуты назад, partoftheworlD сказал:
50 push rax 51 push rcx 52 push rdx 53 push rbx 54 push rsp 55 push rbp 56 push rsi 57 push rdi
// 41 55 push r13
Тогда почему тут 41?
-
Я заранее извиняюсь если создал тему не в том разделе, но посчитал что это будет ближе к ассемблеру.
Вопрос возник при изучении исходного кода одного из сканнеров сигнатур https://github.com/LWSS/McDota/blob/master/src/Scanner.cpp
Если мы допустим откроем что нибудь в отладчике, увидим набор инструкций и их опкодов с аргументами, вопрос вот в этом моменте
// 55 push rbp // 48 89 E5 mov rbp, rsp // 41 56 push r14 // 4C 8B 35 F3 A8 2A 02 mov r14, cs:_g_pGameEntitySystem // 41 55 push r13 // 49 89 FD mov r13, rdi // 41 54 push r12 // 53 push rbx // 31 DB xor ebx, ebx // C6 87 D0 00 00 00 01 mov byte ptr [rdi+0D0h], 1 // 49 8B 3E mov rdi, [r14] // E8 EA 4B E2 FF call CGameEntitySystem__GetHighestEntityIndex PatternFinder::FindPatternInModule("libclient.so", "55 48 89 E5 41 56 4C 8B 35 ?? ?? ?? ?? 41 55 49 89 FD 41 54 53 31", "reinitPredictables");
Не могу понять какой байт имеет опкод push? если посмотреть на первую строку из кода то мы видим 55, но почему не указан аргумент rbp?
Т.е я предполагал что если идет опкод с аргументом, то должно быть его байтовое обозначение, т.е например из первой строки
55[push] 89[rbp] например.
В следующей же строке это все присутствует
48[mov] 89[rbp] e5[rsp]
Так почему же в первой строке где у нас push rbp, не указан байт-аргумент?
Так-же почему 3-ья строка имеет другой опкод отличный от первого?
41[push] 56[r14], если push вроде как должен быть 55?
Я знаю что я как-то не так интерпретирую информацию, что очень скажется на конечном результате изучения, поэтому и задал вопрос, поставьте сразу на правильный путь, почему отладчик так выводит назначение опкодов и аргументов? -
Скрытый текст
local i = 1 local b = 1 function createPointSaver() -- Это функция Создания Edit local editLine = {}; table.insert(editLine, createEdit(UDF1_CEPanel2)); table.insert(editLine, createEdit(UDF1_CEPanel2)) table.insert(editLine, createEdit(UDF1_CEPanel2)) table.insert(editLine, createEdit(UDF1_CEPanel2)) for key, value in pairs(editLine) do control_setCaption(value, "EDIT: " .. tostring(b)); -- Параметры для Edit\ов control_setPosition(value, (key*90) - 75, 15*i); value.height = 16; value.width = 80; value.maxlength = 10; value.font.name = "Arial"; value.font.size = 8; value.font.color = "0xFFFFFF"; value.color = "0x533F3F"; value.borderstyle = "bsNone"; value.name = "SPoint"..b..""; b = b + 1; end end function CEButton1Click(sender) -- Функция по нажатию вызывает функцию выше и создает Edit\ы createPointSaver() i = i + 1.5 UDF1.CELabel1.Caption = wincontrol_getControlCount(UDF1_CEPanel2) end
На счёт key, value in pairs(editLine) там может быть ошибка, так что глаза в оба, протестить не могу, ибо не знаю как, где находятся UDF1 элемент и его панели?
-
А зачем ты используешь табличные индексы, а не table.insert?
-
В 17.11.2017 в 19:34, elvis66666 сказал:
Kernel32.Sleep(Int32)
mov eax, 0x74c37990
Хотелось бы узнать, а адрес 0x74c37990 откуда был взят?
Он статический во всей памяти, или конкретно вопрос как собственно найти адрес у этой функции непосредственно в CE?
-
Ну юмористы xDDD
19 часов назад, Garik66 сказал:у тебя 6-мерное пространство
Что-то типо того, я же в координаты должен засунуть еще и углы поворота машины, а потом восстановить как было))
Вопросов по телепорту не осталось, спасибо @ReWanet за оказанную помощь. объяснил что и как и к чему))
-
@ReWanetТак должно быть?
Скрытый текст[ENABLE] aobscanmodule(INJECT,SPEED2.EXE,D9 40 28 83 C0 30) // should be unique alloc(newmem,$1000) globalalloc(pos, 18) alloc(pflag, 1) registersymbol(pflag) registersymbol(pos) label(pflag) label(pos) label(store) label(restore) label(code) label(return) newmem: cmp byte ptr [pflag], 1 je store cmp byte ptr [pflag], 2 je restore code: fld dword ptr [eax+28] add eax,30 jmp return store: fld dword ptr [eax+20] fstp dword ptr [pos+0] fld dword ptr [eax+24] fstp dword ptr [pos+04] fld dword ptr [eax+28] fstp dword ptr [pos+08] fld dword ptr [eax+30] fstp dword ptr [pos+10] fld dword ptr [eax+34] fstp dword ptr [pos+14] fld dword ptr [eax+38] fstp dword ptr [pos+18] mov dword ptr [pflag], 3 jmp code restore: fld dword ptr [pos+0] fstp dword ptr [eax+20] fld dword ptr [pos+04] fstp dword ptr [eax+24] fld dword ptr [pos+08] fstp dword ptr [eax+28] fld dword ptr [pos+10] fstp dword ptr [eax+30] fld dword ptr [pos+14] fstp dword ptr [eax+34] fld dword ptr [pos+18] fstp dword ptr [eax+38] mov dword ptr [pflag], 3 jmp code pflag: dd 3 pos: db 00000000 00000000 00000000 INJECT: jmp newmem nop return: registersymbol(INJECT) [DISABLE] INJECT: db D9 40 28 83 C0 30 unregistersymbol(pflag) unregistersymbol(pos) unregistersymbol(INJECT) dealloc(pos) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "SPEED2.EXE"+1A8489 "SPEED2.EXE"+1A8462: 8D 4C 24 28 - lea ecx,[esp+28] "SPEED2.EXE"+1A8466: 51 - push ecx "SPEED2.EXE"+1A8467: E8 B4 45 E9 FF - call SPEED2.EXE+3CA20 "SPEED2.EXE"+1A846C: D9 44 24 2C - fld dword ptr [esp+2C] "SPEED2.EXE"+1A8470: 8B 86 A4 00 00 00 - mov eax,[esi+000000A4] "SPEED2.EXE"+1A8476: D8 40 20 - fadd dword ptr [eax+20] "SPEED2.EXE"+1A8479: 8B 8E A0 00 00 00 - mov ecx,[esi+000000A0] "SPEED2.EXE"+1A847F: D9 40 24 - fld dword ptr [eax+24] "SPEED2.EXE"+1A8482: 83 C4 0C - add esp,0C "SPEED2.EXE"+1A8485: D8 44 24 24 - fadd dword ptr [esp+24] // ---------- INJECTING HERE ---------- "SPEED2.EXE"+1A8489: D9 40 28 - fld dword ptr [eax+28] "SPEED2.EXE"+1A848C: 83 C0 30 - add eax,30 // ---------- DONE INJECTING ---------- "SPEED2.EXE"+1A848F: D8 44 24 28 - fadd dword ptr [esp+28] "SPEED2.EXE"+1A8493: 50 - push eax "SPEED2.EXE"+1A8494: 8D 44 24 24 - lea eax,[esp+24] "SPEED2.EXE"+1A8498: D9 5C 24 3C - fstp dword ptr [esp+3C] "SPEED2.EXE"+1A849C: 8B 54 24 3C - mov edx,[esp+3C] "SPEED2.EXE"+1A84A0: D9 C9 - fxch st(1) "SPEED2.EXE"+1A84A2: 50 - push eax "SPEED2.EXE"+1A84A3: D9 5C 24 28 - fstp dword ptr [esp+28] "SPEED2.EXE"+1A84A7: 89 54 24 30 - mov [esp+30],edx "SPEED2.EXE"+1A84AB: 8D 91 14 01 00 00 - lea edx,[ecx+00000114] }
-
Рабочий
Скрытый текст[ENABLE] aobscanmodule(INJECT,SPEED2.EXE,D9 40 28 83 C0 30) // should be unique alloc(newmem,$1000) globalalloc(pflag, 1) globalalloc(pos, 18) label(code) label(return) label(pflag) registersymbol(pflag) label(pos) registersymbol(pos) label(store) registersymbol(store) label(restore) registersymbol(restore) newmem: cmp byte ptr [pflag], 1 je store cmp byte ptr [pflag], 2 je restore code: fld dword ptr [eax+28] add eax,30 jmp return store: fld dword ptr [eax+20] fstp dword ptr [pos+0] fld dword ptr [eax+24] fstp dword ptr [pos+04] fld dword ptr [eax+28] fstp dword ptr [pos+08] fld dword ptr [eax+30] fstp dword ptr [pos+10] fld dword ptr [eax+34] fstp dword ptr [pos+14] fld dword ptr [eax+38] fstp dword ptr [pos+18] mov dword ptr [pflag], 3 jmp code restore: fld dword ptr [pos+0] fstp dword ptr [eax+20] fld dword ptr [pos+04] fstp dword ptr [eax+24] fld dword ptr [pos+08] fstp dword ptr [eax+28] fld dword ptr [pos+10] fstp dword ptr [eax+30] fld dword ptr [pos+14] fstp dword ptr [eax+34] fld dword ptr [pos+18] fstp dword ptr [eax+38] mov dword ptr [pflag], 3 jmp code pflag: dd 3 pos: db 00000000 00000000 00000000 INJECT: jmp newmem nop return: registersymbol(INJECT) [DISABLE] INJECT: db D9 40 28 83 C0 30 unregistersymbol(pflag) unregistersymbol(pos) unregistersymbol(store) unregistersymbol(restore) unregistersymbol(INJECT) dealloc(pflag) dealloc(pos) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "SPEED2.EXE"+1A8489 "SPEED2.EXE"+1A8462: 8D 4C 24 28 - lea ecx,[esp+28] "SPEED2.EXE"+1A8466: 51 - push ecx "SPEED2.EXE"+1A8467: E8 B4 45 E9 FF - call SPEED2.EXE+3CA20 "SPEED2.EXE"+1A846C: D9 44 24 2C - fld dword ptr [esp+2C] "SPEED2.EXE"+1A8470: 8B 86 A4 00 00 00 - mov eax,[esi+000000A4] "SPEED2.EXE"+1A8476: D8 40 20 - fadd dword ptr [eax+20] "SPEED2.EXE"+1A8479: 8B 8E A0 00 00 00 - mov ecx,[esi+000000A0] "SPEED2.EXE"+1A847F: D9 40 24 - fld dword ptr [eax+24] "SPEED2.EXE"+1A8482: 83 C4 0C - add esp,0C "SPEED2.EXE"+1A8485: D8 44 24 24 - fadd dword ptr [esp+24] // ---------- INJECTING HERE ---------- "SPEED2.EXE"+1A8489: D9 40 28 - fld dword ptr [eax+28] "SPEED2.EXE"+1A848C: 83 C0 30 - add eax,30 // ---------- DONE INJECTING ---------- "SPEED2.EXE"+1A848F: D8 44 24 28 - fadd dword ptr [esp+28] "SPEED2.EXE"+1A8493: 50 - push eax "SPEED2.EXE"+1A8494: 8D 44 24 24 - lea eax,[esp+24] "SPEED2.EXE"+1A8498: D9 5C 24 3C - fstp dword ptr [esp+3C] "SPEED2.EXE"+1A849C: 8B 54 24 3C - mov edx,[esp+3C] "SPEED2.EXE"+1A84A0: D9 C9 - fxch st(1) "SPEED2.EXE"+1A84A2: 50 - push eax "SPEED2.EXE"+1A84A3: D9 5C 24 28 - fstp dword ptr [esp+28] "SPEED2.EXE"+1A84A7: 89 54 24 30 - mov [esp+30],edx "SPEED2.EXE"+1A84AB: 8D 91 14 01 00 00 - lea edx,[ecx+00000114] }
Не рабочий
Скрытый текст[ENABLE] aobscanmodule(INJECT,SPEED2.EXE,D9 40 28 83 C0 30) // should be unique alloc(newmem,$1000) globalalloc(pos, 18) alloc(pflag, 1) registersymbol(pflag) registersymbol(pos) registersymbol(store) registersymbol(restore) label(pflag) label(pos) label(store) label(restore) label(code) label(return) newmem: cmp byte ptr [pflag], 1 je store cmp byte ptr [pflag], 2 je restore code: fld dword ptr [eax+28] add eax,30 jmp return store: fld dword ptr [eax+20] fstp dword ptr [pos+0] fld dword ptr [eax+24] fstp dword ptr [pos+04] fld dword ptr [eax+28] fstp dword ptr [pos+08] fld dword ptr [eax+30] fstp dword ptr [pos+10] fld dword ptr [eax+34] fstp dword ptr [pos+14] fld dword ptr [eax+38] fstp dword ptr [pos+18] mov dword ptr [pflag], 3 jmp code restore: fld dword ptr [pos+0] fstp dword ptr [eax+20] fld dword ptr [pos+04] fstp dword ptr [eax+24] fld dword ptr [pos+08] fstp dword ptr [eax+28] fld dword ptr [pos+10] fstp dword ptr [eax+30] fld dword ptr [pos+14] fstp dword ptr [eax+34] fld dword ptr [pos+18] fstp dword ptr [eax+38] mov dword ptr [pflag], 3 jmp code pflag: dd 3 pos: db 00000000 00000000 00000000 INJECT: jmp newmem nop return: registersymbol(INJECT) [DISABLE] INJECT: db D9 40 28 83 C0 30 unregistersymbol(pflag) unregistersymbol(pos) unregistersymbol(store) unregistersymbol(restore) unregistersymbol(INJECT) dealloc(pflag) dealloc(pos) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "SPEED2.EXE"+1A8489 "SPEED2.EXE"+1A8462: 8D 4C 24 28 - lea ecx,[esp+28] "SPEED2.EXE"+1A8466: 51 - push ecx "SPEED2.EXE"+1A8467: E8 B4 45 E9 FF - call SPEED2.EXE+3CA20 "SPEED2.EXE"+1A846C: D9 44 24 2C - fld dword ptr [esp+2C] "SPEED2.EXE"+1A8470: 8B 86 A4 00 00 00 - mov eax,[esi+000000A4] "SPEED2.EXE"+1A8476: D8 40 20 - fadd dword ptr [eax+20] "SPEED2.EXE"+1A8479: 8B 8E A0 00 00 00 - mov ecx,[esi+000000A0] "SPEED2.EXE"+1A847F: D9 40 24 - fld dword ptr [eax+24] "SPEED2.EXE"+1A8482: 83 C4 0C - add esp,0C "SPEED2.EXE"+1A8485: D8 44 24 24 - fadd dword ptr [esp+24] // ---------- INJECTING HERE ---------- "SPEED2.EXE"+1A8489: D9 40 28 - fld dword ptr [eax+28] "SPEED2.EXE"+1A848C: 83 C0 30 - add eax,30 // ---------- DONE INJECTING ---------- "SPEED2.EXE"+1A848F: D8 44 24 28 - fadd dword ptr [esp+28] "SPEED2.EXE"+1A8493: 50 - push eax "SPEED2.EXE"+1A8494: 8D 44 24 24 - lea eax,[esp+24] "SPEED2.EXE"+1A8498: D9 5C 24 3C - fstp dword ptr [esp+3C] "SPEED2.EXE"+1A849C: 8B 54 24 3C - mov edx,[esp+3C] "SPEED2.EXE"+1A84A0: D9 C9 - fxch st(1) "SPEED2.EXE"+1A84A2: 50 - push eax "SPEED2.EXE"+1A84A3: D9 5C 24 28 - fstp dword ptr [esp+28] "SPEED2.EXE"+1A84A7: 89 54 24 30 - mov [esp+30],edx "SPEED2.EXE"+1A84AB: 8D 91 14 01 00 00 - lea edx,[ecx+00000114] }
-
Не могу редактировать.
Вообщем проблема странная, будто pos обнуляется, т.е первые раз я сохраняю позицию, выполняя метку store:
далее я проезжаю сколько то метров, выполняю метку restore: меня телепортирует, а если проехать например пару сотен метров, то pos вовсе будет держать в себе значения рандомного флоата, например моя настоящая позицияx = 3000, y = -2000, z = 200
в posX = 1.3141431413E+4, posY = 2.13123123123E+4, posZ = 0.31413413413
Не могу понять почему так происходит, вроде pos не должен записываться пока я не выполню метку store, все выполняется по клавишам
Скрытый текст[ENABLE] aobscanmodule(INJECT, speed2.exe, D9 5E F0 D9 84 24 4C 02 00 00) alloc(newmem, $1000) alloc(pos, 12) label(pflag) label(store) label(restore) label(code) label(return) registersymbol(pflag) newmem: cmp byte ptr [pflag], 0 je store cmp byte ptr [pflag], 1 je restore code: fstp dword ptr [esi-10] fld dword ptr [esp+0000024C] jmp return pflag: db 3 store: fld dword ptr [esi-0C] fstp dword ptr [pos+0] fld dword ptr [esi-08] fstp dword ptr [pos+8] fld dword ptr [esi-04] fstp dword ptr [pos+4] mov byte ptr [pflag], 3 jmp code restore: fld dword ptr [pos+0] fstp dword ptr [esi-0c] fld dword ptr [pos+8] fstp dword ptr [esi-08] fld dword ptr [pos+4] fstp dword ptr [esi-04] mov byte ptr [pflag], 3 jmp code INJECT: jmp newmem nop nop nop nop nop return: registersymbol(INJECT) [DISABLE] INJECT: db D9 5E F0 D9 84 24 4C 02 00 00 unregistersymbol(store) unregistersymbol(restore) unregistersymbol(pflag) unregistersymbol(INJECT) dealloc(pos) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "speed2.exe"+1AA1ED "speed2.exe"+1AA1CC: 7C 54 - jl speed2.exe+1AA222 "speed2.exe"+1AA1CE: B8 03 00 00 00 - mov eax,00000003 "speed2.exe"+1AA1D3: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA1DA: 83 C0 04 - add eax,04 "speed2.exe"+1AA1DD: D8 0F - fmul dword ptr [edi] "speed2.exe"+1AA1DF: 83 C1 04 - add ecx,04 "speed2.exe"+1AA1E2: 83 C6 10 - add esi,10 "speed2.exe"+1AA1E5: 83 C7 10 - add edi,10 "speed2.exe"+1AA1E8: 3B C5 - cmp eax,ebp "speed2.exe"+1AA1EA: D8 46 F0 - fadd dword ptr [esi-10] // ---------- INJECTING HERE ---------- "speed2.exe"+1AA1ED: D9 5E F0 - fstp dword ptr [esi-10] "speed2.exe"+1AA1F0: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] // ---------- DONE INJECTING ---------- "speed2.exe"+1AA1F7: D8 4F F4 - fmul dword ptr [edi-0C] "speed2.exe"+1AA1FA: D8 46 F4 - fadd dword ptr [esi-0C] "speed2.exe"+1AA1FD: D9 5E F4 - fstp dword ptr [esi-0C] "speed2.exe"+1AA200: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA207: D8 4F F8 - fmul dword ptr [edi-08] "speed2.exe"+1AA20A: D8 46 F8 - fadd dword ptr [esi-08] "speed2.exe"+1AA20D: D9 5E F8 - fstp dword ptr [esi-08] "speed2.exe"+1AA210: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA217: D8 4F FC - fmul dword ptr [edi-04] "speed2.exe"+1AA21A: D8 46 FC - fadd dword ptr [esi-04] }
-
@ReWanet, спасибо большое, проблема решена, нужно было сместить restore, store вниз, непонятно почему так
Код
Скрытый текст[ENABLE] aobscanmodule(INJECT, speed2.exe, D9 5E F0 D9 84 24 4C 02 00 00) alloc(newmem, $1000) alloc(pos, 12) label(pflag) label(store) label(restore) label(code) label(return) registersymbol(pflag) store: fld dword ptr [esi-0c] fstp dword ptr [pos+0] fld dword ptr [esi-08] fstp dword ptr [pos+8] fld dword ptr [esi-04] fstp dword ptr [pos+4] restore: fld dword ptr [pos+0] fstp dword ptr [esi-0c] fld dword ptr [pos+8] fstp dword ptr [esi-08] fld dword ptr [pos+4] fstp dword ptr [esi-04] newmem: fstp dword ptr [esi-10] cmp byte ptr [pflag], 0 je store jne restore code: fld dword ptr [esp+0000024C] jmp return pflag: db 3 INJECT: jmp newmem nop nop nop nop nop return: registersymbol(INJECT) [DISABLE] INJECT: db D9 5E F0 D9 84 24 4C 02 00 00 unregistersymbol(store) unregistersymbol(restore) unregistersymbol(pflag) unregistersymbol(INJECT) dealloc(pos) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "speed2.exe"+1AA1ED "speed2.exe"+1AA1CC: 7C 54 - jl speed2.exe+1AA222 "speed2.exe"+1AA1CE: B8 03 00 00 00 - mov eax,00000003 "speed2.exe"+1AA1D3: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA1DA: 83 C0 04 - add eax,04 "speed2.exe"+1AA1DD: D8 0F - fmul dword ptr [edi] "speed2.exe"+1AA1DF: 83 C1 04 - add ecx,04 "speed2.exe"+1AA1E2: 83 C6 10 - add esi,10 "speed2.exe"+1AA1E5: 83 C7 10 - add edi,10 "speed2.exe"+1AA1E8: 3B C5 - cmp eax,ebp "speed2.exe"+1AA1EA: D8 46 F0 - fadd dword ptr [esi-10] // ---------- INJECTING HERE ---------- "speed2.exe"+1AA1ED: D9 5E F0 - fstp dword ptr [esi-10] "speed2.exe"+1AA1F0: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] // ---------- DONE INJECTING ---------- "speed2.exe"+1AA1F7: D8 4F F4 - fmul dword ptr [edi-0C] "speed2.exe"+1AA1FA: D8 46 F4 - fadd dword ptr [esi-0C] "speed2.exe"+1AA1FD: D9 5E F4 - fstp dword ptr [esi-0C] "speed2.exe"+1AA200: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA207: D8 4F F8 - fmul dword ptr [edi-08] "speed2.exe"+1AA20A: D8 46 F8 - fadd dword ptr [esi-08] "speed2.exe"+1AA20D: D9 5E F8 - fstp dword ptr [esi-08] "speed2.exe"+1AA210: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA217: D8 4F FC - fmul dword ptr [edi-04] "speed2.exe"+1AA21A: D8 46 FC - fadd dword ptr [esi-04] }
-
1 минуту назад, ReWanet сказал:
Приписка на будущее
Когда я писал, ее не было просто, сообщение отредактировано ведь
1 минуту назад, ReWanet сказал:Вылеты как раз из-за этого скорее.
Вылета как такового вроде бы и нет, я не могу это проверить, потому что скрипт работает явно не стабильно, дело в том что когда я включаю скрипт, на нем вешается крестик, но в моем случае крестика нету, и я получается не могу обратно восстановить инструкцию, и немогу понять почему крест не вешается и инструкция не восстанавливается
-
57 минут назад, ReWanet сказал:
( INJECT ) не должно повторяться.
О_о а где оно повторяется то?
57 минут назад, ReWanet сказал:Убери прыжок
убрал, кстати почему?
как вообще происходит выполнение кода, ведь нет нигде указания что нужно зайти в метку pflag, и выполнить db 0
57 минут назад, ReWanet сказал:В блоке [DISABLE]
Прописал
57 минут назад, ReWanet сказал:У тебя код ни когда не вернется в оригинальную часть.
Вот да, я в это и впоролся, и приходится пока ручками восстанавливать инструкцию, не понимаю почему после выполнения своих действий, он не восстанавливает по нажатию мои собственные инструкции
57 минут назад, ReWanet сказал:по факту ты записываешь
Имена меток попутал restore -> store, store -> restore
57 минут назад, ReWanet сказал:EAX а свободен он иль нет
Посмотрел в бряке регистры, был занят, сделал через fld, fstp, хоть понял как это теперь работает
57 минут назад, ReWanet сказал:Инструкция работает не только с тобой.
Инструкция пересчитывает на самом деле много адресов
Привожу ниже текущий код.
Скрытый текст[ENABLE] aobscanmodule(INJECT, speed2.exe, D9 5E F0 D9 84 24 4C 02 00 00) alloc(newmem, $1000) alloc(pos, 12) label(pflag) label(store) label(restore) label(code) label(return) registersymbol(pflag) registersymbol(store) registersymbol(restore) store: fld dword ptr [esi-0c] fstp dword ptr [pos+0] fld dword ptr [esi-08] fstp dword ptr [pos+8] fld dword ptr [esi-04] fstp dword ptr [pos+4] restore: fld dword ptr [pos+0] fstp dword ptr [esi-0c] fld dword ptr [pos+8] fstp dword ptr [esi-08] fld dword ptr [pos+4] fstp dword ptr [esi-04] newmem: fstp dword ptr [esi-10] cmp byte ptr [pflag], 0 je store jne restore code: fld dword ptr [esp+0000024C] jmp return pflag: db 3 INJECT: jmp newmem nop nop nop nop nop return: registersymbol(INJECT) [DISABLE] INJECT: db D9 5E F0 D9 84 24 4C 02 00 00 unregistersymbol(store) unregistersymbol(restore) unregistersymbol(pflag) unregistersymbol(INJECT) dealloc(pos) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "speed2.exe"+1AA1ED "speed2.exe"+1AA1CC: 7C 54 - jl speed2.exe+1AA222 "speed2.exe"+1AA1CE: B8 03 00 00 00 - mov eax,00000003 "speed2.exe"+1AA1D3: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA1DA: 83 C0 04 - add eax,04 "speed2.exe"+1AA1DD: D8 0F - fmul dword ptr [edi] "speed2.exe"+1AA1DF: 83 C1 04 - add ecx,04 "speed2.exe"+1AA1E2: 83 C6 10 - add esi,10 "speed2.exe"+1AA1E5: 83 C7 10 - add edi,10 "speed2.exe"+1AA1E8: 3B C5 - cmp eax,ebp "speed2.exe"+1AA1EA: D8 46 F0 - fadd dword ptr [esi-10] // ---------- INJECTING HERE ---------- "speed2.exe"+1AA1ED: D9 5E F0 - fstp dword ptr [esi-10] "speed2.exe"+1AA1F0: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] // ---------- DONE INJECTING ---------- "speed2.exe"+1AA1F7: D8 4F F4 - fmul dword ptr [edi-0C] "speed2.exe"+1AA1FA: D8 46 F4 - fadd dword ptr [esi-0C] "speed2.exe"+1AA1FD: D9 5E F4 - fstp dword ptr [esi-0C] "speed2.exe"+1AA200: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA207: D8 4F F8 - fmul dword ptr [edi-08] "speed2.exe"+1AA20A: D8 46 F8 - fadd dword ptr [esi-08] "speed2.exe"+1AA20D: D9 5E F8 - fstp dword ptr [esi-08] "speed2.exe"+1AA210: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA217: D8 4F FC - fmul dword ptr [edi-04] "speed2.exe"+1AA21A: D8 46 FC - fadd dword ptr [esi-04] }
-
Доброго времени суток форумчане, написал вот такой скрипт (логи присутствуют)
Скрытый текст[ENABLE] aobscanmodule(INJECT, speed2.exe,D9 5E F0 D9 84 24 4C 02 00 00) alloc(newmem,$1000) alloc(pos, 12) label(position_flag) registersymbol(position_flag) label(store) registersymbol(store) label(restore) registersymbol(restore) label(code) label(return) store: push eax mov eax, [pos+0] mov [esi-0c], eax mov eax, [pos+8] mov [esi-08], eax mov eax, [pos+4] mov [esi-04], eax pop eax restore: push eax mov eax, [esi-0c] mov [pos+0], eax mov eax, [esi-08] mov [pos+8], eax mov eax, [esi-04] mov [pos+4], eax pop eax newmem: fstp dword ptr [esi-10] cmp byte ptr [position_flag], 0 je store jmp restore jmp store code: fld dword ptr [esp+0000024C] jmp return position_flag: db 0 jmp newmem INJECT: jmp newmem nop nop nop nop nop return: registersymbol(INJECT) [DISABLE] INJECT: db D9 5E F0 D9 84 24 4C 02 00 00 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "speed2.exe"+1AA1ED "speed2.exe"+1AA1CC: 7C 54 - jl speed2.exe+1AA222 "speed2.exe"+1AA1CE: B8 03 00 00 00 - mov eax,00000003 "speed2.exe"+1AA1D3: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA1DA: 83 C0 04 - add eax,04 "speed2.exe"+1AA1DD: D8 0F - fmul dword ptr [edi] "speed2.exe"+1AA1DF: 83 C1 04 - add ecx,04 "speed2.exe"+1AA1E2: 83 C6 10 - add esi,10 "speed2.exe"+1AA1E5: 83 C7 10 - add edi,10 "speed2.exe"+1AA1E8: 3B C5 - cmp eax,ebp "speed2.exe"+1AA1EA: D8 46 F0 - fadd dword ptr [esi-10] // ---------- INJECTING HERE ---------- "speed2.exe"+1AA1ED: D9 5E F0 - fstp dword ptr [esi-10] "speed2.exe"+1AA1F0: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] // ---------- DONE INJECTING ---------- "speed2.exe"+1AA1F7: D8 4F F4 - fmul dword ptr [edi-0C] "speed2.exe"+1AA1FA: D8 46 F4 - fadd dword ptr [esi-0C] "speed2.exe"+1AA1FD: D9 5E F4 - fstp dword ptr [esi-0C] "speed2.exe"+1AA200: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA207: D8 4F F8 - fmul dword ptr [edi-08] "speed2.exe"+1AA20A: D8 46 F8 - fadd dword ptr [esi-08] "speed2.exe"+1AA20D: D9 5E F8 - fstp dword ptr [esi-08] "speed2.exe"+1AA210: D9 84 24 4C 02 00 00 - fld dword ptr [esp+0000024C] "speed2.exe"+1AA217: D8 4F FC - fmul dword ptr [edi-04] "speed2.exe"+1AA21A: D8 46 FC - fadd dword ptr [esi-04] }
Цель скрипта, сохранение, восстановление позиции машины по флагу, если смотреть на видеоурок под спойлером
Скрытый текстТо во первых почему то крОшится игра, а во вторых не выделяется память под position_flag, т.е я не могу вывести адрес в список адресов что бы там задать ему флаг.
-
1 час назад, krocki сказал:
скайп запретили
Это в какой геолокации то?
Вообщем по теме @Garik66 через скайп объяснил мне что к чему, научил сравнивать структуры игрок-враг, вообщем нашел @Garik66 инструкцию работающую со всеми колесами включая врагов, помог с фильтром, объяснил как работает cmp, je, jne в данном контексте, и вообще там полтора часа разговора по теме, всё не описать, но научил меня основным аспектам!
@Garik66 Огромнейшее спасибо!!!
По итогу буст авто работает как часики))- 1
-
Только что, Garik66 сказал:
А запрос где?
А у меня скайп повесился, обычная практика, Microsoft же
-
Я прямо так и захотел найти оффсеты для камеры, можно потом будет мувики снимать, кому то да пригодится))
Обернуть ее в GUI, и пусть пользователь сам выбирает ротация и позицию камеры отностельно автомобиля
-
4 минуты назад, krocki сказал:
Кстати ради прикола
Кстати прикол получился))
После поломки игра секунд через 10 восстановила отрсиовку, но камера поломалась, но мне так даже больше нравится)))
Картинка
Скрытый текст -
Только что, Garik66 сказал:
захожу логин 1
Я зашёл в скайп и собственно готов
-
2 минуты назад, krocki сказал:
fstp dword ptr [esi-04] на fld1
Умерла отрисовка))
-
2 минуты назад, Garik66 сказал:
здесь Акки для скайпа.
Сейчас зайду в скайп, на какой логин мне отправить запрос?
-
3 минуты назад, krocki сказал:
А она точно только с одним адресом робит
Так черт его дери в том то и дело, что она работает с колесами, противника 3+Я(4), колеса 4, 1 колесо = 1 адресс с значением, 4*4=16, 16 адресов с которыми она работает это точно, но я не могу написать фильтр, точнее пока не пойму как мне найти свою машину потому что в первые 8 адресов при бряке на запись, там идут машины противников, и хлам адреса, но колеса моей машины находятся после 8-и этих адресов, и я вот не знаю как мне посмотреть с какими адрессами она работает конкретно моей машины, вот как обойти ограничение в 8 адресов?
Картинка с адресами
Скрытый текст -
2 минуты назад, Garik66 сказал:
По какому? из этого сообщения?
Не, я про то что нужно брать не тот регистр в который пишет инструкция, а из которого она берет, т.е 2-ой вариант в твоем видео, т.е 2-ой способ из твоего видео, я вот про что))
3 минуты назад, Garik66 сказал:сказать не могу.
Понял, спасибо, наверное просто мне таким образом повезло)
Назначение опкодов, при создании сигнатуры
in Низкоуровневое программирование
Опубликовано
Спасибо за информацию, а [C6 /0 ib] - [MOV r/m8, imm8] из этой инструкции, /0 ib чем является?
О, как, спасибо большое, я просто голову ломал из-за порядка байт, разворачивал но получалось 87 C6 D0 00 00 00 01, стало намного яснее.
По поводу не загоняйся - мне просто стало интересно из чего сигнатура строится, еще нужно бы понимать, какие аргументы меняются и как их определять, понятное дело что mov это опкод и он будет неизменным в сигнатуре, но вот может ли сменится регистр в блоке инструкций или он уже назначен на rdi? Просто у него сигнатуру кончилась до этого опкода, если же посмотреть на предыдущую инструкцию
// 4C 8B 35 F3 A8 2A 02 mov r14, cs:_g_pGameEntitySystem
35 тут к чему будет относится?
Спасибо, она? [CENSORED]