Bom pessoal vou falar sobre Code Inject , essa técnica é muito útil para desvio de rotinas particularmente em ER , hoje eu vou ser bem sucinto , vou envolver Code Inject e AutoKeygenning.
Vou também tentar exemplificar bem o que vou fazer , para isso escolhi novamente o crackme que meu amigo Rafael fez para teste , então vamos lá.
Primeiramente cheguei até a rotina principal por referência as strings de mensagem de erro ,dei um breakpoint no inicio dela e executei meu alvo , preenchi meus campos , e agora vou seguir trançando com F8.
Em 4531E4 eu tenho a instrução MOV EDX,[EBP-4] , essa instrução move o conteúdo armazenado em 16F620 para EDX que é a senha para nosso nome (em BASE64) , essa instrução é importante pra nós por isso vamos usá-la mais adiante.
Na linha seguinte temos uma Call zera nossos registros , logo após um JNZ que nos joga na mensagem de erro, aqui vemos a estrutura da nossa MessageBox , nós também vamos altera-la para ficar com um aspecto melhor:
453203 PUSH 10 Style MB_OK
453205 MOV ECX,0045330C Title "Tente Novamente"
45320A MOV EDX,00453324 Text "Valores Incorretos !"
Bem é essas três estruturas que iremos modificar , o nosso style de janela , o title e o text que vai ser nosso valor correto para o nome , depois dessa pequena analise vamos voltar a executar o programa e perceber que a CALL que vem depois de 4531E4 limpa nossos registros , se irmos ao dump e digitar o endereço 16F620 vamos notar que mesmo essa CALL tendo limpado nossos registros , ainda temos o nosso serial guardado na memória , então poderemos fazer referência por esse endereço , mas não especificamente ele porque em outros casos o programa pode altenar de endereço ao guardar esse conteúdo , então vamos gerar vicios bons, vamos usar a operação de MOV EDX,[EBP-4] já que mesmo depois desse CALL nosso EBP não é limpo.
Bem já que não vamos acertar de primeira mesmo vamos usar o JNZ que há em 4531EC para nos jogar para um code cave , eu por exemplo usei o endereço 4535E1 e 4535E4 , respectivamente para injetar o serial em EDX e pular novamente pra rotina , para exemplificar melhor :
Então no meu ficou assim :
4531EC JMP 4535E1
453203 PUSH 30
453205 MOV ECX,4532F0
45320A MOV EDX,EDX
4535E1 MOV EDX,[EBP-4]
4535E4 JMP 453203
Agora é só pegar o OFFSET dos endereços e modificar pelos bytes correspondentes , como essa parte é muito chata e exige muita atenção coisa que não tenho muito (conheço alguém que ira discordar) , eu já fiz pra vocês e apliquei em um source para "patchear" escrito em C :
Abaixo o link com o alvo , o meu script para calcular o OFFSET e o source em C , e espero que tenham entendido
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
OBS:O alvo do meu inject está infectado por um Virtob , sim eu realmente não sei onde eu consegui me infectar , mas como a matéria estava pronta já sugiro que executem ele em uma máquina virtual
Vou também tentar exemplificar bem o que vou fazer , para isso escolhi novamente o crackme que meu amigo Rafael fez para teste , então vamos lá.
Primeiramente cheguei até a rotina principal por referência as strings de mensagem de erro ,dei um breakpoint no inicio dela e executei meu alvo , preenchi meus campos , e agora vou seguir trançando com F8.
Em 4531E4 eu tenho a instrução MOV EDX,[EBP-4] , essa instrução move o conteúdo armazenado em 16F620 para EDX que é a senha para nosso nome (em BASE64) , essa instrução é importante pra nós por isso vamos usá-la mais adiante.
Na linha seguinte temos uma Call zera nossos registros , logo após um JNZ que nos joga na mensagem de erro, aqui vemos a estrutura da nossa MessageBox , nós também vamos altera-la para ficar com um aspecto melhor:
453203 PUSH 10 Style MB_OK
453205 MOV ECX,0045330C Title "Tente Novamente"
45320A MOV EDX,00453324 Text "Valores Incorretos !"
Bem é essas três estruturas que iremos modificar , o nosso style de janela , o title e o text que vai ser nosso valor correto para o nome , depois dessa pequena analise vamos voltar a executar o programa e perceber que a CALL que vem depois de 4531E4 limpa nossos registros , se irmos ao dump e digitar o endereço 16F620 vamos notar que mesmo essa CALL tendo limpado nossos registros , ainda temos o nosso serial guardado na memória , então poderemos fazer referência por esse endereço , mas não especificamente ele porque em outros casos o programa pode altenar de endereço ao guardar esse conteúdo , então vamos gerar vicios bons, vamos usar a operação de MOV EDX,[EBP-4] já que mesmo depois desse CALL nosso EBP não é limpo.
Bem já que não vamos acertar de primeira mesmo vamos usar o JNZ que há em 4531EC para nos jogar para um code cave , eu por exemplo usei o endereço 4535E1 e 4535E4 , respectivamente para injetar o serial em EDX e pular novamente pra rotina , para exemplificar melhor :
Então no meu ficou assim :
4531EC JMP 4535E1
453203 PUSH 30
453205 MOV ECX,4532F0
45320A MOV EDX,EDX
4535E1 MOV EDX,[EBP-4]
4535E4 JMP 453203
Agora é só pegar o OFFSET dos endereços e modificar pelos bytes correspondentes , como essa parte é muito chata e exige muita atenção coisa que não tenho muito (conheço alguém que ira discordar) , eu já fiz pra vocês e apliquei em um source para "patchear" escrito em C :
Código:
#include <stdio.h> #define name "gg.exe" void patchr(long int offset,int byte) { FILE *arquivo; arquivo=fopen(name,"rb+"); fseek (arquivo,offset,SEEK_CUR); fprintf(arquivo,"%c",byte); fclose(arquivo); } main() { patchr(0x525EC,0xE9);patchr(0x529E4,0xE9); patchr(0x525ED,0xF0);patchr(0x52606,0xF0); patchr(0x525EE,0x03); patchr(0x525EF,0x00);patchr(0x525F0,0x00); patchr(0x52604,0x30); patchr(0x52607,0x32); patchr(0x5260A,0x8B);patchr(0x529E1,0x8B); patchr(0x5260B,0xD2); patchr(0x529E2,0x55); patchr(0x529E3,0xFC);patchr(0x529E6,0xFC); patchr(0x529E5,0x1A); patchr(0x529E7,0xFF);patchr(0x529E8,0xFF); return 0; }
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
OBS:O alvo do meu inject está infectado por um Virtob , sim eu realmente não sei onde eu consegui me infectar , mas como a matéria estava pronta já sugiro que executem ele em uma máquina virtual
Comment