Все потоки
Поиск
Написать публикацию
Обновить
0
0
Михаил @adic3x

Пользователь

Отправить сообщение
В контексте статьи Ваше сообщение подразумевает, что Вы тоже рассчитываете на примерно "$300 000 в день". Могу предположить, что люди отнеслись к этому скептически.

В любом случае делайте то, что за думали. Я считаю, что правильно поступает тот, кто делает что-либо, и не правильно тот — кто ни делает ничего, но ждет успеха.
Схема, предложенная в статье называется «Free to play, Pay to win». Как правило полностью ломает баланс в игре (если он там есть). Представьте себе шахматы, в которых за реальные деньги можно покупать новые фигуры или усовершенствовать имеющиеся ;) Хотя зарабатывать это не мешает.


Проводя аналогии…
Верю, что таки будет.

Я вот себя отношу скорее к продвинутым пользователям, но ни выключение не нашел без Гугла, ни метода закрытия метро-приложения.
В том то и дело, что они только убрали саму кнопку, меню пуска, пусть и изуродованное (мне тоже неприятно, что вся рабочая поверхность закрывается) оставили, и оно также вызывается клавишей Win или наведением курсора в нижний угол и кликом. Удаление кнопки — только визуальное.
Штекер из розетки выдернул — и все. С точки зрения юзабилити — самое очевидное решение же.
Некий юрист из Австралии попытался сделать это, запатентовав колесо. Правда там он доказывал несовершенство выдачи «упрощенных» патентов, но суть то ясна. Пруф
Судя по статье — это же не последний проект? Так вот, нужен хороший дизайнер. Для меня иконы жанра — World of Goo и Braid даже сложно сказать, чем произвели больший эффект — непосредственно головоломками или антуражем.
Куски кода — копипаста из оригинальной карты, и названия придумывал не я. Скорее всего это делалось для обфускации — редактор WarCraft использует достаточно убогие шрифты. А может просто для хакерского лоска.

Почему индекс 0x0200? Ведь это отступ в памяти. В другом месте код пишется по смещению 0x00. Насколько я помню, в данный момент массивы ссылаются на стек, поэтому возможно отступ в 0x0200 выбран просто как безопасный, не затрагивающий важные данные. Сейчас подыму историю переписки:

struct JassVArray
{
  int *VFuncs;
  int ListSize;
  int NItems;
  int *Items; // Это поле является указателем на данные массива
  int BlockSize;
}


Так вот, используя операцию присвоения значению переменной массива, которая является указателем на подобную структуру, произвольного значения, содержащегося в обычной переменной (на самом деле совсем не произвольного) мы получаем массив, Items которого ссылается на нужный нам адрес в адресном пространстве процесса, в данном случае это стек одной из веточек. Откуда можно легко перехватить управление. Теперь при записи в массив игра будет на самом деле писать в код процесса. Соответственно, при записи в массив foo[n], данные будут записаны по адресу Items+n.

Кстати, насколько я понял, тут идет запись в стек, основной же код пишется действительно просто в массив. Такой же методикой находится адрес процедуры VirtualProtect, и она выполняется с флагом PAGE_EXECUTE_READWRITE на память, куда записан код. Дальше управление и передается этому коду.

Данные, показанне в примере — очень хорошие, это код. Только надо свапнуть их задом наперед (я делаю это инстинктивно):

  set zg0oI[0x200]=0xE8575653
  set zg0oI[0x201]=0x000000F3

//...

CPU Disasm
Hex dump          Command                                  Comments
53              PUSH    EBX      ; сохраняем регистры
56              PUSH    ESI
57              PUSH    EDI
E8 F8000000     CALL    0056C100 ; Вызов. Адрес равен адресу начала кода + 0x0100
  


12 ...
51

Информация

В рейтинге
Не участвует
Откуда
Украина
Зарегистрирован
Активность