Значит есть такая задумка, мне нужно чтобы функция ExportAndInjectDLL для подгрузки dll карту из первой версии мемхака (см. RenderEdge) заработала во второй версии мемхака (см. Детект урона на мемхаке).
Я полностью проследил весь путь по каждой библиотеке и это ужасно... есть много общих функций, которые внутри совсем другие, поэтому вижу только 2 пути решения:
  1. Разобраться как подгружать dll на второй версии мемхака, к сожалению никакой инфы так и не нашел
  2. Переименовать ручками все функции, чтобы 2 мемхака заработали на одной карте, вот во второй способ я более верю, но это очень большой объём и высоки шансы что вообще я просто всё запорю.
Поэтому решил собрать как можно больше инфы и получить ответы на след вопросы:
  1. Как быстро обфусцировать код, сохранив его работоспособным и убрать конфликты
  2. Подгрузить dll способом второго мемхака
  3. И каким иным способом мне добиться работоспособности обоих версий мемхака одновременно?
  4. Если всё вышеперчисленное НЕВОЗМОЖНО!, то всё таки мне нужны советы, как вручную без ошибок правильно переименовать все функции в коде, пока что в голове только проскакивают варианты это разложение всех библиотек в 1 файл в блокноте и через CTRL+F сразу находить и переименовывать всё что вижу....

Ну содержимое у restore само собой разное, в детекте урона новый хук на выход, вам нужна функция загрузки библиотеки?
Это же дело над:

function LoadLibrary takes string nDllName returns integer
    if pLoadLibraryA == 0 then
        set pLoadLibraryA = GetModuleProcAddress("Kernel32.dll", "LoadLibraryA" )
    endif
    if pLoadLibraryA != 0 then
        return CallStdcallWith1Args(pLoadLibraryA,GetStringAddress(nDllName))
    endif
 
    return 0
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
32
Ну мб авторам кинешь ссылки на исходники длтахелпера и дополнят резистом к магии и еще чем?
А кстати вот
function LibFeaturesFullEnable takes nothing returns nothing
call EnableLibFeatures(LIB_Feature_AttackSpeed+LIB_Feature_MoveSpeed+LIB_Feature_ItemText+LIB_Feature_UnitHP_MP+LIB_Feature_CUSTOM_FPS_INFO+LIB_Feature_COOLDOWNFIX+LIB_Feature_MANABAR+LIB_Feature_HPBAR+LIB_Feature_Widescreen+LIB_Feature_MutePlayer+LIB_Feature_AllySkillViewer+LIB_Feature_ClickHelper)
endfunction
constant integer LIB_Feature_AttackSpeed=0x1
constant integer LIB_Feature_MoveSpeed=0x2
constant integer LIB_Feature_ItemText=0x4
constant integer LIB_Feature_UnitHP_MP=0x8
constant integer LIB_Feature_CUSTOM_FPS_INFO=0x10
constant integer LIB_Feature_COOLDOWNFIX=0x20
constant integer LIB_Feature_MANABAR=0x40
constant integer LIB_Feature_HPBAR=0x80
constant integer LIB_Feature_FileHelper=0x100
constant integer LIB_Feature_Widescreen=0x200
constant integer LIB_Feature_MutePlayer=0x400
constant integer LIB_Feature_AllySkillViewer=0x800
constant integer LIB_Feature_ClickHelper=0x1000function DisableLibFeatures takes integer flags returns nothing
if pDisableFeatures == 0 then 
set pDisableFeatures = GetModuleProcAddress(EXTRADLLNAME, "DisableFeatures")
endif
if pDisableFeatures != 0 then
call CallStdCallWith1Args(pDisableFeatures,flags)
endif
endfunction

function EnableLibFeatures takes integer flags returns nothing
if pEnableFeatures == 0 then 
set pEnableFeatures = GetModuleProcAddress(EXTRADLLNAME, "EnableFeatures")
endif
if pEnableFeatures != 0 then
call CallStdCallWith1Args(pEnableFeatures,flags)
endif
endfunction
Код для управления и настроек дотахелпера.
33
Ахтунг! quq_CCCP:
Ну содержимое у restore само собой разное, в детекте урона новый хук на выход, вам нужна функция загрузки библиотеки?
Это же дело над:

function LoadLibrary takes string nDllName returns integer
    if pLoadLibraryA == 0 then
        set pLoadLibraryA = GetModuleProcAddress("Kernel32.dll", "LoadLibraryA" )
    endif
    if pLoadLibraryA != 0 then
        return CallStdcallWith1Args(pLoadLibraryA,GetStringAddress(nDllName))
    endif
 
    return 0
endfunction
Не работает, он подгружает dll только из корня игры, а надо чтобы из импорта из карты =(, просто у меня одна копия dll оказывается затерялась, поэтому показалось, что работает =(
function ExportDllFromMpqAndInjectToWarcraft takes string source, string dest returns nothing
    call ExportFileFromMpq(source,dest)
    call LoadLibrary(dest)
endfunction
А что вот это у нас такое? какой путь надо использовать? мб в комбинации с первым вариантом должно работать
Пока *опа горела, вроде получилось, воткнул ExportFileFromMpq, где source и dest одно и тоже, добавил глобалку set pExportFromMpq = GameDLL + 0x702C50,
И получается наш файл навсегда оказался в коревой папке с варом
а там и до exe/bat не далеко, аяяяй конечно я этого делать не буду
32
Он распакует длл из мпк в папку что укажешь, а потом запускает.
33
quq_CCCP, чисто теоретически, мемхак способен выйти из папки варкрафта?
32
вот код запуска:
// source File in mpq, dest File in disk, libname File name without path
function ExportDllFromMpqAndInjectToWarcraft takes string source, string dest returns nothing
    if GetModuleHandle( source ) != 0 then
        return
    endif
    call ExportFileFromMpq(source,dest)
    call LoadLibrary(dest)
endfunction
Он и извлекает и запускает.
32
Bergi_Bear, ну лич открывал браузер и инфу отправлял, делал авто скачку новой версии карты.
33
Да, но это делал только Лич, простым смертым не дано такие чудеса тварить
16
да хоспади, там всё проще паренной репы
выбираете, что вам надо, и ищете в WinAPI подобное
а потом делаете вызов с нужным кол-вом аргументов с конкретными параметрами
function LoadLibrary takes string nDllName returns integer
    if pLoadLibraryA == 0 then
        set pLoadLibraryA = GetModuleProcAddress("Kernel32.dll", "LoadLibraryA" )
    endif
    if pLoadLibraryA != 0 then
        return CallStdcallWith1Args(pLoadLibraryA,GetStringAddress(nDllName))
    endif
 
    return 0
endfunction
туда отправляется длл, имя функции, параметры, всё крайне просто. гугл в помощь
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.