Тут скорее аналогия такая:
У водителя с правами при установке музыки в салон (обычной программы) на авторизованном сервисе (приличном сайте) подпилили тормоза (засунули сёрч-бар или агента ботнета).
Из той эпохи меня больше впечатляли демки, завязанные на нестандартных манипуляциях VGA-регистрами: палитрой и кадровой/строчной синхронизацией. Например, идеально плавный скроллинг в текстовом режиме с бегущими в фоне горизонтальными цветными волнами в палитре high-color (на ZX-Spectrum похожая техника называлась multicolor).
Естественно, это только для CRT-мониторов, а эмуляторы даже не знаю, способны ли повторить такое.
Если результат FirstOrDefault() не проверяется на null, идеологически правильнее использовать First().
Кроме того, .Where(filter).FirstOrDefault() короче (а может, и оптимальнее? -не проверял) записать как .FirstOrDefault(filter)
Эх, если бы кто в js реализовал такую магию, как «async» в C#5, когда встречается фунция Sleep (или любая другая псевдо-блокирующая), текущая функция бы прерывалась и возвращала управление главному потоку, а после завершения псевдо-блокирующей операции (для sleep — сигнал таймера), выполнение бы продолжалось с точки прерывания без потери контекста.
лучше хоть так познакомиться в условиях нехватки времени, чем просто музыку в плеере слушать. redozubov_ai.zip
я также удалил тишину в начале роликов, когда идут надписи
ничего не мешает, но это уже за пределеми «чистого» IAT-патчинга.
сейчас нашёл ещё один минус:
3) если атакуемое приложение упаковано хотя бы безобидным UPX, патчер не сможет найти расположение оригинальной IAT, он увидит IAT-таблицу для upx-депакера
При проектировании ключевых интерфейсов в классической трёхзвенке нужно помнить, что их могут проксировать (через SOAP, например). Возросла нагрузка, переконфигурили в IoC-контейнере, чтобы по интерфейсу доставался не сервис, а его SOAP-прокси и что-то тяжёлое вынесли на клиент. Никакие lazy через прокси не пролезут, предложенное упрощение — фейл в архитектуре взаимодействия компонент.
Лишних опкодов нет (т.е. таких, которые эксперт при ручной оптимизации выкинул бы).
Пролог с формированием стек-фрейма есть и в дельфи, условный с вызов подпрограммы — это инициализация static-полей класса main при первом входе, к инкременту оно отношение не имеет. Та же инициализация есть и в c++ (в дельфи нет, т.к. нет объектов не на стеке)
Зачем защищать калькулятор? Популярный каклькулятор с любой навесной защитой сломают, как ни крутись, а слишком навороченная защита будет доставлять неудобства пользователям.
Да потрудился уже. Если я в дельфи пишу Inc(a,20), у меня генерируется опкод inc [адресъ],20. Если я то же самое пишу в вышеуказанных языках, у меня генерируется штук сорок опкодов
Минусы:
1) Не перехватываются вызовы функций, которые приложение получило через GetProcAddress
2) Сколько загружено модулей, столько и IAT-ов патчить (для полной гарантии перехвата функции внутри процесса надо отслеживать заргузку новых модулей). Столкнулся с этим, когда надо было прозрачно для приложения шифровать определённые типы файлов. IAT модуля, скажем acad.exe был исправлен, а реальный вызов CreateFileA проходил через IAT модуля msvcrt.dll
У водителя с правами при установке музыки в салон (обычной программы) на авторизованном сервисе (приличном сайте) подпилили тормоза (засунули сёрч-бар или агента ботнета).
Естественно, это только для CRT-мониторов, а эмуляторы даже не знаю, способны ли повторить такое.
Кроме того, .Where(filter).FirstOrDefault() короче (а может, и оптимальнее? -не проверял) записать как .FirstOrDefault(filter)
redozubov_ai.zip
я также удалил тишину в начале роликов, когда идут надписи
сейчас нашёл ещё один минус:
3) если атакуемое приложение упаковано хотя бы безобидным UPX, патчер не сможет найти расположение оригинальной IAT, он увидит IAT-таблицу для upx-депакера
Пролог с формированием стек-фрейма есть и в дельфи, условный с вызов подпрограммы — это инициализация static-полей класса main при первом входе, к инкременту оно отношение не имеет. Та же инициализация есть и в c++ (в дельфи нет, т.к. нет объектов не на стеке)
У .NET/Java работа с веб-сервисами проще реализовывается.
а у меня c# почему-то в Release генерит тот же самый add:
habrastorage.org/storage2/3dc/36f/dda/3dc36fdda803b465c8e65daf950b27c9.png
1) Не перехватываются вызовы функций, которые приложение получило через GetProcAddress
2) Сколько загружено модулей, столько и IAT-ов патчить (для полной гарантии перехвата функции внутри процесса надо отслеживать заргузку новых модулей). Столкнулся с этим, когда надо было прозрачно для приложения шифровать определённые типы файлов. IAT модуля, скажем acad.exe был исправлен, а реальный вызов CreateFileA проходил через IAT модуля msvcrt.dll
Он с сюжетом (подаётся между уровнями), проходить интересно.