CaveiraTech Fórum
collapse

Dica exemplo crypter c (windows)


Offline kodo no kami

  • Elite
  • 1337
  • *
    • Posts: 603
    • forum eof
  • Liked: 381
  • Likes Given: 173
e ae galera esse é outro exemplo igual ao crypter anterior em C entretanto para o sistema window, a logica dos dois crypters são as mesmas so mudando a forma de fazer (ex: no linux usamos o mmap para alocar um espaço no processo enquanto que nesse exemplo do windows usamos o VirtualAllocEx)
 

Código: You are not allowed to view links. Register or Login
//coder: kodo no kami
//plataforma: windows
 
#include <stdio.h>
#include <windows.h>
 
int main(int argc, char **argv){
    unsigned char shell[] = {0x5f,0x93,0xef,0xc2,0x45,0x0b,0x0a,0x0a,0x67,0xcd};
    unsigned char temp[2] = {0};
 
    //abre o processo
    HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS,0,GetCurrentProcessId());
    
    //aloca espaço na meoria com permissão de escrita leitura e execução
    int *end = VirtualAllocEx(proc,0,100,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
    
    //escreve o shellcode criptografado na memoria alocada
    WriteProcessMemory(proc,end,shell,sizeof(shell),0);
 
    //descriptografa ele da memoria
    //ficando: {0x55,0x89,0xe5,0xb8,0x3b,0x01,0x00,0x00,0x5d,0xc3}
    int cont = 0;
    int end2 = (int) end;
    while(cont < 10){
        ReadProcessMemory(proc,(LPCVOID)end2,(LPVOID)temp,1,0);
        temp[0] = temp[0] - 10;
        WriteProcessMemory(proc,end2,temp,1,0);
        end2++;
        cont++;
    }
 
    //prototipagem da função e chamada dela
    int (*fun)() = end;
    printf("%d",fun());
}

 

 
uma coisa interessante que ambos shellcodes nos sistemas são os mesmos (0x55,0x89,0xe5,0xb8,0x3b,0x01,0x00,0x00,0x5d,0xc3) , isso acontece porque é nativo da propria arquitetura (x86/x64) sendo independente do sistema operacional, o que difere na verdade são os executaveis e como o sistema operaciooal interpreta toda a estrutura dele e é claro as APIs, LIBS e SYSCALL que o sistema disponibiliza entre outras coisas.
 
by kodo no kami
sign: You are not allowed to view links. Register or Login
discord: You are not allowed to view links. Register or Login (kodo#0010)
steam: You are not allowed to view links. Register or Login


Offline blackmetal

  • L4MM3R
  • *
    • Posts: 2
  • Só vai...
  • Liked: 1
  • Likes Given: 3
Oi, poderia me explicar melhor o que está acontecendo no código? lio o post do linux mas ainda assim não entendi


Offline kodo no kami

  • Elite
  • 1337
  • *
    • Posts: 603
    • forum eof
  • Liked: 381
  • Likes Given: 173
blz posso sim \o, tipo no caso os crypters que funciona atraves de injeção de codigo na memoria, bastaria fazer isso

* aloca espaço na memoria daquele processo para injetar o codigo que vai ser executado diretamente na memoria (no caso do windows foi usado o VirtualAllocEx e no linux o mmap para fazer isso), essas funções vai criar um espaço na memoria do processo e retornar o endereço daquela parte na memoria, para que voce possa escrever, ler ou executar dependendo da permissão de acesso a ela
* injeta os opcodes criptografados na parte da memoria que voce alocou (no windows usei a API nativa WriteProcessMemory ja no linux foi memcpy que tambem poderia ser usado no windows), voce poderia descriptografar antes e depois injetar o codigo ja descriptografado la, basicamente essas funções permite escrever diretamente na memoria, nesse caso voce ta colocando naquela trecho de memoria o codigo que vai ser descriptografado ou executado depois (resumindo voce ta criando funções no programa em tempo de execução, funções que estavao criptografada no codigo)
* ler a parte da memoria que tem os opcodes criptografados e descriptografar eles injetando novamente naquela parte da memoria (caso tenha injetado ja descriptografado essa etapa nao existe)
* por fim a execução daquele trecho de codigo (como no exemplo é uma subrotina/função bastaria chamar como uma função)

e os opcodes/shellcodes da onde eu tirei eles? quando a gente cria um programa em uma linguagem compilada que gera executaveis nativos para aquela arquitetura/plataforma (c, pascal, basic e etc) é gerado uma sequencia binaria equivalente aquele trecho de codigo em linguagem de maquina, esse trecho são fixos normalmente ja estando no executavel para o sistema operacional e processador interpretar e executar, exemplo um programa em c
Código: You are not allowed to view links. Register or Login
#include <stdio.h>

int kodo(){
    return 315;
}

int main(void){
    kodo();    
}
depois de compilado o codigo acima vai ser transformado nisso aqui

Código: You are not allowed to view links. Register or Login
000004ed <kodo>:
 4ed:    55                       push   %ebp
 4ee:    89 e5                    mov    %esp,%ebp
 4f0:    e8 25 00 00 00           call   51a <__x86.get_pc_thunk.ax>
 4f5:    05 e7 1a 00 00           add    $0x1ae7,%eax
 4fa:    b8 3b 01 00 00           mov    $0x13b,%eax
 4ff:    5d                       pop    %ebp
 500:    c3                       ret    
00000501 <main>:
 501:    55                       push   %ebp
 502:    89 e5                    mov    %esp,%ebp
 504:    e8 11 00 00 00           call   51a <__x86.get_pc_thunk.ax>
 509:    05 d3 1a 00 00           add    $0x1ad3,%eax
 50e:    e8 da ff ff ff           call   4ed <kodo>   <--- chamda da função kodo
 513:    b8 00 00 00 00           mov    $0x0,%eax
 518:    5d                       pop    %ebp
 519:    c3                       ret    
se eu abrir o executavel em um editor hex eu consigo encontrar esses trechos de codigos no proprio executavel (um antivirus ou alguem fazendo engenharia reversa conseguiria retornar parte das instruções do codigo e dizer se é malicioso ou nao baseado nisso)
Código: You are not allowed to view links. Register or Login
00 01 8B 5D  FC C9 C3 89  F6 8D BC 27  00 00 00 00  ...].......'....
000004E0   55 89 E5 5D  E9 57 FF FF  FF 8B 14 24  C3 55 89 E5  U..].W.....$.U..
000004F0   E8 25 00 00  00 05 E7 1A  00 00 B8 3B  01 00 00 5D  .%.........;...]
se esses mesmos codigos estiver criptografado no executavel e for injetado em tempo de execução mesmo olhando o codigo nao vou encontrar eles pelo menos nao ao ponto de saber o que aquela instrução faz extamente, basicamente é isso \o
sign: You are not allowed to view links. Register or Login
discord: You are not allowed to view links. Register or Login (kodo#0010)
steam: You are not allowed to view links. Register or Login


 

* CaveiraTech YouTube

* Facebook

Guilherme Junqueira
04 de Fevereiro de 2019, 18:01 por Guilherme Junqueira
Views: 67158 | Comments: 27

Infelizmente a seção de Grupos de estudos do fórum estava sendo usada por organizações criminosas para recruta...
Guilherme Junqueira
27 de Julho de 2018, 17:30 por Guilherme Junqueira
Views: 43424 | Comments: 64

Pessoal, estou pensando seriamente na possibilidade de criar um novo fórum, só que voltado 100% à programação....
Guilherme Junqueira
26 de Junho de 2018, 20:25 por Guilherme Junqueira
Views: 25649 | Comments: 41

Resolvi fazer uma enquete para ver qual o posicionamento político da maioria aqui no fórum. O Alobus já fez um...
Guilherme Junqueira
20 de Junho de 2018, 12:56 por Guilherme Junqueira
Views: 31159 | Comments: 63

Últimamente o fórum vem sofrendo com muitas pessoas postando pirataria e esse não é o intuito do mesmo. A pira...
Guilherme Junqueira
20 de Fevereiro de 2018, 20:18 por Guilherme Junqueira
Views: 19196 | Comments: 4

Boa noite pessoal, venho apresentar para vocêsYou are not allowed to view links. Register or Login...

* Equipe

Guilherme Junqueira admin Guilherme Junqueira
Administrador
Luiz Viana admin Luiz Viana
Administrador
Alobus gmod Alobus
Moderador Geral

* Tópicos Recentes