Order Of Six Angles

Main Logo

Х.Р.А.М Сатаны

Home | RU | Translations | Art | Feed.xml

12 June 2021

tags: windows - malware

Трюк с фейковым EP

Идея проста: После загрузки нашей программы, мы динамически меняем входную точку у загруженного PE образа на другой адрес в нашем коде (В этом примере на вызов messagebox). Поэтому, когда какой-нибудь реверсер сдампит наш файл, он получит модифицированный адрес точки входа и при его запуске поведение изменится. Этот трюк с заголовками PE я сделал для обучения своих студентов, чтобы они лучше поняли формат PE на практике на занятиях по анализу вредоносных файлов. Данный способ позволяет справиться с дампом от:

Мы изменяем путь к файлу, чтобы добиться анти-анализа от Scylla.

format PE GUI 4.0

entry start

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; includes
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
include '%fasm%\INCLUDE\win32a.inc'

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
section '.text' code readable writeable executable
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        ; если файл был дампнут из памяти инструментом, который достает загруженный образ,
        ; то входная точка изменится на адрес этих инструкций
        push    0
        push    szTitle
        push    szFuckOff
        push    0
        call    [MessageBoxA]

        push    0
        call    [ExitProcess]

start:
        invoke GetModuleHandleA, 0                              ;получаем imageBase
        mov     [mHandle], eax
        
        mov     ebx, eax                                        ;сохраняем в ebx
        add     ebx, 0xa8                                       ;EP (входная точка)

        invoke VirtualProtect, ebx, 4, PAGE_EXECUTE_READWRITE, Old
        mov     byte[ebx], 0x00                                 ;Меняем EP на адрес кода с messagebox
        invoke VirtualProtect, ebx, 4, PAGE_EXECUTE_READ, Old

        ; Теперь мы переименовываем файл, чтобы Scylla не смогла найти его на диске (MoveFileA)

        invoke GetModuleFileNameA,0,szfileName, 255             ; возвращаем длину в eax
        add eax, szfileName                                     ; eax теперь в конце имени PE файла

        ;Делаем поиск до перового символа '\' с конца, чтобы получить имя файла
        @@:
        dec     eax
        cmp     byte[eax],'\'             
        jne     @B
        inc     eax                                             ;пропускаем слеши 
        mov     ebx, eax                                        ;сохраняем, чтобы переименовать файл снова

        invoke MoveFileA, eax, tmpName, NULL

        ;нормальное поведение, просто messagebox, если файл дампается тут, то наша ловушка активируется
        push    0
        push    szTitle
        push    szExample
        push    0
        call    [MessageBoxA]

        ;переименовываем на оригинальное имя

        invoke MoveFileA, tmpName, ebx, NULL

        push    0
        call    [ExitProcess]

error:
        push    0
        call    [ExitProcess]

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
section '.data' data readable writeable
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

szExample       db      'Original file',0
szFuckOff       db      'Hands off asshole',0
szTitle         db      'Fake EP trick',0
mHandle         dd      ?
szfileName      rb      250
tmpName         db      "1.exe",0
Old             dd      ?

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
data import
        library kernel,'KERNEL32.DLL',\
                user32,'USER32.DLL'

        import user32,  MessageBoxA,'MessageBoxA'
        import kernel,  ExitProcess,'ExitProcess',\
                        GetModuleHandleA,'GetModuleHandleA',\
                        GetModuleFileNameA,'GetModuleFileNameA',\
                        MoveFileA,'MoveFileA',\
                        VirtualProtect,'VirtualProtect'
 
end data
Вверх