,

Хак на память Warcraft3

» опубликован
» Способ реализации: vJass
» Тип: Наработка
» Версия Warcraft: 1.26 и ниже
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.


Просмотров: 50 468



» Лучшие комментарии


Bergi_Bear #501 - 4 месяца назад 0
quq_CCCP, А зачем по факту он нужен? я сделал систему мисов и критов основываясь на детекте урона и нормально всё, вообще буквально пара строчек
respect_gg #502 - 4 месяца назад 0
Bergi_Bear, ну ты наверное в случае миса/блока и т.д. хилишь юнита, но урон то все равно проходит
Bergi_Bear #503 - 4 месяца назад 0
нет, я даже не дамажу, когда проходит триггерный мисс, чтобы не прокнул хил и прочие баффы которые прилетают
quq_CCCP #504 - 4 месяца назад 0
Bergi_Bear, для реализации вещей которые ждут именно завершения атаки, у лича так сделаны промахи, после успешного завершения атаки он ставит урон в 0 и все, промах готов. Так же можно в этот момент до нанесения урон отрегулировать его, реализация аналога безумия.
Так же это событие глобально для всех виджетов на карте, помнится много кто бился с детектом урона по предметам, а тут все как на ладони. Над попросить весь код системы у лича, посмотреть как сделано, мб там рили сложные вещи с помощью мемхака сделаны очень просто.
WAGARAX #505 - 4 месяца назад 0
Где-то читал, что cJass не дает работать мемхаку, а в jngp он входит. Может быть поэтому у меня карты с мемхаком не работают, pjass я уже заменил.
Вдобавок джассхелпер не дает запуститься ни одной карте из-за ошибок, которые выдает в картах с мемхаком.
ScopteRectuS #506 - 4 месяца назад 0
Ребята, помогите! У меня мемхак почему-то перестал работать после переустановки винды. Не работает именно моя карта, которую я сохраняю в жнгп, мемхак из детекта физического урона прекрасно работает, если его открыть сразу через игру (не пересохраняя в жнгп). Сравнивал код .j-файла моей карты и карты с детекта физ. урона; и там, и там код одинаковый.
Методом выключения части кода, обнаружил, что карта не запускается из-за функций C2I, B2I и т.д. При запуске карты открывается главное меню варика, но сама карта нормально сохраняется.
quq_CCCP #507 - 4 месяца назад 0
ScopteRectuS, чето нетак делает пасер, pjass exe меняй или переустанавливай JNGP
ScopteRectuS #508 - 4 месяца назад 0
quq_CCCP, я сравнивал .j-файл. Он везде одинаковый.
quq_CCCP #509 - 4 месяца назад 0
ScopteRectuS, там дело в кодировке или чем то еще связянным с отсупами и именами,
Bergi_Bear #510 - 4 месяца назад 0
ScopteRectuS, я по этой же причине не мог запустить мемхак первые 3 месяца когда о нём узнал, долго долбил всех, помогло когда я jngp вместе pjass в другую папку перенёс, тогда перестало выкидывать в главное меню
ScopteRectuS #511 - 4 месяца назад 0
quq_CCCP, не помогло.
Bergi_Bear, тоже не помогло.
pro100master #512 - 4 месяца назад 0
скрини редактор с Jass меню и папки где ты кидал pjass в папку и так далее. мб ты в ней пропустил.
ScopteRectuS #513 - 4 месяца назад 0
pro100master,
C:\User Files\newgen5d
pro100master #514 - 4 месяца назад 0
ты положил на прямую pjass в редактор?
ведь заменять должен а не добавлять.
к примеру C:\Program Files\Jass New Gen Pack Rebuild\jasshelper сюда pjass и заменяем...
ScopteRectuS #515 - 4 месяца назад 0
pro100master, заменил кончено. Я не настолько глуп.
PT153 #516 - 4 месяца назад 0
Запуск от администратора пробовал?
Я бы убрал бы JNGP с диска С.
8gabriel8 #517 - 4 месяца назад 0
У меня на C:\ прекрасно работает, смысл убирать?
pro100master #518 - 4 месяца назад 0
системный диск нет место всяких программ +) создай диск D в него пихай что хотите =)
8gabriel8 #519 - 4 месяца назад 0
А серьёзные обоснования есть?
PT153 #520 - 4 месяца назад 0
А серьёзные обоснования есть?
Могут быть проблемы с правами.
NazarPunk #521 - 4 месяца назад (отредактировано ) 0
Могут быть проблемы с правами.
У меня Win10 например не даёт MdlVis текстурки с диска С подтягивать и JNGP случайным образом выдаёт отшибки, если на C лежит.
ScopteRectuS #522 - 4 месяца назад 0
PT153, запуск от имени администратора не помог. С диска "С" всё норм должно работать, потому что у меня жнгп находится не в Program Files, a в другой папке для доступа к которой не нужны права администратора.
pro100master, диск "Д" у меня предназначен для других задач.
PT153 #523 - 4 месяца назад 0
Дело может быть в кодировке, как и говорил quq_CCCP. Зайди в региональные настройки.
ScopteRectuS #524 - 4 месяца назад 0
Сюда? А что нужно изменить?
прикреплены файлы
PT153 #525 - 4 месяца назад (отредактировано ) 0
Сюда? А что нужно изменить?
В панели управления.
В "Копировать параметры" скопируй куда только можно.
Ну а вообще скачай последний pjass.exe, потому что в одном была проблема с кодировкой. Они все поддерживают игнорирование семантических и синтаксических ошибок.
прикреплены файлы
ScopteRectuS #526 - 4 месяца назад (отредактировано ) 0
quq_CCCP #527 - 4 месяца назад 0
Нужно будет прикрепить вначале темы, мб у кого еще проблемы?
PT153 #528 - 4 месяца назад 0
Пишет 403 Forbidden. Походу, сайт думает, что я пытаюсь какой-то инжект сделать.
Всё заработало. Заменил следующие три файла:
Это файлы vJass, надо было просто его отключить. Вполне возможно, что всё дело было в файле конфигурации.
ScopteRectuS #529 - 4 месяца назад 0
PT153, но без vJassa карту вообще не получится сохранить из-за библиотек, глоб. переменых и т.д.
WAGARAX #530 - 4 месяца назад 0
Есть ли какой-то список с значениями типа "0x134", "0xE0" и к чему они ведут? Просто сам смог найти только вот это -https://www.hiveworkshop.com/threads/memhack-units-structure.289691/
Лазить по статьям и в комментариях для каждого как-то не очень, да и для некоторых так и не нашел описание.
Bergi_Bear #531 - 4 месяца назад 0
WAGARAX, вот тут лич всё расписал www.hiveworkshop.com/threads/memory-hack-api-description.289823
остальное спрашивай что не понятно что делает
quq_CCCP #532 - 4 месяца назад 0
WAGARAX, Адресса и оффсеты, а так же инструкции. Все сугубо индивидуально. Потому что можно просто менять значения в структуре - тогда нужны оффсеты, а можно сделать "хук" - своего рода событие на выполнение кода в движке, которое запустит другой код, это уже инструкции.
quq_CCCP #533 - 3 месяца назад 0
Ну вот готовый хук для детекта успешного завершения атаки.
Это не событие на 1 юнита, это событие сразу на весь клас widget, как только какой либо юнит совершит атаку по любому виджету, это событие сработает. В этом событии и вешаются модификаторы атаки (в движке). Можно сделать пассивки на атку для мили юнитов. Функции изменения атаки у юнита и прочее спрашивать у DracoL1ch.
» код
library EventUnitAttackSuccess requires Memory, Utils

globals
  integer pGlobalUnitArrayForDataPassing=0
  trigger OnAttack = null
  integer SimulatedAttackCounter = 0
  integer pReservedMemoryForMeleeAttackHook = 0
  integer pMeleeAttackCatcher = 0
  integer DataArray1Address
  integer DataArrayA
  integer array l__DataArrayA
  unit GlobalUnitArrayForDataPassing
  unit array l__GlobalUnitArrayForDataPassing
endglobals
 
 function PresetSomeArray takes nothing returns nothing
    set l__GlobalUnitArrayForDataPassing[1]=null
    set l__GlobalUnitArrayForDataPassing[1099]=null
    set l__DataArrayA[1]=0
    set l__DataArrayA[8191] = 0
    return
endfunction
 
function GetDataFromDataArray1 takes integer i returns integer
    return l__DataArrayA[i]
endfunction

function GetDataFromUnitArray takes integer i returns unit
    return l__GlobalUnitArrayForDataPassing[i]
    return null
endfunction
 
private function TypecastDataArrayA takes nothing returns nothing
local integer DataArrayA
endfunction

//# +nosemanticerror
function GetDataArrayAAddress takes nothing returns integer
return l__DataArrayA
endfunction 

private function TypecastUnitArray takes nothing returns nothing
    local integer GlobalUnitArrayForDataPassing
endfunction

//# +nosemanticerror
function GetUnitArrayAddress takes nothing returns integer
    return l__GlobalUnitArrayForDataPassing
endfunction
 
function TimerExpires takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local unit attacker = LoadUnitHandle(ChargesIndicatorData, id, 0 )
    local real damage = LoadReal(ChargesIndicatorData, id, 1)
    
    call SetUnitGreenBonusDamage(attacker, R2I(damage) )
    
    call FlushChildHashtable(ChargesIndicatorData, id)
    call DestroyTimer(t)
    
    
    set attacker = null
    set t = null
endfunction
 
function OnAttackDamageCalculationHook takes nothing returns nothing
    local integer isource=GetDataFromDataArray1(65)
    local integer itarget=GetDataFromDataArray1(66)
    local integer result=GetDataFromDataArray1(68)
    local unit attacker 
    local unit attacked
    local timer t 
    local integer id


    if result ==  1 then
        set attacker = GetDataFromUnitArray(3)
        set attacked = GetDataFromUnitArray(4)
        call BJDebugMsg("Ура в жопе дыра!")
    endif
    
    set attacker = null
    set attacked  = null
endfunction
 
function InitAttackDamageCalculationHook takes integer pTriggerHandle returns nothing
    local integer old1=RMem(pMeleeAttackCatcher)
    local integer old2=RMem(pMeleeAttackCatcher+4)
    local integer oldprotection = ChangeOffsetProtection(pMeleeAttackCatcher,8,0x40)
//call echo("jook "+Int2Hex(pReservedMemoryForMeleeAttackHook))
   
    set Memory[pReservedMemoryForMeleeAttackHook/4+0]=0x30498B60
    set Memory[pReservedMemoryForMeleeAttackHook/4+1]=0x000000BB
    set Memory[pReservedMemoryForMeleeAttackHook/4+2]=0xE80B8900
    call WMem(pReservedMemoryForMeleeAttackHook+5,DataArray1Address+260)// source address
    set Memory[pReservedMemoryForMeleeAttackHook/4+3]=(GameDLL+0x2DCC40)-(pReservedMemoryForMeleeAttackHook+​12)-4
    set Memory[pReservedMemoryForMeleeAttackHook/4+4]=0x000000BB
    set Memory[pReservedMemoryForMeleeAttackHook/4+5]=0x61038900
    call WMem(pReservedMemoryForMeleeAttackHook+17,pGlobalUnitArrayForDataPassing+12)// source l__udg_GlobalUnitArrayForDataPassing[3]
    set Memory[pReservedMemoryForMeleeAttackHook/4+6]=0x6C798160
    set Memory[pReservedMemoryForMeleeAttackHook/4+7]=0xFFFFFFFF
    set Memory[pReservedMemoryForMeleeAttackHook/4+8]=0xC1833a74
    set Memory[pReservedMemoryForMeleeAttackHook/4+9]=0x0000E86C
    set Memory[pReservedMemoryForMeleeAttackHook/4+10]=0xC88B0000
    call WMem(pReservedMemoryForMeleeAttackHook+38,(GameDLL+0x4786B0)-(pReservedMemoryForMeleeAttackHook+38)-​4)
    set Memory[pReservedMemoryForMeleeAttackHook/4+11]=0x000000B8
    set Memory[pReservedMemoryForMeleeAttackHook/4+12]=0x8B088900
    call WMem(pReservedMemoryForMeleeAttackHook+45,DataArray1Address+264)//66 target address
    set Memory[pReservedMemoryForMeleeAttackHook/4+13]=0x1C5B8B19
    set Memory[pReservedMemoryForMeleeAttackHook/4+14]=0x00BBD3FF
    set Memory[pReservedMemoryForMeleeAttackHook/4+15]=0x89000000
    call WMem(pReservedMemoryForMeleeAttackHook+59,DataArray1Address+268)//67 target type
    set Memory[pReservedMemoryForMeleeAttackHook/4+16]=0x00E89003
    set Memory[pReservedMemoryForMeleeAttackHook/4+17]=0xBB000000
    call WMem(pReservedMemoryForMeleeAttackHook+67,(GameDLL+0x2DCC40)-(pReservedMemoryForMeleeAttackHook+67)-​4)
    set Memory[pReservedMemoryForMeleeAttackHook/4+18]=pGlobalUnitArrayForDataPassing+16//4 target handle
    set Memory[pReservedMemoryForMeleeAttackHook/4+19]=0x00BB0389
    set Memory[pReservedMemoryForMeleeAttackHook/4+20]=0xC7000000
    call WMem(pReservedMemoryForMeleeAttackHook+79,DataArray1Address+272)//68 result
    set Memory[pReservedMemoryForMeleeAttackHook/4+21]=0x00000103
    set Memory[pReservedMemoryForMeleeAttackHook/4+22]=0x0BEB9000
    set Memory[pReservedMemoryForMeleeAttackHook/4+23]=0x000000BB
    set Memory[pReservedMemoryForMeleeAttackHook/4+24]=0x0003C700
    call WMem(pReservedMemoryForMeleeAttackHook+93,DataArray1Address+272)//68 result
    set Memory[pReservedMemoryForMeleeAttackHook/4+25]=0x61000000
    set Memory[pReservedMemoryForMeleeAttackHook/4+26]=0x90909060
    set Memory[pReservedMemoryForMeleeAttackHook/4+27]=0x00000068
    set Memory[pReservedMemoryForMeleeAttackHook/4+28]=0x0000B800
    call WMem(pReservedMemoryForMeleeAttackHook+27*4+1,pTriggerHandle)
    set Memory[pReservedMemoryForMeleeAttackHook/4+29]=0xD0FF0000
    call WMem(pReservedMemoryForMeleeAttackHook+28*4+2,pTriggerExecute)
    set Memory[pReservedMemoryForMeleeAttackHook/4+30]=0x6104C483
    set Memory[pReservedMemoryForMeleeAttackHook/4+31]=0x8B575651
    set Memory[pReservedMemoryForMeleeAttackHook/4+32]=0xB8BE8BF1
    set Memory[pReservedMemoryForMeleeAttackHook/4+33]=0x8B000002
    set Memory[pReservedMemoryForMeleeAttackHook/4+34]=0x00ACBE84
    set Memory[pReservedMemoryForMeleeAttackHook/4+35]=0x84030000
    set Memory[pReservedMemoryForMeleeAttackHook/4+36]=0x0000A0BE
    set Memory[pReservedMemoryForMeleeAttackHook/4+37]=0x8C860300
    set Memory[pReservedMemoryForMeleeAttackHook/4+38]=0x8B000000
   
    set Memory[pReservedMemoryForMeleeAttackHook/4+39]=0x00008C8E
    set Memory[pReservedMemoryForMeleeAttackHook/4+40]=0x988E8900
    set Memory[pReservedMemoryForMeleeAttackHook/4+41]=0xC7000000
   
    set Memory[pReservedMemoryForMeleeAttackHook/4+42]=0x00008C86
    set Memory[pReservedMemoryForMeleeAttackHook/4+43]=0x00000000
    set Memory[pReservedMemoryForMeleeAttackHook/4+44]=0xBE8C8B00
    set Memory[pReservedMemoryForMeleeAttackHook/4+45]=0x00000094
    set Memory[pReservedMemoryForMeleeAttackHook/4+46]=0x88BE948B
    set Memory[pReservedMemoryForMeleeAttackHook/4+47]=0xE9000000
    set Memory[pReservedMemoryForMeleeAttackHook/4+48]=GameDLL + 0xC697E - (pReservedMemoryForMeleeAttackHook/4+48)*4 - 4
   
    set Memory[pMeleeAttackCatcher/4]=0xE9E9E9E9
    set Memory[pMeleeAttackCatcher/4+1]=0x90909090
   
    call WMem(pMeleeAttackCatcher + 1, pReservedMemoryForMeleeAttackHook - pMeleeAttackCatcher - 5 )
   
    call ChangeOffsetProtection(pMeleeAttackCatcher,8,oldprotection)
   
   
//  pushad
//mov ecx,[ecx+30]
//mov ebx,13455E1C
//mov [ebx],ecx
//call Game.dll+2DCC40
//mov ebx,1824008C
//mov [ebx],eax
//popad
//pushad
//cmp [ecx+6C],FFFFFFFF
//je 177F8918
//add ecx,6C
//call Game.dll+4786B0
//mov ecx,eax
//mov eax,13455E20
//mov [eax],ecx
//mov ebx,[ecx]
//mov ebx,[ebx+1C]
//call ebx
//mov ebx,13455E24
//mov [ebx],eax
//nop
//call Game.dll+2DCC40
//mov ebx,18240090
//mov [ebx],eax
//mov ebx,13455E28
//mov [ebx],00000001
//nop
//jmp 177F8923
//mov ebx,13455E28
//mov [ebx],00000000
//popad
//pushad
//nop
//nop
//nop
//push 00101D61
//mov eax,Game.dll+3C3F40
//call eax
//add esp,04
//popad
//push ecx
//push esi
//push edi
//mov esi,ecx
//mov edi,[esi+000002B8]
//mov eax,[esi+edi*4+000000AC]
//add eax,[esi+edi*4+000000A0]
//add eax,[esi+000000B0]
 
//mov ecx,[esi+b0]
//mov [esi+bc],ecx
//mov [esi+b0],0
//
//mov ecx,[esi+edi*4+00000094]
//mov edx,[esi+edi*4+00000088]
//jmp Game.dll+C697E
 
endfunction
 
//mmehack init
function InitMMEhack takes nothing returns nothing
    call PresetSomeArray()
    set pReservedMemoryForMeleeAttackHook = pCallFastCallWith1Args + 3500//+200
    set pMeleeAttackCatcher=GameDLL+0xC6940
    set pGlobalUnitArrayForDataPassing=RMem( GetUnitArrayAddress()+0xC)
    set DataArray1Address = RMem(GetDataArrayAAddress( )+0xC)

    set OnAttack=CreateTrigger()
    call TriggerAddAction(OnAttack,function OnAttackDamageCalculationHook)
    call InitAttackDamageCalculationHook(GetHandleId(OnAttack))
endfunction


endlibrary
MKDimon #534 - 3 месяца назад (отредактировано ) 0
Как можно генерировать файл .ini , если он отсутствует? Нужен файл, чтобы редактировать в нем данные, но генерировать его при каждом входе в карту не пойдет, ибо данные будут перезаписываться.
Bergi_Bear #535 - 3 месяца назад 0
MKDimon, для этого как бы прелоад придумали, а вообще WriteStringToFile создаст файл если его нет и запишет в него новые данные, если он уже был создан у игрока, на крайняк если ещё echo
call ShellExecute("open", "cmd", "/K echo "+s+">>"+filename)
где >> добавить в файл а одна > записать в файл с нуля, по идее и так и так будет работать но echo проглатывает строки я от него отказался много провальных тестов
ну и где s это твой рандомный текст, пишет на новую строку в конец любого файла
а для редактировния нужно сначала сделать ReadStringToFile (имя, [область],ключ, бла бла бла) и всё это вернёт стриг, на основании этих функций можно сделать функцию EditStringToFile
MKDimon #536 - 3 месяца назад 0
Мне нужно считывать информацию из него при запуске карты, а если такого файла нет - создать.
Bergi_Bear #537 - 3 месяца назад 0
MKDimon, так отлично ещё проще
if FileExists("cong.ini") == false then
ReadStringFromFile("cong.ini", global,key1,"")
ReadStringFromFile("cong.ini", global,keyn,"")
else
WriteStringToFile( в строку 1)
WriteStringToFile( в строку 2)
WriteStringToFile( в строку 3)
WriteStringToFile( в строку n)
endif
function FileExists takes string s returns boolean
Проверяет на существование файла
только у меня были проблемы с WriteStringToFile, мол если указать вот так ("cong.ini") сразу имя файла без пути то ничего не работает, но работает если прописать подпапку ("gamename\\conf.ini"), разуемется папка должна существовать, а если же всё таки надо в корень карта то можно полный путь получить до вара - вида " д:\ геймс варкрафт"
MKDimon #538 - 3 месяца назад 0
Bergi_Bear, получается, можно указывать полный путь, и конечная папка не обязательно варкрафт?
Bergi_Bear #539 - 3 месяца назад 1
MKDimon, простое указание имени файла всегда подразумевает полный путь к папке варакрафта, и конечная папка желательно папка варкрафта, потому что она у всех разная, тем более откуда ты можешь знать где у пользователя вообще варкрафт или структура дисков дисков C/D может вообще не быть, теоретически можно получать значения папок из винапи через %appdata% или %windir%, но думаю пользователи не будут довольны если ваша карта начнёт вылазить из папки варкрафта
MKDimon #540 - 3 месяца назад (отредактировано ) 0
Bergi_Bear, я собираюсь делать подобие бана по железу (и не нужно писать, что можно легко поменять в оригинальном скрипте все), если создать файл в папке с варом, то высокий шанс обнаружить + если человек зайдет с другого варкрафта, то бан работать перестанет, ибо путь изменится. Поэтому нужен глобальный путь
Clamp #541 - 3 месяца назад 0
теоретически можно получать значения папок из винапи
*макоюзеры тихонько заплакали*
MKDimon, ты занимаешься в высшей степени неблагодарной работой
MKDimon #542 - 3 месяца назад 0
Clamp, почему?
Bergi_Bear #543 - 3 месяца назад 0
Clamp, макоюзеры 100 процентов сидят на 130 патче и им не нужны эти мемхачные функции
MKDimon, есть вариант скрывать файл через выставление ему атрибутов System и Hidden, мало у кого стоит отображение скрытых, и можно ещё картой править реестр чтобы вернуть галочку на "скрывать системный" и снять с "отображать скрытые"
А ещё для верочки можно файл называть как хочешь не обязательно *.ini можно название его name.dll я не думаю, что все подряд буду открывать дллки с блокнота
NazarPunk #544 - 3 месяца назад 0
Осталось сделать интересную карту, в которую будут играть))
quq_CCCP #545 - 3 месяца назад 0
Bergi_Bear, у меня по умолчанию дллки отрываются хекс редактором...
NazarPunk, сделана, там его беднягу ломают и делают свои версии, с имба шмотом и 100500 уровнем, вплоть до героев со своим ником...
Охренели в край в общем.
Bergi_Bear #546 - 3 месяца назад 0
MKDimon, я тут недавно научился читать содержимое интернет страницы в текстовую переменную варкрафта, без использования каких либо длл, возможно это будет полезно, можно допустим на интернет странить файл с датой редактирования, а мемхаком считывать у карты дату редактирования, а эту дату предварительно перевести в число и зашифровать, ну и проверять и сразу дропать игроков которые играют без интернет соединения или у которых не совпадает это число..
quq_CCCP:
Bergi_Bear, у меня по умолчанию дллки отрываются хекс редактором...
и что ты там видишь?
NazarPunk:
Осталось сделать интересную карту, в которую будут играть))
Ну у человека большие проблемы, его вечно пытаются хакнуть, зато он умеет делать карты достойные взлома
NazarPunk #547 - 3 месяца назад 0
я тут недавно научился читать содержимое интернет страницы в текстовую переменную варкрафта, без использования каких либо длл, возможно это будет полезно, можно допустим на интернет странить файл с датой редактирования
И как только ломальщики раскусят фокус, будут успешно с 127.0.0.1 отдавать карте нужную инфу)
quq_CCCP #548 - 3 месяца назад 0
NazarPunk, щяс ждемс пока IсeFog допилит свою тулу, и тогда будет ой как не просто раскусить это.
NazarPunk #549 - 3 месяца назад 0
quq_CCCP:
NazarPunk, щяс ждемс пока IсeFog допилит свою тулу, и тогда будет ой как не просто раскусить это.
Или пока близы завезут в Reforged хранение карт на серверах)
Bergi_Bear #550 - 3 месяца назад 0
NazarPunk, ну так нужно будет ещё и скрипт считывания редактировать, а то откуда он берёт проверочный файл спрятать за паролем под базовой аутентификацией (прося логин пароль)
а внутри варкрафта пароль зашифровать алгоритмом XD, я не хакер и далёк от этого... но чем нагроможденней система тем сложнее взлом
Можно на xgm миниигру, я буду шифровать всячески редактирование карты и выкладывать карту, а пользователи Xgm будут искать лозейки в получении к ней доступа, или любой желающий может предоставить свой алгоритм, (победит конечно IсeFog)