Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Сделав так, что rcx указывает на инструкцию ret, цепочка выполнится обычным образом
exploit();
chain = new rop();
// Код
chain.execute();
getpid из описания репозитория фреймворка JuSt-ROP (настоятельно рекомендую прочитать, поскольку там даны некоторые объяснения):var chain = new rop();
try {
chain.syscall("getpid", 20);
// rax is the return value
chain.write_rax_ToVariable(0);
chain.execute(function() {
console.log("PID: " + chain.getVariable(0).toString());
});
}
catch(e) {
logAdd("Incorrect gadget address " + e.toString(16));
}
chain — это объект класса rop(), который определен в файле just-rop.js и содержит в себе функции syscall (для осуществления системного вызова, который реализуется несколькими вызовами функций add()), add (для записи инструкции по адресу) и набор функций-хелперов write_<имя_регистра>_ToVariable / read_<имя_регистра>_FromVariable для чтения/записи регистра из/в переменную.gadgets.js описаны гаджеты в следующем формате:gadget(instructions, module, address)syscall() мы вызываем функцию add(), передавая в нее имя одного из гаджетов (для получения его адреса) и значение:this.add("pop rax", systemCallNumber);
if(typeof(arg1) !== "undefined") this.add("pop rdi", arg1);add производит следующее: берет адрес гаджета, записывает его по адресу длины цепочки chainAddress + chainLength, затем прибавляет к длине цепочки еще 8 (по всей видимости, бит, для следующего адреса) и записывает по следующему адресу переданное в add значение.add для записи значения вызывает функцию setU64into(). Это функция, объявленная глобально в файле exploit.js — window.setU64into(). Функции из этого файла выглядят как реализация уязвимости WebKit CVE-2012-3748, насколько я понял там все завязано на переполнении переменных типа u32/u64 в V8, но чтобы разобраться в деталях ее работы, надо уметь писать экплойты для WebKit. В принципе, можете попробовать разобраться по презентации.chain.write_rax_ToVariable(0); запишет возвращенное вызовом значение регистра rax в переменную, его можно будет получить при помощи chain.getVariable(0).Есть ли возможность сделать игру для PS4, и запихать туда некий development kit / scripting kit, или же использовать существующие игры и их поддержку scriptинга / компиляции.На дев-ките можно развлекаться сколько угодно, но релизные игры подписывает Sony, и она сразу отзовёт подпись кода с бекдором, как только информация о таковом появится в публичном доступе.
Все описанные здесь методы очень сложны
Есть ли возможность сделать игру для PS4, и запихать туда некий development kit / scripting kit, или же использовать существующие игры и их поддержку scriptинга / компиляции.
А какие PS4 простенькие игры знаете вы, куда можно было бы залезть и через какие скриптовые языки?
И что это даст?Если получится запускать любой код в usermode через какую-нибудь дыру в условном «тетрисе», то запускаем этот тетрис, затем эксплойт, и шелл-код скачивает и запускает условный «uncharted 4» в этом же процессе. Ядро проламывать не надо, из песочницы убегать тоже не надо.
mmap, mprotect, fork, вот это вот все, что игре совсем не нужно, будет нафиг выключеноУбрать все эти функции из userspace — слишком большая цена безопасности, при этом она оправдана только если мы запускаем недоверенный код. При этом нужно будет перенести всё системное в ядро. Снизится стабильность. Кучу опенсорсных библиотек/движков придётся переписать. Но мы же запускаем только доверенный код, тут не нужна такая модель безопасности.
Сами игры зашифрованы и расшифровкой занимается специальный процессор, к которому никакого доступа естественно нетВ RAM игры не зашифрованы. Нужно расшифровывать при чтении из сети / с HDD. И даже в этом случае в защищённом криптопроцессоре можно хранить лишь закрытые ключи, а сеансовый (одноразовый) ключ отдавать программе для расшифровки на основном CPU. Просто потому что невыгодно прокачивать большие объёмы через спец. процессор, это надо его делать сравнимым по пропускной способности с CPU.
Изменить DNS оффициального сервера на свой собственный локальный серверТак сейчас всё SSL, а установка своего сертификата в приставку не поддерживается.
Заблокировать сложнее — представьте отозвать и/или забаннить все версии данной игрыЭто же элементарно.
Анализ защиты Sony PlayStation 4