Обфускация и ее преодоление

          

Распутывание кода


Как бы хакер не избегал анализа запутанного кода, рано или поздно он вляпается в ситуацию, когда полная реконструкция алгоритма будет действительно необходима! Сражение с обфускатором неизбежно! А раз так, к нему нужно подготовить себя заранее. Посмотрим, какие тузы у нас есть в рукавах и чем мы можем ему противостоять.

Начнем с того, что напишем трассер. Собственно говоря, написать его все равно придется, хотя бы уже затем, чтобы понять как работает отладчик. Лучше, если это будет "термоядерный" трассер, работающий на нулевом кольце и обходящий антиотладочные приемы, которые так любят использовать обфускаторы.

Протокол трассировки программы, уже знакомой нам по листингу2, будет выглядеть так (если трассер писать лень, можно использовать soft-ice, просто отключив окно кода командной WC, тогда результат трассировки командой T будет "вываливать" в нижнее окно, откуда его можно добыть сохранив историю команд в Symbol Loader'е: File-> Save Soft-Ice History As):

001B:00434001  E800000000         CALL   00434006

001B:00434006  5D                 POP    EBP

001B:00434007  50                 PUSH   EAX

001B:00434008  51                 PUSH   ECX

001B:00434009  EB0F               JMP    0043401A             (JUMP v)

001B:0043401A  F2EBF5                    REPNZ  JMP 00434012         (JUMP ^)

001B:00434012* EB0F               JMP    00434023             (JUMP v)

001B:00434023  EBE9               JMP    0043400E             (JUMP ^)

001B:0043400E  B8EB07B9EB         MOV    EAX,EBB907EB

001B:00434013* 0F90EB                    SETO   BL

001B:00434016* 08FD               OR     CH,BH

001B:00434018  EB0B               JMP    00434025             (JUMP v)

001B:00434025  F3EBE4                    REPZ   JMP  0043400C        (JUMP ^)

001B:0043400C  EB0F               JMP    0043401D             (JUMP v)

001B:0043401D  EBF6               JMP    00434015             (JUMP ^)

001B:00434015  EB08               JMP    0043401F             (JUMP v)


001B:0043401F  F2EB08                    REPNZ  JMP 0043402A         (JUMP v)

001B:0043402A  59                 POP    ECX

001B:0043402B  58                 POP    EAX

001B:0043402C  50                 PUSH   EAX

001B:0043402D  51                 PUSH   ECX

001B:0043402E  EB0F               JMP    0043403F             (JUMP v)

001B:0043403F  F2EBF5                    REPNZ  JMP 00434037         (JUMP ^)

001B:00434037  EB0F               JMP    00434048             (JUMP v)

001B:00434048  EBE9               JMP    00434033             (JUMP ^)

001B:00434033  B8EB07B9EB         MOV    EAX,EBB907EB

001B:00434038  0F90EB                    SETO   BL

001B:0043403B  08FD               OR     CH,BH

001B:0043403D  EB0B               JMP    0043404A             (JUMP v)

001B:0043404A  F3EBE4                    REPZ   JMP  00434031        (JUMP ^)

001B:00434031  EB0F               JMP    00434042             (JUMP v)

001B:00434042  EBF6               JMP    0043403A             (JUMP ^)

001B:0043403A  EB08               JMP    00434044             (JUMP v)

001B:00434044  F2EB08                    REPNZ  JMP 0043404F         (JUMP v)

001B:0043404F  59                 POP    ECX

001B:00434050  58                 POP    EAX


Содержание раздела