Как это вообще работает?
В частности, не совсем понятно как это может работать без сторонних программ?..

можно почитать с гугл переводчиком, если уж так плохо с инглишем, Лич вполне хорошо объяснил. Можно найти легко самостоятельно тип брони у героя и количество брони, и реген кажется
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
ArchOracle, уязвимость в виртуальной jass машине, позволяющая выполнять произвольные инструкции а не строго предопределенные.
10
quq_CCCP, а как это организовано? Про это есть где-нибудь материалы на русском?
Ну и просто ради интереса, как нашли эту уязвимость?
33
Принятый ответ
можно почитать с гугл переводчиком, если уж так плохо с инглишем, Лич вполне хорошо объяснил. Можно найти легко самостоятельно тип брони у героя и количество брони, и реген кажется
32
ArchOracle, на русском на старом форуме XGM было описание как устроен ретурн баг, вроде Адольф описывал тоже уязвимость виртуальной jasm машины.
32
ArchOracle, сам ретурнд баг в краце - несколько TypeCast функций смысл которых преобразовать Некий тип обьекта в целое число, а запись памяти реализовано через "сломанный массив", вот этот участок кода
function InitBytecode takes integer id, integer k returns nothing
    set l__bytecode[0] = 0x0C010900 //op: 0C(LITERAL), type: 09(integer array), reg: 01,
    set l__bytecode[1] = k //value: 0x2114D008
    set l__bytecode[2] = 0x11010000 //op: 11(SETVAR), reg: 01
    set l__bytecode[3] = id        //id of variable Memory
    set l__bytecode[4] = 0x0C010400 //op: 0C(LITERAL), type: 04(integer), reg: 01, value: 0
    set l__bytecode[6] = 0x27000000 //op: 27(RETURN)

    set l__bytecode[8] = 0x07090000 //op: 07(GLOBAL), type: 09 (integer array) //Create new array
    set l__bytecode[9] = 0x0C5F //name: C5F(“stand”)
    set l__bytecode[10] = 0x0E010400 //op: 0E(GETVAR), type: 04(integer), reg: 01 //Obtain the desired amount of bytes
    set l__bytecode[11] = id+1        //id of variable bytecodedata (variable ids are sequential)
    set l__bytecode[12] = 0x12010100 //op: 12(SETARRAY), index=reg01, value=reg01 //Set index of the array, forcing allocation of memory
    set l__bytecode[13] = 0x0C5F //name: C5F(“stand”)
    set l__bytecode[14] = 0x0E010400 //op: 0E(GETVAR), type: 04(integer), reg: 01 //Read array variable as an integer
    set l__bytecode[15] = 0x0C5F //name: C5F(“stand”)
    set l__bytecode[16] = 0x11010000 //op: 11(SETVAR), reg: 01 //pass the value to the jass world
    set l__bytecode[17] = id+1        //id of variable bytecodedata
    set l__bytecode[18] = 0x27000000 //op: 27(RETURN)
endfunction
Ну и грубо говоря, ты нашел адресс code - готового алгоритма, code ссылка на "инструкцию" которая представляет из себя массив заполненный инструкциями для виртуальной JASM машины, и тебя есть так называемый "сломанный массив", у тебя есть I2C() + I2Aray условно ядресс твоего code + и адресс твоего массива, ты заполняешь массив нужными тебя инструкциями и приклеиваешь к концу code и вызываешь твой code, все вот он хак, ты записал в память свою инструкцию и заставил виртуальную JASM машину выполнить её. Ну вот как то так, несколько утрированно, но думаю ты понял.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.