-
Постов
400 -
Зарегистрирован
-
Посещение
-
Победитель дней
26
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные gmz
-
-
8 часов назад, skip123 сказал:
Та я и удлял антивирус и в исключения добавлял и все по барабану вылет и все ребята на PG говорят тоже самое и у них пару минут игры и ба бах вылет на робочий стол
я несколько раз их фиксил после 1 релиза, перекачай.
9 часов назад, skip123 сказал:ps.-а как преминить этот фикс с видео а то уже запарился если не трудно обясни
качаешь снапшот x32_dbg, создаешь копию OFDR.exe (на всякий случай), открываешь OFDR.exe, ctrl+g -> 0xE2335D, 2 клика по выделеной инструкции, пишешь mov esi,0x1000 +галку Fill with NOP's. если крешанет - впиши свой размер видео в мб..
- 1
-
воу воу проще переустановить.. если юзер вин7 - качай билд где вшиты все обновы без бредохрени например от adguard. если вин10 - сайт мс
12 часа назад, afro228offical сказал:MalwareBytes и Avira Free Antivirus
о дааа, сток антивирь вин10 и то круче
2 часа назад, krocki сказал:Если что произойдёт, всегда можешь восстановить всё как было.
.. и снова получить 10050 штук изза зеродей
-
8 часов назад, skip123 сказал:
А нет ли решения краша трейнера в игре а то этот и для Red River выкидывают с игры через пару минут
именно эти версии? антивирь их детектит?
- 1
-
не все, кучей бредокода автор пытается не дать загрузить XTrapVa.dll и выгрузить если она уже загружена. а если ее загрузит что то через LoadLibraryW - фейл
-
9 минут назад, afro228offical сказал:
Библиотека времени выполнения - MDd
оно? https://msdn.microsoft.com/ru-ru/library/2kzt1wy3.aspx
значит /MDd? поменяй на /MD
-
1 час назад, Merlin сказал:
Решил в эту тему запостить: подскажите, пожалуйста, почему при запуске проекта через Visual студию память целевого процесса читается и поля формы трейнера заполняются значениями из целевого процесса (работает ReadMemory), а при запуске файла, скомпилированного из проекта exe'шника, с правами администратора не читается (т.е. нет никаких ошибок, просто все поля формы трейнера пустые)?
может права админа не нужны?
-
1 час назад, afro228offical сказал:
Мне нужно как-то к своей программе прицепить vcruntime140d.dll , чтобы она её не требовала и запускалась.
алеее тебе надо ОТКЛЮЧИТЬ дебаг билд и все станет норм само собой.. как ты это [CENSORED]о в релиз билд пихнул а? проект был создан на какой то древней студии и потом перенесен в новую?
1 час назад, afro228offical сказал:Где находится "импорт модуля" ?
CFFExplorer заюз для просмотра списка длок
-
14 часа назад, afro228offical сказал:
Что делать ?
пересоздать проект или методом тыка откл дебаг фичи
потом смотришь импорт модуля, VCRUNTIME140.dll MSVCP140.dll должны юзатся
-
https://developer.microsoft.com/ru-ru/windows/downloads/windows-10-sdk
хмм а разве оно не вшито в вс2015?
-
VCRUNTIME140D.dll MSVCP140D.dll
релиз билды идут без D, проверь настройки сборки
-
2 часа назад, Garik66 сказал:
И табличка:
на v1.27.0.52240 фейл
-
там еще подмена, короч какое то бредовое [CENSORED]о *facepalm
-
Некоторые особенности:
1 PE32 DLL 4.5 кб
2 Функция поиска паттерна
3 Паттерны текст вида
4 Функция обмена патч байтами
5 Если версия не совпадает - MessageBoxW и FreeLibrary
6 Клавиши работают только в активном окне игры
7 Меню и клавиши используют поток игры
8 Рисовка на базе D3DXCreateFontW->DrawTextW
9 100% unicodeNASM: https://www.nasm.us -> nasm-2.xx.xx-win64.zip -> nasm.exe
Linker: http://www.godevtool.com/Golink.zip -> golink.exe
Редактор: https://notepad-plus-plus.orgПриступим...
Создадим txt файл и переименуем в "dragon commander hack.asm"Открываем файл в notepad++
Добавим EntryPoint, структуры, импорт апи
Скрытый текстglobal DllMain struc RECT .left resd 1 .top resd 1 .right resd 1 .bottom resd 1 endstruc ;kernel32.dll extern DisableThreadLibraryCalls extern CreateThread extern CloseHandle extern GetModuleHandleW extern VirtualProtect extern FreeLibrary ;user32.dll extern GetFocus extern GetAsyncKeyState extern GetClientRect extern MessageBoxW ;d3dx9_43.dll extern D3DXCreateFontW
Создадим секцию кода
Скрытый текстsection .code
Добавим функцию DllMain, resd 1 - для пропуска адреса возврата а ret 3*4 значит что у функции 3 параметра.
Скрытый текстDllMain: struc .stack resd 1 .hInstDLL resd 1 .Reason resd 1 .Reserved resd 1 endstruc cmp dword[esp+.Reason],1 jnz .DLL_PROCESS_ATTACH push dword[esp+.hInstDLL] call [DisableThreadLibraryCalls] push 0 push 0 push dword[esp+.hInstDLL+2*4] push Init push 0x1000 push 0 call [CreateThread] push eax call [CloseHandle] mov al,1 .DLL_PROCESS_ATTACH: ret 3*4
Добавляем функцию инициализации, получаем базу/размер модулей из PE хидера, поиск патч опций, DX9Binding.dll там будем ставить хуки для менюхи.
Скрытый текстInit: struc .stack resd 3 .hInstDLL resd 1 endstruc push esi push edi push 0 call [GetModuleHandleW] mov esi,eax mov edi,[esi+60] ;IMAGE_DOS_HEADER.e_lfanew mov edi,[esi+edi+80] ;IMAGE_NT_HEADERS32.OptionalHeader+IMAGE_OPTIONAL_HEADER32.SizeOfImage push pAddGold1 push edi push esi call FindPattern test eax,eax jz .NotFound mov [aAddGold1],eax sub [bAddGold1+1],eax push pAddGold2 push edi push esi call FindPattern test eax,eax jz .NotFound mov [aAddGold2],eax sub [bAddGold2+1],eax push pAddResearchPoints push edi push esi call FindPattern test eax,eax jz .NotFound mov [aAddResearchPoints],eax sub [bAddResearchPoints+1],eax push pInstantCallDragon push edi push esi call FindPattern test eax,eax jz .NotFound mov [aInstantCallDragon],eax push pDragonHealth1 push edi push esi call FindPattern test eax,eax jz .NotFound mov [aDragonHealth1],eax push pDragonHealth2 push edi push esi call FindPattern test eax,eax jz .NotFound mov [aDragonHealth2],eax push pDragonEnergy push edi push esi call FindPattern test eax,eax jz .NotFound mov [aDragonEnergy],eax push pWeaponNoOverheat push edi push esi call FindPattern test eax,eax jz .NotFound mov [aWeaponNoOverheat],eax push pWeaponRapidFire push edi push esi call FindPattern test eax,eax jz .NotFound mov [aWeaponRapidFire],eax push pSkillNoCoolDown push edi push esi call FindPattern test eax,eax jz .NotFound mov [aSkillNoCoolDown],eax push DX9BindingDLL call [GetModuleHandleW] test eax,eax jz .NotFound mov esi,eax mov edi,[esi+60] ;IMAGE_DOS_HEADER.e_lfanew mov edi,[esi+edi+80] ;IMAGE_NT_HEADERS32.OptionalHeader+IMAGE_OPTIONAL_HEADER32.SizeOfImage push pD3DEndFrame push edi push esi call FindPattern test eax,eax jz .NotFound mov [aD3DEndFrame],eax sub [bD3DEndFrame+1],eax push pD3DresetDevice push edi push esi call FindPattern test eax,eax jz .NotFound mov [aD3DresetDevice],eax sub [bD3DresetDevice+1],eax push bD3DEndFrame.size push bD3DEndFrame push dword[aD3DEndFrame] call MemSwap push bD3DresetDevice.size push bD3DresetDevice push dword[aD3DresetDevice] call MemSwap pop edi pop esi ret 1*4 .NotFound: push 0x10+0x10000 ;MB_ICONERROR+MB_SETFOREGROUND push MsgTitle push MsgVersionUnsupported push 0 call [MessageBoxW] pop edi pop esi jmp [FreeLibrary]
Добавляем функцию поиска. Она не особо сложная, быстрая и может пропускать мусорные байты. Принимает паттерны текст вида.
Скрытый текстFindPattern: struc .stack resd 4 .Buffer resd 1 .Size resd 1 .Pattern resd 1 endstruc push ebx push esi push edi mov eax,[esp+.Buffer] mov ecx,[esp+.Size] add ecx,eax mov edx,[esp+.Pattern] .Next: lea esi,[eax-1] lea edi,[edx-2] .Check: add edi,2 mov bx,[edi] test bl,bl jz .Found add esi,1 cmp ecx,esi jz .NotFound cmp bx,'??' jz .Check sub bx,'00' cmp bh,10 jb .Skip1 sub bh,7 .Skip1: cmp bl,10 jb .Skip2 sub bl,7 .Skip2: shl bl,4 add bl,bh cmp [esi],bl jz .Check add eax,1 jmp .Next .NotFound: xor eax,eax .Found: pop edi pop esi pop ebx ret 3*4
и функцию обмена байтами, позволяет не копировать оригинал код для откл опций.
Скрытый текстMemSwap: struc .stack .OldProtect resd 1 .stacksize equ $-$$ resd 2 .Address resd 1 .Patch resd 1 .Size resd 1 endstruc push ebx sub esp,.stacksize lea eax,[esp+.OldProtect] push eax push 0x40 ;PAGE_EXECUTE_READWRITE push dword[esp+.Size+2*4] push dword[esp+.Address+3*4] call [VirtualProtect] mov eax,[esp+.Address] mov ecx,[esp+.Patch] mov edx,[esp+.Size] .Next: sub edx,1 mov bh,[eax+edx] mov bl,[ecx+edx] mov [eax+edx],bl mov [ecx+edx],bh jnz .Next lea eax,[esp+.OldProtect] push eax push dword[esp+.OldProtect+1*4] push dword[esp+.Size+2*4] push dword[esp+.Address+3*4] call [VirtualProtect] add esp,.stacksize pop ebx ret 3*4
Теперь создадим функцию меню.
Скрытый текстMenuHook: struc .stack .D3D_Device resd 1 .Rect resb RECT_size alignb 4 endstruc push ebp push esi push edi sub esp,.stack_size
Место где установили перехват - достает D3D_Device, нам он нужен для D3DXCreateFontW, сохраним его, а потом вернем игре.
Скрытый текстmov eax,[eax+0x138] ;device mov [esp+.D3D_Device],eax
Добавим код для проверки активности окна. Также код используется для получения hGameWnd, следовательно, после инжекта, меню нарисуется только после клика в окно игры.
Скрытый текстcall [GetFocus] cmp dword[hGameWnd],0 jnz .FirstClick mov [hGameWnd],eax jmp .SkipDraw .FirstClick: cmp [hGameWnd],eax jnz .SkipKeys
Добавим кнопку скрыть/показать меню. cmp + setz = 0/1 aka откл/вкл
Скрытый текстpush 0x2D ;VK_INSERT call [GetAsyncKeyState] cmp [kMenu+1],ah jz .Menu mov [kMenu+1],ah test ah,ah jz .Menu cmp byte[kMenu],0 setz [kMenu] .Menu: cmp byte[kMenu],0 jnz .SkipDraw
Добавляем все опции...
Скрытый текстpush 0x61 ;VK_NUMPAD1 call [GetAsyncKeyState] cmp [kAddGold+1],ah jz .AddGold mov [kAddGold+1],ah test ah,ah jz .AddGold cmp byte[kAddGold],0 setz [kAddGold] push bAddGold1.size push bAddGold1 push dword[aAddGold1] call MemSwap push bAddGold2.size push bAddGold2 push dword[aAddGold2] call MemSwap .AddGold: push 0x62 ;VK_NUMPAD2 call [GetAsyncKeyState] cmp [kAddResearchPoints+1],ah jz .AddResearchPoints mov [kAddResearchPoints+1],ah test ah,ah jz .AddResearchPoints cmp byte[kAddResearchPoints],0 setz [kAddResearchPoints] push bAddResearchPoints.size push bAddResearchPoints push dword[aAddResearchPoints] call MemSwap .AddResearchPoints: push 0x63 ;VK_NUMPAD3 call [GetAsyncKeyState] cmp [kInstantCallDragon+1],ah jz .InstantCallDragon mov [kInstantCallDragon+1],ah test ah,ah jz .InstantCallDragon cmp byte[kInstantCallDragon],0 setz [kInstantCallDragon] push bInstantCallDragon.size push bInstantCallDragon push dword[aInstantCallDragon] call MemSwap .InstantCallDragon: push 0x64 ;VK_NUMPAD4 call [GetAsyncKeyState] cmp [kDragonHealth+1],ah jz .DragonHealth mov [kDragonHealth+1],ah test ah,ah jz .DragonHealth cmp byte[kDragonHealth],0 setz [kDragonHealth] push bDragonHealth1.size push bDragonHealth1 push dword[aDragonHealth1] call MemSwap push bDragonHealth2.size push bDragonHealth2 push dword[aDragonHealth2] call MemSwap .DragonHealth: push 0x65 ;VK_NUMPAD5 call [GetAsyncKeyState] cmp [kDragonEnergy+1],ah jz .DragonEnergy mov [kDragonEnergy+1],ah test ah,ah jz .DragonEnergy cmp byte[kDragonEnergy],0 setz [kDragonEnergy] push bDragonEnergy.size push bDragonEnergy push dword[aDragonEnergy] call MemSwap .DragonEnergy: push 0x66 ;VK_NUMPAD6 call [GetAsyncKeyState] cmp [kWeaponNoOverheat+1],ah jz .WeaponNoOverheat mov [kWeaponNoOverheat+1],ah test ah,ah jz .WeaponNoOverheat cmp byte[kWeaponNoOverheat],0 setz [kWeaponNoOverheat] push bWeaponNoOverheat.size push bWeaponNoOverheat push dword[aWeaponNoOverheat] call MemSwap .WeaponNoOverheat: push 0x67 ;VK_NUMPAD7 call [GetAsyncKeyState] cmp [kWeaponRapidFire+1],ah jz .WeaponRapidFire mov [kWeaponRapidFire+1],ah test ah,ah jz .WeaponRapidFire cmp byte[kWeaponRapidFire],0 setz [kWeaponRapidFire] push bWeaponRapidFire.size push bWeaponRapidFire push dword[aWeaponRapidFire] call MemSwap .WeaponRapidFire: push 0x68 ;VK_NUMPAD8 call [GetAsyncKeyState] cmp [kSkillNoCoolDown+1],ah jz .SkillNoCoolDown mov [kSkillNoCoolDown+1],ah test ah,ah jz .SkillNoCoolDown cmp byte[kSkillNoCoolDown],0 setz [kSkillNoCoolDown] push bSkillNoCoolDown.size push bSkillNoCoolDown push dword[aSkillNoCoolDown] call MemSwap .SkillNoCoolDown:
После опций, добавим код создания шрифта и получения размера видимой области окна, также передвинем меню в правый угол а для копирования Rect структуры - используем SSE2.
Скрытый текст.SkipKeys: cmp byte[kMenu],0 jnz .SkipDraw cmp dword[hFont],0 jnz .SkipCreateFont push hFont push Font push 0 push 5 ;CLEARTYPE_QUALITY push 0 push 0 push 0 push 0 push 700 ;FW_BOLD push 0 push 15 push dword[esp+.D3D_Device+11*4] call [D3DXCreateFontW] push Rect push dword[hGameWnd] call [GetClientRect] add dword[Rect+RECT.top],3 mov eax,[Rect+RECT.right] sub eax,160 mov [Rect+RECT.left],eax sub dword[Rect+RECT.right],6 .SkipCreateFont: movdqu xmm0,[Rect] movdqu [esp+.Rect],xmm0 lea ebp,[esp+.Rect] mov esi,[hFont] mov edi,[esi] ;d3dx9core.h
Для вывода текста опций - используем DrawTextW
Скрытый текстpush 0xFF1C9ADB ;blue push 0x2 ;DT_RIGHT push ebp push Menu.size push Menu push 0 push esi call [edi+60] ;DrawTextW add [esp+.Rect+RECT.top],eax mov eax,0xFF1C9ADB ;blue mov ecx,0xFFFF0000 ;red cmp [kAddGold],cl cmovnz eax,ecx push eax push 0 push ebp push AddGold.size push AddGold push 0 push esi call [edi+60] ;DrawTextW add [esp+.Rect+RECT.top],eax mov eax,0xFF1C9ADB ;blue mov ecx,0xFFFF0000 ;red cmp [kAddResearchPoints],cl cmovnz eax,ecx push eax push 0 push ebp push AddResearchPoints.size push AddResearchPoints push 0 push esi call [edi+60] ;DrawTextW add [esp+.Rect+RECT.top],eax mov eax,0xFF1C9ADB ;blue mov ecx,0xFFFF0000 ;red cmp [kInstantCallDragon],cl cmovnz eax,ecx push eax push 0 push ebp push InstantCallDragon.size push InstantCallDragon push 0 push esi call [edi+60] ;DrawTextW add [esp+.Rect+RECT.top],eax mov eax,0xFF1C9ADB ;blue mov ecx,0xFFFF0000 ;red cmp [kDragonHealth],cl cmovnz eax,ecx push eax push 0 push ebp push DragonHealth.size push DragonHealth push 0 push esi call [edi+60] ;DrawTextW add [esp+.Rect+RECT.top],eax mov eax,0xFF1C9ADB ;blue mov ecx,0xFFFF0000 ;red cmp [kDragonEnergy],cl cmovnz eax,ecx push eax push 0 push ebp push DragonEnergy.size push DragonEnergy push 0 push esi call [edi+60] ;DrawTextW add [esp+.Rect+RECT.top],eax mov eax,0xFF1C9ADB ;blue mov ecx,0xFFFF0000 ;red cmp [kWeaponNoOverheat],cl cmovnz eax,ecx push eax push 0 push ebp push WeaponNoOverheat.size push WeaponNoOverheat push 0 push esi call [edi+60] ;DrawTextW add [esp+.Rect+RECT.top],eax mov eax,0xFF1C9ADB ;blue mov ecx,0xFFFF0000 ;red cmp [kWeaponRapidFire],cl cmovnz eax,ecx push eax push 0 push ebp push WeaponRapidFire.size push WeaponRapidFire push 0 push esi call [edi+60] ;DrawTextW add [esp+.Rect+RECT.top],eax mov eax,0xFF1C9ADB ;blue mov ecx,0xFFFF0000 ;red cmp [kSkillNoCoolDown],cl cmovnz eax,ecx push eax push 0 push ebp push SkillNoCoolDown.size push SkillNoCoolDown push 0 push esi call [edi+60] ;DrawTextW add eax,8 add [esp+.Rect+RECT.top],eax push 0xFF1C9ADB ;blue push 0x2 ;DT_RIGHT push ebp push About.size push About push 0 push esi call [edi+60] ;DrawTextW
Возвращаем игре D3D_Device, убираем стек буфер, восстанавливаем важные регистры и ставим ret для возврата на код игры
Скрытый текст.SkipDraw: mov eax,[esp+.D3D_Device] add esp,.stack_size pop edi pop esi pop ebp ret
Добавляем функцию освобождения ресурсов которые были созданы D3DXCreateFontW, если их не освободить - игра просто вылелит в момент изменения размера окна. Обнуление hFont нужно чтобы D3DXCreateFontW мог создать новый шрифт и для получения нового размера окна.
Скрытый текстD3DresetDeviceHook: push eax push ecx push edx cmp dword[hFont],0 jz .Skip mov eax,[hFont] mov ecx,[eax] ;d3dx9core.h push eax call [ecx+8] ;ReleaseFont mov dword[hFont],0 .Skip: pop edx pop ecx pop eax mov edi,ecx ;orig mov [esp+0x10+4],ebx ;orig ret
и остальные функции для обработки перехвата. там также находится "оригинал код" который был заменен на call
Скрытый текстAddGoldHook1: mov [esp+0x20+4],eax ;orig mov dword[eax+0x3C],1000 mov eax,[eax+0x3C] ;orig ret AddGoldHook2: mov dword[ecx+edx*4+0x480],100000 mov ecx,[ecx+edx*4+0x480] ;orig ret AddResearchPointsHook: mov dword[eax+0x44],1000 mov edx,[eax+0x44] pop ecx ;ret push edx ;orig push ecx lea ecx,[esp+0x5C+4] ;orig ret
Создадим секцию данных для: паттернов, патчей, строк
Скрытый текстsection .data pAddGold1 db '894424??8B403C50',0 bAddGold1 db 0xE8 dd AddGoldHook1-5 db 0x90,0x90 .size equ $-bAddGold1 pAddGold2 db '8B8C??????????8944????894C????39',0 bAddGold2 db 0xE8 dd AddGoldHook2-5 db 0x90,0x90 .size equ $-bAddGold2 pAddResearchPoints db '528D4C24??FF15????????6A06',0 bAddResearchPoints db 0xE8 dd AddResearchPointsHook-5 .size equ $-bAddResearchPoints pInstantCallDragon db '2BC8898E????????79',0 bInstantCallDragon db 0x29,0xC9 .size equ $-bInstantCallDragon pDragonHealth1 db '7D??8B4424348B0FD9',0 bDragonHealth1 db 0xEB .size equ $-bDragonHealth1 pDragonHealth2 db '7D06D805????????D835????????D95C????D944????D84D',0 bDragonHealth2 db 0x74 .size equ $-bDragonHealth2 pDragonEnergy db '7A06D947??D95F??8B',0 bDragonEnergy db 0x70 .size equ $-bDragonEnergy pWeaponNoOverheat db 'D987????????D887????????D99F????????D987',0 bWeaponNoOverheat db 0xD9,0xEE,0x90,0x90,0x90,0x90 .size equ $-bWeaponNoOverheat pWeaponRapidFire db 'E8????????3BF07C162B',0 bWeaponRapidFire db 0xB8,0x20,0x4E,0x00,0x00 .size equ $-bWeaponRapidFire pSkillNoCoolDown db '2BC8890E7906C7',0 bSkillNoCoolDown db 0x29,0xC9 .size equ $-bSkillNoCoolDown pD3DEndFrame db '8B80????????8B088B??????????50FFD28B',0 bD3DEndFrame db 0xE8 dd MenuHook-5 db 0x90 .size equ $-bD3DEndFrame pD3DresetDevice db '8BF9895C????39',0 bD3DresetDevice db 0xE8 dd D3DresetDeviceHook-5 db 0x90 .size equ $-bD3DresetDevice align 4,db 0 Menu dw __utf16__'Insert menu',0 .size equ ($-Menu-2)/2 align 4,db 0 AddGold dw __utf16__'Num1 add gold',0 .size equ ($-AddGold-2)/2 align 4,db 0 AddResearchPoints dw __utf16__'Num2 add research points',0 .size equ ($-AddResearchPoints-2)/2 align 4,db 0 InstantCallDragon dw __utf16__'Num3 instant call dragon',0 .size equ ($-InstantCallDragon-2)/2 align 4,db 0 DragonHealth dw __utf16__'Num4 dragon health',0 .size equ ($-DragonHealth-2)/2 align 4,db 0 DragonEnergy dw __utf16__'Num5 dragon energy',0 .size equ ($-DragonEnergy-2)/2 align 4,db 0 WeaponNoOverheat dw __utf16__'Num6 weapon no overheat',0 .size equ ($-WeaponNoOverheat-2)/2 align 4,db 0 WeaponRapidFire dw __utf16__'Num7 weapon rapid fire',0 .size equ ($-WeaponRapidFire-2)/2 align 4,db 0 SkillNoCoolDown dw __utf16__'Num8 skill no cooldown',0 .size equ ($-SkillNoCoolDown-2)/2 align 4,db 0 About dw __utf16__'by gmz',0 .size equ ($-About-2)/2 align 4,db 0 DX9BindingDLL dw __utf16__'DX9Binding.dll',0 align 4,db 0 Font dw __utf16__'Arial',0 align 4,db 0 MsgTitle dw __utf16__'',0 align 4,db 0 MsgVersionUnsupported dw __utf16__'Version unsupported!',0
Создадим секцию неинициализ. данных, которые не занимают место в длке
Скрытый текстsection .bss hGameWnd resd 1 hFont resd 1 Rect resb RECT_size aAddGold1 resd 1 aAddGold2 resd 1 aAddResearchPoints resd 1 aInstantCallDragon resd 1 aDragonHealth1 resd 1 aDragonHealth2 resd 1 aDragonEnergy resd 1 aWeaponNoOverheat resd 1 aWeaponRapidFire resd 1 aSkillNoCoolDown resd 1 aD3DEndFrame resd 1 aD3DresetDevice resd 1 kMenu resb 2 kAddGold resb 2 kAddResearchPoints resb 2 kInstantCallDragon resb 2 kDragonHealth resb 2 kDragonEnergy resb 2 kWeaponNoOverheat resb 2 kWeaponRapidFire resb 2 kSkillNoCoolDown resb 2
Сборка:
Скрытый текст@echo off ..\nasm.exe -f win32 "dragon commander hack.asm" ..\golink.exe /ni /nw /osversion 00060001 /version 00000000 /subsystemversion 00060001 /stacksize 0x10000 /stackinit 0x1000 /heapsize 0x10000 /heapinit 0x1000 /largeaddressaware /nxcompat /dynamicbase /base 0x10000000 /dll /entry DllMain "dragon commander hack.obj" kernel32.dll user32.dll d3dx9_43.dll if exist *.obj del *.obj pause
ps справка по опциям линкера на оф сайте.
- 6
-
как будто там еще что то кроме релиза есть
-
-
2 минуты назад, LIRW сказал:
Я имею введу делать быстрее, сам трейнер, а не то что он быстрее. Загрузил сразу форму вставил скрипт и всё. Минутное дело - если есть кулибины кто так делает на Fasm - я не знал.
я это и имел ввиду. там ведь также можно накодить 1 "ядро" и юзать его для всего подряд. в теме исходники прог (которая приват) посмотри, мож будет интересно
-
1 час назад, LIRW сказал:
А трейнеры на СЕ делаю - это куда быстрее чем на любом другом языке.
СЕ билдер отстой. на фасм/насм быстрее +стабильность выше
1 час назад, afro228offical сказал:Где я не понимаю ? в консольном приложении всё работает , а в win32 Нет .
как вариант пойти https://www.visualstudio.com/ru-ru/downloads/download-visual-studio-vs.aspx
и качнуть про 2015 в iso с апдейтом +пересоздать проект...
-
1 час назад, afro228offical сказал:
Написал свою копию wcscat . Возникла другая проблема . Как DWORD перевести в wchar_t[] ? Или свой перевод писать ?
facepalm* покажи кусок где вс фейлит на wcscat +лог
-
1 час назад, afro228offical сказал:
И можно будет string перевести в wchar_t[] ?
пхах ты все еще не можешь копирнуть строку? что за компиль?
-
ага без _s норм +warning (vs2015 upd 3)
-
8 минут назад, afro228offical сказал:
Может написать свою функцию , типа wcscat ?
лучше тогда на mingw64 перейти
хм раньше вс просто предупр. генерила если без _s
- 1
-
Только что, afro228offical сказал:
Так мне нужно не задавая размер
_s убери и размер буфера
- 1
-
23 минуты назад, afro228offical сказал:
Я знаю , что size_t numberOfElements . Но как его узнать ?
ты должен его сам задать, например WCHAR buffer[1024];
wcscpy_s(buffer,1024,text1);
wcscat_s(buffer,1024-ARRAYSIZE(text1),text2);- 1
-
вариант SendMessage и LB_GETTEXT:
Скрытый текст#include "windows.h" #include "wchar.h" #include "tlhelp32.h" LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){ static HWND hProcessList; static HWND hCurrentProcess; HFONT hFont; WCHAR Buffer[300]; PROCESSENTRY32 ProcessEntry; HANDLE hSnapshot; switch (uMsg){ case WM_CREATE: hFont = CreateFontW(15,6,0,0,FW_MEDIUM,0,0,0,DEFAULT_CHARSET,0,0,PROOF_QUALITY,DEFAULT_PITCH,L"Tahoma"); hProcessList = CreateWindowExW(WS_EX_CLIENTEDGE,L"LISTBOX",0,WS_VISIBLE+WS_CHILD+WS_VSCROLL+LBS_NOTIFY,4,4,276,200,hWnd,(HMENU)1,0,0); SendMessageW(hProcessList,WM_SETFONT,(WPARAM)hFont,1); ProcessEntry.dwSize = sizeof(PROCESSENTRY32); hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); while (Process32NextW(hSnapshot,&ProcessEntry)){ swprintf(Buffer,L"Id: %d %s",ProcessEntry.th32ProcessID,ProcessEntry.szExeFile); SendMessageW(hProcessList,LB_ADDSTRING,0,(LPARAM)Buffer); } CloseHandle(hSnapshot); break; case WM_COMMAND: if (LOWORD(wParam) == 1){ if (HIWORD(wParam) == LBN_SELCHANGE){ SendMessageW(hProcessList,LB_GETTEXT,SendMessageW(hProcessList,LB_GETCURSEL,0,0),(LPARAM)Buffer); MessageBoxW(hWnd,Buffer,L"",MB_OK); DWORD Id = _wtoi(Buffer+4); //skip "Id: " }} break; case WM_GETMINMAXINFO: MINMAXINFO *lpMinMaxInfo; lpMinMaxInfo = (MINMAXINFO*)lParam; lpMinMaxInfo->ptMinTrackSize.x = 300; lpMinMaxInfo->ptMinTrackSize.y = 250; break; case WM_LBUTTONDOWN: PostMessageW(hWnd,WM_NCLBUTTONDOWN,MK_RBUTTON,0); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProcW(hWnd,uMsg,wParam,lParam); } return 0; } void wmain(){ WNDCLASSEXW wcx; MSG msg; wcx.cbSize = sizeof(WNDCLASSEXW); wcx.style = 0; wcx.lpfnWndProc = WndProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = 0; wcx.hIcon = 0; wcx.hCursor = LoadCursorW(0,IDC_ARROW); wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcx.lpszMenuName = 0; wcx.lpszClassName = L"test window"; wcx.hIconSm = 0; RegisterClassExW(&wcx); ShowWindow(CreateWindowExW(0,L"test window",L"test window",WS_SYSMENU+WS_MINIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,0,0,0,0,0,0),SW_SHOW); while (GetMessageW(&msg,0,0,0)){TranslateMessage(&msg);DispatchMessageW(&msg);} ExitProcess(msg.wParam); }
17 час назад, holy сказал:Память выделяется динамически, в зависимости от входных данных )
апи имел ввиду. вс страхует нубов и прочих эпик идиотов xD
Operation Flashpoint Dragon Rising
in Для PC игр
Опубликовано
она в Operation Flashpoint Red River, давно доступен репак без xlive