; .__ ; _____ ____ ____ ____ | |__ ; / \ / _ \_/ ___\/ _ \| | \ Poly Engine ;| Y Y ( <_> ) \__( <_> ) Y \ ;|__|_| /\____/ \___ >____/|___| / ; \/ \/ \/ ; ; [+] Simples PoC Polimorfica (codigo e rotina de decrypt) ; [+] Chave XOR aleatoria de 1 byte ; [+] O mecanismo consegue alterar a chave e algumas instrucoes (codigo e ordem) ; [+] Isso nao é novo, nem avancado... Apenas para fins educacionais ; By: SWaNk 2019 - Back in business, VX forever! ; ;https://pt.wikipedia.org/wiki/Mocó (Kerodon rupestris) format PE GUI 4.0 entry start include "%include%/win32a.inc" ; Essa é a macro de criptografia polimorfica (XOR de 1 byte). ; É um simples XOR aleatório entre 0x00 e 0xFF em tempo de compilacao. ;Esse é apenas um exemplo de como isso pode ser feito... Use sua imaginacao para melhorias macro encrypt dstart,dsize { local ..char key = %t and 0xff repeat dsize load ..char from dstart+%-1 ..char = ..char xor key store ..char at dstart+%-1 end repeat } ;A ideia é criar uma macro didatica. Esse cara vai dividir o range de 1 byte em 2 (0xff / 2 = 0x7f) ; ;Se a pseudo chave aleatória for maior que 0x7f, edx vai receber o real_start, e então ecx ira receber ;o code_size. Se a chave for menor que 0x7f, a ordem muda ; ;Se a pseudo chave aleatório for maior que 0x7f, o aumento de edx vai ser feito com "inc edx", caso contrario, ;com"add edx, 1" macro simplePoly { if key > 0x7f mov edx,real_start mov ecx,code_size else mov ecx,code_size mov edx,real_start end if @@: xor byte [edx],key if key > 0x7f inc edx else add edx,1 end if loop @B } ;essa macro vai gerar essas instrucoes comecando no entry point ; mov edx,mocoh.401010 | A ordem dessas instrucoes ; mov ecx,1C | podem mudar ; xor byte ptr ds:[edx],F4 | A chave ira mudar (Nesse caso é F4) ; inc edx | Esta pode mudar para "add edx, 1" ; loop mocoh.40100A ;============================================================ section ".code" code readable writeable ;============================================================ start: simplePoly real_start: ; Adicione seu codigo aqui, comeco do codigo encriptado stdcall [MessageBox],0,msg,title,MB_ICONASTERISK stdcall [ExitProcess],0 ; final do codigo encriptado display "Encrypting this shit... " code_size = $ - real_start encrypt real_start,code_size display "done",13,10 ;============================================================ section ".data" data readable writeable import ;============================================================ library kernel32,"kernel32.dll",user32,"user32.dll" include "%include%/api/kernel32.inc" include "%include%/api/user32.inc" title db "SWaNk 2019",0 msg db "compile 2 times and compare the hashes and decryption instruction bitches!",0