partoftheworlD
-
Постов
2 687 -
Зарегистрирован
-
Посещение
-
Победитель дней
172
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные partoftheworlD
-
-
-
Новичок и уже трейнеры хочешь делать хм ну ладно, тогда тебе надо сделать снимок модулей, перебрать и найти нужный, вернуть базовый адрес найденного модуля. Работать с ним. Тебе показали примеры рабочего кода поищи аналоги этих функций на delphi вот уже будет опыт. Помочь тебе помогут, если есть какие-нибудь наработки, а если хочешь исходник, то поищи в гугле или гитхабе их полным полно.
-
-
Структура
Скрытый текстstruct __declspec(align(8)) struct_WeaponChatacteristcs { _QWORD qwPointer; byte unknown_10; byte gap1[7]; byte unknown_9; byte gap2[4]; byte unknown_11; byte gap3[10]; int iShooting_mode_; float fTime2NextShotBuffer; float fTime2NextShot; int iShot_Count_; byte gap4[4]; int iShot_Count; byte gap5[16]; int iterator; BYTE bShooting; byte gap6[12]; int iSet_shooting_mode; byte gap7[44]; float Zoom; byte gap8[12]; float fRecoil_x; float fRecoil_Y; BYTE bAim_active; byte bIDK; byte gap2[1]; byte bIDK3; int iShooting_mode; float fFov; byte gap9[55]; float fBuffer; int gap10[4]; byte bunknown; byte gap11[20]; float fDeltaTime; byte gap12[72]; byte iIDK6; byte gap13[29]; int iIDK4; byte gap14[5]; byte value; byte gap15[14]; byte iIDK5; byte gap16[7]; float fIDK6; byte gap17[180]; byte bIDK6; byte gap18[3]; byte bIDK8; byte gap19[3]; byte unknown_5; byte gap20[3]; byte unknown_7; byte gap21[26]; byte bIDK7; float fTime2NextShotReverse; };
Восстановленный код выстрела
Скрытый текстCharacteristics = Characteristics_of_weapon_1; v3 = 0; if ( GetObjectID(Characteristics_of_weapon_1) || ((v4 = *&Characteristics->iIDK6 == 0, LODWORD(Pointer_32) = (*(Characteristics->qwPointer + 0x20i64))(Characteristics), v4) ? (Pointer_32_BE0_or_BD8 = *(Pointer_32 + 0xBE0)) : (Pointer_32_BE0_or_BD8 = *(Pointer_32 + 0xBD8)), GetObjectID(Pointer_32_BE0_or_BD8)) ) { SetRecoil(Characteristics, *&fTime2NextShot); } LOBYTE(Fired_cartridges) = Get_Number_of_Bagged_ammo(Characteristics); if ( Fired_cartridges ) { if ( Crosshair_Active ) Aim(Characteristics); if ( (*(Characteristics->qwPointer + 0x28i64))(Characteristics) ) { LODWORD(Pointer_20_) = (*(Characteristics->qwPointer + 0x20i64))(Characteristics); if ( *(Pointer_20_ + 0xFD8) > 0.0 ) { Characteristics->bShooting = Characteristics->iShooting_mode_ == 2 && Characteristics->bShooting; v9 = Characteristics->qwPointer; *&Characteristics->unknown_5 = -1; // 0x258 *&Characteristics->unknown_7 = 0; // 0x25C Characteristics->bIDK3 = 0; Characteristics->iShooting_mode = 0; Characteristics->iShooting_mode_ = 0; (*(v9 + 48))(Characteristics); LODWORD(Characteristics->fTime2NextShot) = 0; LODWORD(Characteristics->fTime2NextShotBuffer) = fTime2NextShot; } } GetTimeDelta(Characteristics, *&fTime2NextShot); if ( Characteristics->fBuffer > 0.0 ) { (*(Characteristics->qwPointer + 0x30i64))(Characteristics); *&fTime2NextShot = *&fTime2NextShot - Characteristics->fBuffer; if ( *&fTime2NextShot > 0.30000001 ) LODWORD(Characteristics->fBuffer) = -1082130432; } if ( Characteristics->bShooting && (*(Characteristics->qwPointer + 40i64))(Characteristics) ) { (Allows2shot_Func)(Characteristics, fTime2NextShot); } else { LODWORD(v10) = (*(Characteristics->qwPointer + 0x20i64))(Characteristics); if ( *(*(v10 + 0xBA0) + 0x10i64) ) (*(Characteristics->qwPointer + 32i64))(Characteristics); } if ( Characteristics->iShooting_mode_ != 2 ) *&Characteristics->bunknown = sub_CC42F0(Characteristics); if ( (Characteristics->bAim_active || byte_1C21756) && !sub_CC74B0(Characteristics) ) sub_CC1600(0, Characteristics, 1, Characteristics->bIDK, *&fTime2NextShot); sub_CC73F0(Characteristics, *&fTime2NextShot); sub_CC01F0(Characteristics, *&fTime2NextShot); sub_CC08E0(Characteristics, *&fTime2NextShot); sub_CC6A80(Characteristics); SetFov(Characteristics, fTime2NextShot); LODWORD(v11) = (*(Characteristics->qwPointer + 32i64))(Characteristics); DeltaTime = IGSObject::GetTimeDelta((v11 + 40)); Pointer = Characteristics->qwPointer; fTime2NextShotBuffer_1 = DeltaTime + Characteristics->fTime2NextShotReverse; Characteristics->fTime2NextShotReverse = fTime2NextShotBuffer_1; if ( (*(Pointer + 40))(Characteristics) ) Characteristics[1].unknown_9 = 0; if ( Characteristics->iShooting_mode_ != 2 ) sub_CBF900(Characteristics); ishooting_mode = Characteristics->iShooting_mode_; if ( !ishooting_mode ) { LODWORD(v26) = (*(Characteristics->qwPointer + 32i64))(Characteristics); LODWORD(iIDK4) = (*(*v26 + 0x758i64))(v26, *&Characteristics->iIDK6);// iIDK6 = -1.0 iIDK4_1 = iIDK4; if ( (*(Characteristics->qwPointer + 40i64))(Characteristics) ) { if ( !iIDK4_1 || sub_CCC2B0(Characteristics) || !sub_CC4A90(Characteristics, 0, 0) || (LODWORD(v30) = (*(Characteristics->qwPointer + 32i64))(Characteristics), (*(*v30 + 2568i64))(v30)) ) { if ( (Get_Shooting_Mode(Characteristics) == 3 || Get_Shooting_Mode(Characteristics) == 4) && -1.0 != Characteristics->fIDK6 // iIDK5 = -1.0 после выстрела устанавливает значение 2434 или 3569 && (*(Characteristics->qwPointer + 40i64))(Characteristics) ) { a1a = qword_1C22160; v41 = dword_1C22168; Shot(&a1a, Characteristics, *&dword_1C22168); } goto MakeShot; } LODWORD(v31) = (*(Characteristics->qwPointer + 32i64))(Characteristics); if ( !sub_AC7C80(v31) ) { sub_CC4A10(Characteristics, 0i64); goto MakeShot; } LODWORD(v32) = (*(Characteristics->qwPointer + 32i64))(Characteristics); LOBYTE(v3) = *&Characteristics->iIDK6 == 0; LODWORD(v33) = (*(*v32 + 1880i64))(v32, v3); v34 = v33; bCondition = !sub_CCC2B0(Characteristics) && sub_CC4A90(Characteristics, 0, 0); v36 = v34 && !*(v34 + 64); if ( !bCondition ) goto MakeShot; v29 = v36 == 0; } else { v29 = Characteristics[1].unknown_9 == 0; } if ( !v29 ) sub_CC4A10(Characteristics, 0i64); goto MakeShot; } v16 = ishooting_mode - 1; if ( v16 ) { v17 = v16 - 1; if ( !v17 ) { sub_CBD1F0(Characteristics); if ( fTime2NextShotBuffer_1 < Characteristics->fTime2NextShot ) { if ( ((Get_Shooting_Mode(Characteristics) == 3 || Get_Shooting_Mode(Characteristics) == 4) && (fTime2NextShotBuffer_1 = -1.0, -1.0 != Characteristics->fIDK6) && (*(Characteristics->qwPointer + 40i64))(Characteristics) || Get_Shooting_Mode(Characteristics) == 2 && Characteristics->iterator > 0 && (*(Characteristics->qwPointer + 40i64))(Characteristics)) && (a1a = qword_1C22160, fTime2NextShotBuffer_1 = *&dword_1C22168, v41 = dword_1C22168, Shot(&a1a, Characteristics, *&dword_1C22168)) ) { if ( Get_Shooting_Mode(Characteristics) == 2 ) --Characteristics->iterator; } else { Characteristics->bShooting = Characteristics->iShooting_mode_ == 2 && Characteristics->bShooting; v23 = Characteristics->qwPointer; *&Characteristics->unknown_5 = -1; *&Characteristics->unknown_7 = 0; Characteristics->bIDK3 = 0; Characteristics->iShooting_mode = 0; Characteristics->iShooting_mode_ = 0; (*(v23 + 48))(Characteristics); LODWORD(Characteristics->fTime2NextShot) = 0; Characteristics->fTime2NextShotBuffer = fTime2NextShotBuffer_1; } } LODWORD(Characteristics_of_weapon_Pointer) = (*(Characteristics->qwPointer + 32i64))(Characteristics); Characteristics->fTime2NextShot = IGSObject::GetTimeDelta((Characteristics_of_weapon_Pointer + 0x28)) + Characteristics->fTime2NextShot; goto MakeShot; } v18 = v17 - 1; if ( !v18 ) { LODWORD(v20) = (*(Characteristics->qwPointer + 32i64))(Characteristics); LOBYTE(v3) = *&Characteristics->iIDK6 == 0; LODWORD(v21) = (*(*v20 + 1880i64))(v20, v3); if ( !v21 || (LODWORD(v22) = (*(Characteristics->qwPointer + 32i64))(Characteristics), sub_AC7BF0(v22)) ) sub_CC0C00(Characteristics); goto MakeShot; } if ( v18 != 1 || !sub_CCB540(Characteristics) ) { MakeShot: sub_CC03C0(Characteristics); if ( Characteristics->iShooting_mode_ != 2 ) *&Characteristics->bunknown = sub_CC42F0(Characteristics); LOBYTE(Fired_cartridges) = (*(Characteristics->qwPointer + 40i64))(Characteristics); if ( !Fired_cartridges ) { Fired_cartridges = Characteristics->iShot_Count; if ( Characteristics->iShot_Count_ != Fired_cartridges ) { iShooting_Mode = Characteristics->iShooting_mode_; if ( iShooting_Mode != 2 ) { v38 = *&Characteristics->gap11[12]; Characteristics->iShot_Count = (Fired_cartridges + 1) % 32; if ( *&Characteristics->gap11[8] != v38 && (iShooting_Mode == 3 || iShooting_Mode == 4) ) *&Characteristics->gap11[8] = v38; a1a = qword_1C22160; v41 = dword_1C22168; LOBYTE(Fired_cartridges) = Shot(&a1a, Characteristics, *&dword_1C22168); } } } return Fired_cartridges; } if ( Characteristics->iShooting_mode_ == 2 && Characteristics->bShooting ) { Characteristics->bShooting = 1; Zeroing: v19 = Characteristics->qwPointer; *&Characteristics->unknown_5 = -1; *&Characteristics->unknown_7 = 0; Characteristics->bIDK3 = 0; Characteristics->iShooting_mode = 0; Characteristics->iShooting_mode_ = 0; (*(v19 + 48))(Characteristics); LODWORD(Characteristics->fTime2NextShot) = 0; Characteristics->fTime2NextShotBuffer = fTime2NextShotBuffer_1; goto MakeShot; } } else { (*(Characteristics->qwPointer + 48i64))(Characteristics); LastShotTime = fTime2NextShotBuffer_1 - Characteristics->fTime2NextShotBuffer; sub_CBD1F0(Characteristics); if ( LastShotTime <= fTime2NextShotBuffer_1 ) goto MakeShot; if ( Characteristics->iShooting_mode_ == 2 && Characteristics->bShooting ) { Characteristics->bShooting = 1; goto Zeroing; } } Characteristics->bShooting = 0; goto Zeroing; } return Fired_cartridges; }
В прикрепленных файл в виде html восстановленного код он с подсветкой.
- 1
-
Сегодня как раз делал выносливость. У меня полоска 1.75 максимальное значение может из-за 250 легендарного уровня. Могу сразу таблицу кинуть, если нужно.
Скрытый текст{ Game : DyingLightGame.exe Version: Date : 2016-06-01 Author : partoftheworlD This script does blah blah blah } [ENABLE] aobscanmodule(stamina,gamedll_x64_rwdi.dll,F3 0F 11 7B 10 0F 28 7C 24 60) // should be unique alloc(newmem,$1000,"gamedll_x64_rwdi.dll"+C02AC7) label(code) label(return) newmem: mov [rbx+10],(float)2.0 jmp return code: movss [rbx+10],xmm7 jmp return stamina: jmp newmem return: registersymbol(stamina) [DISABLE] stamina: db F3 0F 11 7B 10 unregistersymbol(stamina) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "gamedll_x64_rwdi.dll"+C02AC7 "gamedll_x64_rwdi.dll"+C02AA4: F3 0F 10 4B 10 - movss xmm1,[rbx+10] "gamedll_x64_rwdi.dll"+C02AA9: F3 41 0F 5C C8 - subss xmm1,xmm8 "gamedll_x64_rwdi.dll"+C02AAE: 0F 2F CF - comiss xmm1,xmm7 "gamedll_x64_rwdi.dll"+C02AB1: 72 0D - jb gamedll_x64_rwdi.dll+C02AC0 "gamedll_x64_rwdi.dll"+C02AB3: 0F 2F C8 - comiss xmm1,xmm0 "gamedll_x64_rwdi.dll"+C02AB6: 76 05 - jna gamedll_x64_rwdi.dll+C02ABD "gamedll_x64_rwdi.dll"+C02AB8: 0F 28 F8 - movaps xmm7,xmm0 "gamedll_x64_rwdi.dll"+C02ABB: EB 03 - jmp gamedll_x64_rwdi.dll+C02AC0 "gamedll_x64_rwdi.dll"+C02ABD: 0F 28 F9 - movaps xmm7,xmm1 "gamedll_x64_rwdi.dll"+C02AC0: 0F 2F 3D 79 53 7D 00 - comiss xmm7,[gamedll_x64_rwdi.dll+13D7E40] // ---------- INJECTING HERE ---------- "gamedll_x64_rwdi.dll"+C02AC7: F3 0F 11 7B 10 - movss [rbx+10],xmm7 // ---------- DONE INJECTING ---------- "gamedll_x64_rwdi.dll"+C02ACC: 0F 28 7C 24 60 - movaps xmm7,[rsp+60] "gamedll_x64_rwdi.dll"+C02AD1: 73 07 - jae gamedll_x64_rwdi.dll+C02ADA "gamedll_x64_rwdi.dll"+C02AD3: C7 43 10 00 00 00 00 - mov [rbx+10],00000000 "gamedll_x64_rwdi.dll"+C02ADA: 44 0F 2E 4B 10 - ucomiss xmm9,[rbx+10] "gamedll_x64_rwdi.dll"+C02ADF: 0F 85 36 01 00 00 - jne gamedll_x64_rwdi.dll+C02C1B "gamedll_x64_rwdi.dll"+C02AE5: 48 8B 03 - mov rax,[rbx] "gamedll_x64_rwdi.dll"+C02AE8: 48 8B CB - mov rcx,rbx "gamedll_x64_rwdi.dll"+C02AEB: FF 50 20 - call qword ptr [rax+20] "gamedll_x64_rwdi.dll"+C02AEE: 48 8B F8 - mov rdi,rax "gamedll_x64_rwdi.dll"+C02AF1: 80 78 50 00 - cmp byte ptr [rax+50],00 }
-
-
-
Зачем вообще преобразовывать? QWORD/DWORD64 это и есть 0х7FF71E258080
и
var offset = new DWORD[] {0x488, 0x8, 0x58, 0x20, 0x30 };
На C++ с x64 приложениями ReadProcessMemory не хотел работать, пришлось использовать NtWow64QueryInformationProcess64, NtWow64ReadVirtualMemory64, чтобы получить процесс использовал IsWow64Process.
-
Указатели да и любые адреса используют WORD(2 байта) ,DWORD(4 байта), либо QWORD/DWORD64(8 байт),.
Можешь про типы почитать на msdn
- 1
-
Парень станет миллионером, если начнет продавать это. Я как фанат hl купил бы
-
Вроде в CE такого функционала нет. Если нет отладочной информации (которая создается при компиляции), то функции не будут подписаны, кроме импортированных системных. Как вариант, используя CE можно выйти на функцию используя "карту строк"(вид->все строки), но очень маленький шанс что выйдешь на то, что надо.
-
Цикл нашел, вот только игра крашится, если что-то делать с циклом, там при определенном значении происходит вызов и итератор в некоторые вызовы передается.
-
Думаю ради одного вопроса не стоит создавать новую тему, в общем такой вопрос можно ли, использовать CE Speedhack точечно, то есть не весь процесс игры ускорять, а определенный участок кода или придется эмулировать участок кода? Допустим у меня вызов инструкции происходит раз в 10 секунд, а мне надо чтобы вызывался каждую секунду.
-
-
5 часов назад, 2zolo2 сказал:
partoftheworlD, урок не сделаешь, по поиск количества npc, многим будет интересен?
Да там просто искать, ищешь свое здоровье, инструкция здоровья работает со всеми npc,дальше едешь на остров где убежище, выбираешь инструкцию и смотришь с какими адресами работает эта инструкция, на острове будет 1-3 адреса включая твой вот и ищешь сколько адресов появилось в 4 байтах, дальше едешь через мост к бомжам кол-во адресов увеличивается, считаешь количество адресов и отсеиваешь и так ездишь туда обратно в итоге у тебя всего 2 останется после всех отсеиваний, максимум 64 адреса будет в проверке с какими адресами работает инструкция т.е. 64 npc , если будешь кого-то убивать значение увеличится до 70. Урок если делать, то он затянется минут 10 и я не знаю что там объяснять даже, думаю не интересно будет просто смотреть на отсеивание значений 10 минут) Если, что не понятно спрашивай.
- 1
-
1 час назад, Baracuda сказал:
Здравствуйте помогите найти длину крюка, не могу уже всю перепробовал, что то не выходит пробовал и уменьшилось, увеличилось, изменилось, не изменилось.
Как можно выйти на адрес длины крюка
Тоже пытался искать в итоге не смог найти, складывается ощущение что там фиксированная длинна крюка Был мод увеличивающий длину крюка, можно разобрать и посмотреть как он работает. Или сделать 1 дамп с модом и второй дамп без мода и сравнить их.
-
1 час назад, 2zolo2 сказал:
partoftheworlD, попробуй найти ID персонажа и по нему выйти на код добавление в мир или по координаторам.
Так тоже пробовал не вышло, получилось выйти на функции работающие с добавлением/удалением npc, через поиск количества npc. Спасибо за помощь.
- 1
-
Это не то, что нужно, но спасибо.
- 1
-
3 часа назад, 2zolo2 сказал:
ищешь текстуру или модель, где она создается и там и разбираешь код
Через логер пробовал, но там только вершины показывает, и я не представляю что с ними делать. Если есть ссылка на статью/урок буду благодарен если кинешь.
- 1
-
Возник такой вопрос, как можно выйти на функцию которая создаёт NPC? Пробовал искать неизвестное с отсеиванием изменилось/не изменилось переходя/оставаясь на локациях, но ничего не нашёл. Предположив, что функция вызывается 1 раз в тех местах где ещё не был, при перемещении по локации. Может есть какая-нибудь альтернатива Function Hacker для x64? К примеру в играх типа AC, GTA и других с открытым миром, где-то создаются прохожие чтобы мир не был пустым.
-
Очень странный микрофон, сам настраивает усиление из-за чего появляется треск.
- 2
-
27 минуты назад, Garik66 сказал:
На .....-уро
к не тянет. 9 минут назад, Garik66 сказал:Да я думаю любые подойдут.
Спасибо за ответы, учту в новых видео.
- 2
-
7 минут назад, gmz сказал:
хммм разве не лучше чисто СЕ + x64_dbg?
Думаю это дело привычки, можно вместо ReClass использовать CE, но для меня он не очень удобен.
-
И какие еще мои статьи стоит в видео формат записать? На полках нашел микрофон, буду пробовать объяснять.
CE скрипты
in Общение
Опубликовано · Изменено пользователем NullAlex
Тег кода обязателен.
Вот возник такой вопрос, можно ли заскриптовать Cheat Engine как например ida, immunity debbuger, fiddler для выполнения рутинных задач или придется писать плагин? Хотел автоматизировать расстановку бряков/трассировки на 10 и более адресов.
Вроде по примеру на CE разобрался, как ставить бряки. Теперь такой вопрос, массив адресов указывать типа addresslist = { 0x01, 0x02 } и после в цикле перечислять addresslist[iterator] и .т.д?