;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; Bizu do Fake EP ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; A ideia é simples: Depois de carregar nosso programa, nós modificamos o entry point da ; imagem PE carregada de forma dinamica para outra rotina dentro do nosso código (Nesse ; exemplo é uma simples messagebox). ; ; Então, quando o cara do reversing dumpar ele vai ter o EP modificado e modificar o ; comportamento do EP quando o arquivo dumpado rodar. Esse é apenas um bizu educacional com ; cabecalhos PE para meus alunos entenderem melhor o formato PE de uma forma prática em ; aulas de analise de malware. ; ; Esse bizu funciona nos seguintes programas: ; - Process Dump v2.1 (https://github.com/glmcdona/Process-Dump) ; - OllyDumpEx ; - Todo utilitsrio que coleta informacoes do cabecalho PE carregado ; ; We move the file location to defeat Scylla too. ; Nós movemos a localizacao do arquivo para funcionar com o Scylla tambem. ; ; SWaNk 2020 - VX ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% format PE GUI 4.0 entry start ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; includes ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% include '%fasm%\INCLUDE\win32a.inc' ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% section '.text' code readable writeable executable ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; se o arquivo foi dumpado da memória com uma ferramenta que coleta imagem carregada, ; o EP irá mudar para essa instrucao push 0 push szTitle push szFuckOff push 0 call [MessageBoxA] push 0 call [ExitProcess] start: invoke GetModuleHandleA, 0 ;pega imageBase mov [mHandle], eax mov ebx, eax ;salva em ebx add ebx, 0xa8 ;EP invoke VirtualProtect, ebx, 4, PAGE_EXECUTE_READWRITE, Old mov byte[ebx], 0x00 ;Modifica o EP para o nosso payload invoke VirtualProtect, ebx, 4, PAGE_EXECUTE_READ, Old ;Agora nos renomeamos o arquivo para que o Scylla nao consiga acha-lo em disco (MoveFileA) invoke GetModuleFileNameA,0,szfileName, 255 ; retorna o tamanho em eax add eax, szfileName ; eax agora esta no final do nome de arquivo do PE ;Acha o primeiro '\' atras para pegar o nome do arquivo @@: dec eax cmp byte[eax],'\' jne @B inc eax ;pula a barra mov ebx, eax ;salva para renomear o arquivo de volta invoke MoveFileA, eax, tmpName, NULL ;comporamento normal, apenas uma messagebox, se o arquivo for dumpado aqui a armadilha esta pronta push 0 push szTitle push szExample push 0 call [MessageBoxA] ;renomeia para o nome original 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