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

можно почитать с гугл переводчиком, если уж так плохо с инглишем, Лич вполне хорошо объяснил. Можно найти легко самостоятельно тип брони у героя и количество брони, и реген кажется
`
ОЖИДАНИЕ РЕКЛАМЫ...
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 машину выполнить её. Ну вот как то так, несколько утрированно, но думаю ты понял.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.