Значит есть такая задумка, мне нужно чтобы функция 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
Bergi_Bear, есть, щяс скину.
Bergi_Bear, вот исходник
Автор не лич, поэтому вопросы к нему не уместны, либа настроена на доту и фишки доты, к примеру борьба с читерским софтом для доты.
33
quq_CCCP, Ну это я видел, вещь весьма тяжелая для понимания как с ней работать, но как она ведёт себя в игре - вполне всё ясно
32
Bergi_Bear, её настраивать под себя надо, у тебя же не дота. Ну кто у нас в С++ шарит, проси собрать нужные модули.
Готовую дотахелпер - можно скачать из доты лича, стоит запустить его карту - он появится в тебя в папке с варом.
33
Да я посмотрел,.. мне в принципе ничего и не надо из дота хелпера, мб разве только манабары, корректно работающие с широким экраном
33
Неее, Dream не мой, он просто с инета в формате mixtype идёт
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
Он и извлекает и запускает.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.