сабж. что делает следующий код: p1 = GetProcAddress(LoadLibrary("ntdll.dll"),"ZwLoadDriver"); p2 = GetProcAddress(LoadLibrary("kernel32.dll"),"CreateFileA"); if (!(((DWORD)p1 ^ (DWORD)p2) & 0xFFFF0000 )) count++; if (*(BYTE*)p2 == 0xC8) count++; встретил такой код в одной малвари. долго думал. вникал в суть вещей и необъятность непостижимости мира. потом все-таки прозрел. предлагаю остальным поломать головы тоже. исходный код содержал кучу мусора (обфускация, однако), в приведенном примере каждый байт значимый и работающий на идею. вопрос знатокам: что все-таки этот код делает? а ведь он что-то такое делает. причем очень интересное и полезное (для выживания малвари). а вот и ответ. типа анаграммы (т.е. фраза с переупорядоченными буквами, типа шифра): аадееежиийкмнннооооппррстттхцчыы (это на то случай, чтобы никто не подумал, что я перекладываю решение нерешенной задачи на чужие хвосты под видом головоломки). удачи в поисках и медитации!
xor 11h Код (Text): Юфбукш1xw1юбяуфбофг1юядвысъщ1жфбфц1мыаюябг1RctpetWx}tP1щ1Kf]~puUcxgtc1яхьяубфэфьья=1щъщ1ьфг?1Угябяш1<1дц=1эячфг1ысыяш<ьщгн1цсищгькш1аяег1гсыщэ1ярбсцяэ1аюъсшащьт1юбяуяхщг?
n0name ??? и рядом не лежало. во-первых, результат xor'а не сохраняется, во-вторых, приведенный код "воды" не содержит и короче его уже не напишешь.
Код (Text): Юфбукш1юбяуфбофг1ьсд<ао1ъщ1ярбсрягжщыщ1е<ш1уьвгбщ1яхьятя1'%Ы1хщсюсцяьс1схбфаяу1<1тбсьвъобьяагн1укхфъфьщо1юсэогщ1Gxcedp}P}}~r6яэ1хъо1эяхвъфш1у1г?ж?угябяш1рфц1юяьогщо1уяяриф?1юбщж©э1гвг1tetc.
doesn что этот код делает?! последняя строка - прямая подсказка, по ней я и раскурил, хотя можно и без нее. гм. плохо вы антивири знаете
разве тут не просто проверка на похученность двух функций и проверка на retn (или что там за опкод? ) во второй?
похоже на проверку, что две функции реализованны в одном модуле. Вот только не могу сообразить - кому нужно патчить CreateFileA?
В первом случае как уже сказали проверка базы модулей, там даже подсказка "!" и "0xFFFF0000" - обрубает мелкие адреса, т.к. при перехвате и подмене функций перехватчики идут в памяти подряд, старшие байты адресов совпадают, ксор должен их занулить, а чтобы проверить зануление старших байтов отбросили младшие. Видимо идет набор очков необходимых для каких-то действий.
kaspersky Вот еще код , частенько встречается в троях (серьезно) : Код (Text): FA = (DWORD*)(*(DWORD*)(((WORD)(*((DWORD*)((DWORD)pOT + i*2))))*4 + AT)); Разгадаешь ?
rmn > разве тут не просто проверка на похученность двух функций > и проверка на retn (или что там за опкод? ) во второй? нет, не retn что проверка на похученность - это уже ближе, но... весь вопрос в том, что же все-таки _реально_ тут проверяется? пересказывать код словами не надо - это и из кода понятно, особенно когда мыщъх вычислил из него все лишнее... нужно знать: когда условие (!(((DWORD)p1 ^ (DWORD)p2) & 0xFFFF0000 )) истинно. а оно ведь когда-то истино. хотя на первой фазе анализа мыщъх думал, что это просто обфускатор прикалывается.... ) twgt > Неужели то, что все символы печатные(видимые), > позволяет обойти антивири? задетектить. а потом обойти. там для каждого (ну не для каждого, но для доброго десятка) аверов детект и потом либо обход, либо - уход, т.е. отказ от вторжения, чтобы не запалили... im1111 > В первом случае как уже сказали проверка базы модулей, > там даже подсказка "!" и "0xFFFF0000" - обрубает мелкие адреса, > т.к. при перехвате и подмене функций перехватчики идут в памяти > подряд, старшие байты адресов совпадают, ксор должен их занулить, во! это совершенно правильная мысль!!! при определенном перехвате указанных функций мы получаем довольно близкие адреса, наблюдая различия только в младших байтах, причем перехватчик начинается с определенного опкода. остается только выяснить у какого именно антивируса такой перехватчик. возникает следующая подзадача. аверей много, ставить их на свою тачку (даже под виртуалкой) влом и не фиг. как быть? > Видимо идет набор очков необходимых для каких-то действий. угу. если выполняется только одно условие - то это подозрение на. если выполняются оба - то это 100% детект авера. dag > при включеном и выключеном каспере count_до=count_после =) на кале свет клином не сошелся. кстати, для детекта кала там используется NOP dw,[EAX + 00h], который эмулят только F-Prot, Kaspersky и NOD32v2, после чего остается только выяснить с кем из трех мы имеем дело
im1111 не врубаюсь, что значат pOT, AT, FA... щас скомпилирую это дело, а то у меня в глазах от кастинга рябит, на асме понять будет проще
Freeman Верно Если написать точнее то: Код (Text): FunctAddr = (DWORD*)(*(DWORD*)(((WORD)(*((DWORD*)((DWORD)pOrdinalTable + i*2))))*4 + AddresTable)); TrueFunctAddr = (DWORD*)((DWORD)FunctAddr + Offset) Признаюсь придумывал сам давно года 3 назад от нечего делать. Поиск по импорту. Тока щас понимаю, что получилось из этого жесть. Но за-то завораживает )