mahonya Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 (изменено) Всем привет! Решил познакомиться с ассемблером путем взлома сингл игр. Выбор пал на игру Drug Dealer Simulator (v1.1.0.25, в этой версии ввели какие-то сложности для геймхацкеров, но не знаю какие). Взлом игры, в целом, не представляет из себя что-то сложное для людей знающих, но и не что-то банально легкое. В этой теме планирую выкладывать вопросы по мере их поступления. [Вопрос открыт]Первый вопрос, с которым я столкнулся: Пользовался методами push/pop следующим образом: push dword ptr [adress] pop dwprd ptr [adress] Делал с значениями 4byte, но когда попробовал этот метод со значениями типа float, то последовал краш, гуглил что-то, пытался что-то, следовал краш. Вопрос следующий: Это просто совпадение, что с этими стеками крашило, или для типа float нужен другой метод? Если нужен другой, то какой и как правильно применять? Ситуация: Спойлер Хочу сделать некончающуюся выносливость. Именно НОПнуть, а не просто заморозить. Нашел адрес и поинтеры. значений порядка 9 штук, которые отвечают за выносливость. Есть только одно значение, после заморозки которого выносливость перестает тратиться, ставля на него бряк, обращается только в момент восстановления и траты выносливости. Вероятно, именно то, что нам нужно. опкод выглядит следующим образом: 89 08 - mov [rax],ecx в структуре RAX текущее значение выносливости - оффсет +0 в той же структуре максимальное значение выносливости - оффсет +0А68 пишу следующий скрипт: [ENABLE] aobscanmodule(stamina,VCRUNTIME140.dll,89 08 C3 0F 1F 00) // should be unique alloc(newmem,$1000,stamina) label(code) label(return) newmem: push dword ptr [rax+0A68] pop dword ptr [rax+0] code: mov [rax],ecx ret nop dword ptr [rax] jmp return stamina: jmp newmem return: registersymbol(stamina) [DISABLE] stamina: db 89 08 C3 0F 1F 00 unregistersymbol(stamina) dealloc(newmem) Краш. Тыкните пальцем ламеру, что не так))) Изменено 10 февраля, 2022 пользователем mahonya Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 Даже если бы не было краша, дальше идёт code: mov [rax],ecx поэтому твои действия учитываться не будут Ссылка на комментарий Поделиться на другие сайты Поделиться
mahonya Опубликовано 10 февраля, 2022 Автор Поделиться Опубликовано 10 февраля, 2022 1 минуту назад, imaginary сказал: Даже если бы не было краша, дальше идёт code: mov [rax],ecx поэтому твои действия учитываться не будут Хорошо, а что может провоцировать краш? И еще, как можно это "обыграть" ? Я могу удалить эту строку просто, может ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 3 минуты назад, mahonya сказал: Хорошо, а что может провоцировать краш? И еще, как можно это "обыграть" ? Я могу удалить эту строку просто, может ? 1. Выкладывайте скрипты, не удаляя логи, которые делает СЕ. (так более понятен игровой код. 2. и снова стандартная ошибка всех новичков - посмотри мое одноименно видео, imaginary тебе об этом написала. Выложи скрипт с логами (используя теги спойлера и кода). посмотрим Ссылка на комментарий Поделиться на другие сайты Поделиться
mahonya Опубликовано 10 февраля, 2022 Автор Поделиться Опубликовано 10 февраля, 2022 22 минуты назад, Garik66 сказал: 1. Выкладывайте скрипты, не удаляя логи, которые делает СЕ. (так более понятен игровой код. 2. и снова стандартная ошибка всех новичков - посмотри мое одноименно видео, imaginary тебе об этом написала. Выложи скрипт с логами (используя теги спойлера и кода). посмотрим Где я могу найти логи CE ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 2 минуты назад, mahonya сказал: Где я могу найти логи CE ? ты их удалил в своем скрипте. автоматически СЕ делает их внизу скрипта Ссылка на комментарий Поделиться на другие сайты Поделиться
mahonya Опубликовано 10 февраля, 2022 Автор Поделиться Опубликовано 10 февраля, 2022 13 минут назад, Garik66 сказал: ты их удалил в своем скрипте. автоматически СЕ делает их внизу скрипта Спойлер { Game : DrugDealerSimulator-Win64-Shipping.exe Version: Date : 2022-02-10 Author : ?????? This script does blah blah blah } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(stam,VCRUNTIME140.dll,89 08 C3 0F 1F 00) // should be unique alloc(newmem,$1000,stam) label(code) label(return) newmem: mov [rax],ecx push dword ptr [rax+0A68] pop dword ptr [rax+0] code: ret nop dword ptr [rax] jmp return stam: jmp newmem return: registersymbol(stam) [DISABLE] //code from here till the end of the code will be used to disable the cheat stam: db 89 08 C3 0F 1F 00 unregistersymbol(stam) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: VCRUNTIME140.memcpy+CA VCRUNTIME140.memcpy+AD: C3 - ret VCRUNTIME140.memcpy+AE: 66 90 - nop 2 VCRUNTIME140.memcpy+B0: 4C 8B 02 - mov r8,[rdx] VCRUNTIME140.memcpy+B3: 0F B7 4A 08 - movzx ecx,word ptr [rdx+08] VCRUNTIME140.memcpy+B7: 44 0F B6 4A 0A - movzx r9d,byte ptr [rdx+0A] VCRUNTIME140.memcpy+BC: 4C 89 00 - mov [rax],r8 VCRUNTIME140.memcpy+BF: 66 89 48 08 - mov [rax+08],cx VCRUNTIME140.memcpy+C3: 44 88 48 0A - mov [rax+0A],r9l VCRUNTIME140.memcpy+C7: C3 - ret VCRUNTIME140.memcpy+C8: 8B 0A - mov ecx,[rdx] // ---------- INJECTING HERE ---------- VCRUNTIME140.memcpy+CA: 89 08 - mov [rax],ecx // ---------- DONE INJECTING ---------- VCRUNTIME140.memcpy+CC: C3 - ret VCRUNTIME140.memcpy+CD: 0F 1F 00 - nop dword ptr [rax] VCRUNTIME140.memcpy+D0: 8B 0A - mov ecx,[rdx] VCRUNTIME140.memcpy+D2: 44 0F B6 42 04 - movzx r8d,byte ptr [rdx+04] VCRUNTIME140.memcpy+D7: 89 08 - mov [rax],ecx VCRUNTIME140.memcpy+D9: 44 88 40 04 - mov [rax+04],r8l VCRUNTIME140.memcpy+DD: C3 - ret VCRUNTIME140.memcpy+DE: 66 90 - nop 2 VCRUNTIME140.memcpy+E0: 8B 0A - mov ecx,[rdx] VCRUNTIME140.memcpy+E2: 44 0F B7 42 04 - movzx r8d,word ptr [rdx+04] } Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 Как я понял, из последнего выложенного скрипта видео все-таки ты не посмотрел. Ссылка на комментарий Поделиться на другие сайты Поделиться
mahonya Опубликовано 10 февраля, 2022 Автор Поделиться Опубликовано 10 февраля, 2022 1 минуту назад, Garik66 сказал: Как я понял, из последнего выложенного скрипта видео все-таки ты не посмотрел. Верно заметил Ссылка на комментарий Поделиться на другие сайты Поделиться
mahonya Опубликовано 10 февраля, 2022 Автор Поделиться Опубликовано 10 февраля, 2022 14 минут назад, mahonya сказал: Скрыть контент { Game : DrugDealerSimulator-Win64-Shipping.exe Version: Date : 2022-02-10 Author : ?????? This script does blah blah blah } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(stam,VCRUNTIME140.dll,89 08 C3 0F 1F 00) // should be unique alloc(newmem,$1000,stam) label(code) label(return) newmem: mov [rax],ecx push dword ptr [rax+0A68] pop dword ptr [rax+0] code: ret nop dword ptr [rax] jmp return stam: jmp newmem return: registersymbol(stam) [DISABLE] //code from here till the end of the code will be used to disable the cheat stam: db 89 08 C3 0F 1F 00 unregistersymbol(stam) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: VCRUNTIME140.memcpy+CA VCRUNTIME140.memcpy+AD: C3 - ret VCRUNTIME140.memcpy+AE: 66 90 - nop 2 VCRUNTIME140.memcpy+B0: 4C 8B 02 - mov r8,[rdx] VCRUNTIME140.memcpy+B3: 0F B7 4A 08 - movzx ecx,word ptr [rdx+08] VCRUNTIME140.memcpy+B7: 44 0F B6 4A 0A - movzx r9d,byte ptr [rdx+0A] VCRUNTIME140.memcpy+BC: 4C 89 00 - mov [rax],r8 VCRUNTIME140.memcpy+BF: 66 89 48 08 - mov [rax+08],cx VCRUNTIME140.memcpy+C3: 44 88 48 0A - mov [rax+0A],r9l VCRUNTIME140.memcpy+C7: C3 - ret VCRUNTIME140.memcpy+C8: 8B 0A - mov ecx,[rdx] // ---------- INJECTING HERE ---------- VCRUNTIME140.memcpy+CA: 89 08 - mov [rax],ecx // ---------- DONE INJECTING ---------- VCRUNTIME140.memcpy+CC: C3 - ret VCRUNTIME140.memcpy+CD: 0F 1F 00 - nop dword ptr [rax] VCRUNTIME140.memcpy+D0: 8B 0A - mov ecx,[rdx] VCRUNTIME140.memcpy+D2: 44 0F B6 42 04 - movzx r8d,byte ptr [rdx+04] VCRUNTIME140.memcpy+D7: 89 08 - mov [rax],ecx VCRUNTIME140.memcpy+D9: 44 88 40 04 - mov [rax+04],r8l VCRUNTIME140.memcpy+DD: C3 - ret VCRUNTIME140.memcpy+DE: 66 90 - nop 2 VCRUNTIME140.memcpy+E0: 8B 0A - mov ecx,[rdx] VCRUNTIME140.memcpy+E2: 44 0F B7 42 04 - movzx r8d,word ptr [rdx+04] } Я вот смотрю на скрипт и вижу одну вещь. Я заметил, что действия происходят в библиотеке VCRUNTIME140.memcpy . Насколько это нормально? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 4 минуты назад, mahonya сказал: Верно заметил попробуй так, вдруг прокатит :))) ( но посмотри видео) Спойлер [ENABLE] aobscanmodule(stam,VCRUNTIME140.dll,8B 0A 89 08 C3 0F 1F 00) alloc(newmem,$1000,stam) label(code) label(return) registersymbol(stam) newmem: mov ecx,[rax+0A68] code: mov [rax],ecx ret jmp return stam: jmp newmem return: [DISABLE] stam: db 8B 0A 89 08 C3 0F 1F 00 unregistersymbol(stam) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: VCRUNTIME140.memcpy+CA VCRUNTIME140.memcpy+AD: C3 - ret VCRUNTIME140.memcpy+AE: 66 90 - nop 2 VCRUNTIME140.memcpy+B0: 4C 8B 02 - mov r8,[rdx] VCRUNTIME140.memcpy+B3: 0F B7 4A 08 - movzx ecx,word ptr [rdx+08] VCRUNTIME140.memcpy+B7: 44 0F B6 4A 0A - movzx r9d,byte ptr [rdx+0A] VCRUNTIME140.memcpy+BC: 4C 89 00 - mov [rax],r8 VCRUNTIME140.memcpy+BF: 66 89 48 08 - mov [rax+08],cx VCRUNTIME140.memcpy+C3: 44 88 48 0A - mov [rax+0A],r9l VCRUNTIME140.memcpy+C7: C3 - ret VCRUNTIME140.memcpy+C8: 8B 0A - mov ecx,[rdx] // ---------- INJECTING HERE ---------- VCRUNTIME140.memcpy+CA: 89 08 - mov [rax],ecx // ---------- DONE INJECTING ---------- VCRUNTIME140.memcpy+CC: C3 - ret VCRUNTIME140.memcpy+CD: 0F 1F 00 - nop dword ptr [rax] VCRUNTIME140.memcpy+D0: 8B 0A - mov ecx,[rdx] VCRUNTIME140.memcpy+D2: 44 0F B6 42 04 - movzx r8d,byte ptr [rdx+04] VCRUNTIME140.memcpy+D7: 89 08 - mov [rax],ecx VCRUNTIME140.memcpy+D9: 44 88 40 04 - mov [rax+04],r8l VCRUNTIME140.memcpy+DD: C3 - ret VCRUNTIME140.memcpy+DE: 66 90 - nop 2 VCRUNTIME140.memcpy+E0: 8B 0A - mov ecx,[rdx] VCRUNTIME140.memcpy+E2: 44 0F B7 42 04 - movzx r8d,word ptr [rdx+04] } 7 минут назад, mahonya сказал: Я вот смотрю на скрипт и вижу одну вещь. Я заметил, что действия происходят в библиотеке VCRUNTIME140.memcpy . Насколько это нормально? не нормально - нужно выходить на игровую инструкцию Ссылка на комментарий Поделиться на другие сайты Поделиться
mahonya Опубликовано 10 февраля, 2022 Автор Поделиться Опубликовано 10 февраля, 2022 (изменено) 15 минут назад, Garik66 сказал: видео все-таки ты не посмотрел Блин, у меня уже глаза плывут от белого фона сайта, после резкого перехода с IDE с темной темы, я неправильно прочитал тебя) Я читаю как "видео посмотрел" ? По поводу выполнения кода после я понял, это второе, я просто первым делом хочу решить основную проблему. 3 минуты назад, Garik66 сказал: нужно выходить на игровую инструкцию Как это сделать ? З.Ы. Видео посмотрел) И вообще, приметил кучу видео, которые буду позже смотреть) Изменено 10 февраля, 2022 пользователем mahonya Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 1 минуту назад, mahonya сказал: Как это сделать ? реверсить скрипт попробовал? не прокатило? Ссылка на комментарий Поделиться на другие сайты Поделиться
mahonya Опубликовано 10 февраля, 2022 Автор Поделиться Опубликовано 10 февраля, 2022 1 минуту назад, Garik66 сказал: скрипт попробовал? не прокатило? Краш( Полагаю, нужно в игровой код переходить. Только бы еще разобраться как грамотно это сделать) Полез ковыряться 9 минут назад, Garik66 сказал: нужно выходить на игровую инструкцию Вообще странно, все, что пытаюсь брейкпоинтом поймать, все выводит к VCRUNTIME140.dll . Это нужно через трасировку искать игровую инструкцию ? Ссылка на комментарий Поделиться на другие сайты Поделиться
mahonya Опубликовано 10 февраля, 2022 Автор Поделиться Опубликовано 10 февраля, 2022 46 минут назад, Garik66 сказал: нужно выходить на игровую инструкцию Так, я немного в тупике. Есть подсказки что можно попробовать ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 25 минут назад, mahonya сказал: Так, я немного в тупике. Есть подсказки что можно попробовать ? быстро не ответишь так как эти инструкции работают со многими адресами, нужен вначале фильтр (из-за этого кстати и вылет, т.к. ты меняешь не только нужное тебе значение). а во вторых тебе нужно попасть через ret. на участок кода, откуда он прыгает сюда. короче смотри видосы. изучай Ссылка на комментарий Поделиться на другие сайты Поделиться
Partizan Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 1. Игра на Unreal Engine 4. Игры на этом движке с особенностями. 2. Эта инструкция работает с множеством адресов 3.Начало структуры не в RAX а в R12 Спойлер VCRUNTIME140.memcpy+11C: 7FFD14621409 - C3 - ret 7FFD1462140A - 8B 0A - mov ecx,[rdx] 7FFD1462140C - 89 08 - mov [rax],ecx << 7FFD1462140E - C3 - ret 7FFD1462140F - 90 - nop RAX=000001F332DDC2C4 RBX=0000000000000000 RCX=000000004333EC58 RDX=00000075CDACEA58 RSI=000001F32A437840 RDI=000001F3196D7080 RSP=00000075CDACE898 RBP=00000075CDACE8C0 RIP=00007FFD1462140E R8=0000000000000004 R9=00007FFD1462140A R10=00007FFD14620000 R11=000001F332DDC2C4 R12=000001F332DDBA40 R13=00007FF798E46430 R14=00000075CDACEAB0 R15=0000000000000000 1.Поставил бряк на начало структуры(на правильное начало) 2.Сделал правильный скрипт. Спойлер [ENABLE] aobscanmodule(Stamina,DrugDealerSimulator-Win64-Shipping.exe,4C 8B ? 4C 8D ? ? ? 48 8B ? 48 8B ? 41 FF ? ? ? ? ? 48 8B ? ? ? 0F 28) alloc(newmem,$1000,Stamina) label(return) registersymbol(Stamina) newmem: fld [rbx+880] fstp [rbx+884] mov r9,[rbx] lea r8,[rsp+40] jmp return Stamina: jmp newmem nop 3 return: [DISABLE] Stamina: db 4C 8B 0B 4C 8D 44 24 40 unregistersymbol(Stamina) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: DrugDealerSimulator-Win64-Shipping.exe+1734E4F DrugDealerSimulator-Win64-Shipping.exe+1734E28: E8 03 E9 FF FE - call DrugDealerSimulator-Win64-Shipping.exe+733730 DrugDealerSimulator-Win64-Shipping.exe+1734E2D: 48 85 C0 - test rax,rax DrugDealerSimulator-Win64-Shipping.exe+1734E30: 74 32 - je DrugDealerSimulator-Win64-Shipping.exe+1734E64 DrugDealerSimulator-Win64-Shipping.exe+1734E32: 48 8B CF - mov rcx,rdi DrugDealerSimulator-Win64-Shipping.exe+1734E35: F3 0F 11 74 24 40 - movss [rsp+40],xmm6 DrugDealerSimulator-Win64-Shipping.exe+1734E3B: E8 80 85 01 FF - call DrugDealerSimulator-Win64-Shipping.exe+74D3C0 DrugDealerSimulator-Win64-Shipping.exe+1734E40: 48 8B 57 08 - mov rdx,[rdi+08] DrugDealerSimulator-Win64-Shipping.exe+1734E44: 48 8B C8 - mov rcx,rax DrugDealerSimulator-Win64-Shipping.exe+1734E47: 48 8B D8 - mov rbx,rax DrugDealerSimulator-Win64-Shipping.exe+1734E4A: E8 01 E9 FF FE - call DrugDealerSimulator-Win64-Shipping.exe+733750 // ---------- INJECTING HERE ---------- DrugDealerSimulator-Win64-Shipping.exe+1734E4F: 4C 8B 0B - mov r9,[rbx] // ---------- DONE INJECTING ---------- DrugDealerSimulator-Win64-Shipping.exe+1734E52: 4C 8D 44 24 40 - lea r8,[rsp+40] DrugDealerSimulator-Win64-Shipping.exe+1734E57: 48 8B D0 - mov rdx,rax DrugDealerSimulator-Win64-Shipping.exe+1734E5A: 48 8B CB - mov rcx,rbx DrugDealerSimulator-Win64-Shipping.exe+1734E5D: 41 FF 91 00 02 00 00 - call qword ptr [r9+00000200] DrugDealerSimulator-Win64-Shipping.exe+1734E64: 48 8B 7C 24 48 - mov rdi,[rsp+48] DrugDealerSimulator-Win64-Shipping.exe+1734E69: 0F 28 74 24 20 - movaps xmm6,[rsp+20] DrugDealerSimulator-Win64-Shipping.exe+1734E6E: 48 83 C4 30 - add rsp,30 DrugDealerSimulator-Win64-Shipping.exe+1734E72: 5B - pop rbx DrugDealerSimulator-Win64-Shipping.exe+1734E73: C3 - ret DrugDealerSimulator-Win64-Shipping.exe+1734E74: CC - int 3 } Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 1 час назад, Partizan сказал: 2.Сделал правильный скрипт. Предоставлять готовое решение без объяснений - медвежья услуга пользователю, который хочет научиться. Футакделать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Partizan Опубликовано 10 февраля, 2022 Поделиться Опубликовано 10 февраля, 2022 А вообще касательно UE4. Ищется указатель на UWorld и уже от него строится цепочка указателей. Картинка Не ту игру вы выбрали для пробы Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения