12.07.2015 Views

img - Xakep Online

img - Xakep Online

img - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ВЗЛОМRAZ0R HTTP://RAZ0R.NAMEПосле патча контрольная сумма отличалась всеголишь на один байт, и теперь переход выполнен нетуда, куда надоflag_1 = 1end ifelse if sequence = 1if flag_2 = 0proc_2flag_2 = 1end ifend ifend whilemacro proc_1 {proc AnyProcedure1...retendp}macro proc_2 {proc AnyProcedure2....retendp}Проверив этот код, убеждаемся, что процедуры выставляются какнадо, случайно, код не портится.0XDEFACED, ÈËÈ ÎÁÔÓÑÊÀÖÈß: ÄÈÍÀÌÈ×ÅÑÊÎÅÂÛ×ÈÑËÅÍÈÅ ÀÄÐÅÑÎÂОдин из способов противодействия дизассемблерам и обману анализаторов— динамическое вычисление адресов переходов или адресовпеременных. Пример, как можно вычислять адрес:push label - valueadd [esp],valuejmp [esp]....label:add esp,4; èçáàâëÿåìñÿ îò íåíóæíîãîСледует сделать случайными алгоритмы вычисления, варианты реализацииалгоритма, и, естественно, значения для модификации. Примерамиэтого станут представленные ниже макросы o_jmp и olabel:macro o_jmp destination {randomizevariant = rndnum mod 2if variant = 0randomizevalue = rndnum mod IMAGE_BASE060push destination - valueadd [esp],valuejmp [esp]else if variant = 1randomizevalue = rndnum mod (0xFFFFFFFF - IMAGE_BASE- 0x1000)push destination + valuesub [esp],valuejmp [esp]end if}macro o_label name {label nameadd esp,4}Итог работы макросов:68001127b6 | push dword 0xb6271100812c249b10e7b5 | sub dword [esp], 0xb5e7109bff2424| jmp dword near [esp]31c0| xor eax, eax83c404| add esp, 0x431c0| xor eax, eaxБез трассировки и не узнаешь, куда ведет переход, следовательно,статический анализ обламывается. Здесь также стоит учитывать занятые\свободныерегистры в генераторе мусора, так как постоянноеиспользование Esp ставит клеймо на способе, да и само по себе накладно.Еще одной неплохой уловкой является вставка переходов наданные, но переходы эти никогда не выполняются (или выполняютсятолько при наличии отладчика). Это сбивает с толку анализаторы, иони пытаются дизассемблировать данные. Пример макроса:macro facke_code_ref data_addr,jmp_addr {xor eax,eaxinc eaxjnz jmp_addrcall data_addr;trash}В итоге адрес data_addr будет анализироваться как код.0XA55 — ÇÀØÈÔÐÎÂÊÀ ÊÎÄÀ\ÄÀÍÍÛÕЗамечательными функциями макроязыка FASM, отличающими егоот других макроассемблеров, являются load и store. Использовать ихможно для шифрования кода или данных. Простой пример, для шифрованияиспользуется xor:macro xor_data start,length,key {repeat lengthload x from start+%-1x = x xor keystore x at start+%-1end repeat}Очень полезный макрос, я его использовал для зашифровки строковыхданных. Пример использования:randomizeXOR_KEY = rndnum mod 0xFFxor_data strings, strings_size, XOR_KEYstrings:XÀÊÅÐ 08 /139/ 10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!