Jump to content

Turbine o seu Perfil

Confira a atualização e participe do clube!
Clique e saiba mais

Junte-se ao Clube de Membros VIP

Tenha destaque e diversos benefícios!
Confira Aqui

Acesse nosso Discord

Conheça nossos canais interativos
Confira Aqui
Notícia
  • Adquira já o seu VIP!
Sign in to follow this  
Worgamel

[Source] Mini Dll Inject em API 18kb

Recommended Posts

Eu já não aguentava mais ver a povo ai usando código feios usando components do delphi e etc pra fazer um simples injector de dll que fica pra lá de 400 kb as vezes 1 MB. :pensativo:

 

Então escrevi esse code ai rapidim, comentei quase todas as linhas pros iniciantes e é isso ai.

 

No prog é só selecionar o processo e depois arrastar a dll pra cima dele, pronto!

 

program DllInject;

uses Windows, Messages, TlHelp32;

{funções necessarias para ativar e interpretar os arquivos arrastados pra janela}
procedure DragAcceptFiles(Wnd: HWND; Accept: BOOL); stdcall; external 'shell32.dll';
function DragQueryFile(Drop: Longint; FileIndex: UINT; FileName: PChar; cb: UINT): UINT; stdcall; external 'shell32.dll';


var
 WinClass: TWndClassA;  //var pra criar a classe da janela
 Inst, Handle, wcombo: DWORD;
 Msg: TMsg;             //var de mensagem

procedure GetListProc;            //função pra preencher o combobox com os nomes dos processos
var
 hSnapshot: Cardinal;
 hProcessEntry: TProcessEntry32;
begin
 SendMessage(wcombo, CB_RESETCONTENT, 1, 1 );

 hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 hProcessEntry.dwSize := SizeOf(TProcessEntry32);
 if not (Process32First(hSnapshot, hProcessEntry)) then
   Exit;
 repeat
   SendMessage(wcombo, CB_ADDSTRING, 0, integer(string(hProcessEntry.szExeFile)) );
 until not (Process32Next(hSnapshot, hProcessEntry));
end;

function GetProcPid(FileName: String): cardinal;     //função para pegar a id do processo
var
 hSnapshot: Cardinal;
 hProcessEntry: TProcessEntry32;
begin
 Result := 0;
 hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 hProcessEntry.dwSize := SizeOf(TProcessEntry32);
 if not (Process32First(hSnapshot, hProcessEntry)) then
   Exit;
 repeat
   if FileName = hProcessEntry.szExeFile then
     Result := hProcessEntry.th32ProcessID;
 until not (Process32Next(hSnapshot, hProcessEntry));
end;

Function InjectDll(PID: dword;  DLL: pChar):boolean;  //função de injetar a dll
var
 BytesWritten, hProcess, hThread, TID: Cardinal;
 Parameters: pointer;
 pThreadStartRoutine: Pointer;
begin
 result:=false;
 hProcess := OpenProcess(PROCESS_ALL_ACCESS,  False,  PID);   //pegando o handle do processo
 Parameters := VirtualAllocEx( hProcess, nil, Length(DLL)+1, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE); // alocando um espaço na memoria do alvo pra escrever o nome da dll
 WriteProcessMemory(hProcess,Parameters,Pointer(DLL),Length(DLL)+1,BytesWritten); //escrevendo o nome da dll
 pThreadStartRoutine := GetProcAddress(GetModuleHandle('KERNEL32.DLL'), 'LoadLibraryA'); //pegando o endereço da loadlibrary pra usala e da load na dll
 hThread := CreateRemoteThread(hProcess,  nil,  0,  pThreadStartRoutine,  Parameters,  0,  TID); // criando uma thread que usará a loadlibrary e o endereço onde escreveu o nome da dll como parametro
 if hThread <> 0 then
   result:=true;
 CloseHandle(hProcess); //fechando o handle do processo que não será mais usado aqui mesmo
end;

function PegaText(edit:Dword): string;    //funçãozinha pra pegar o texto do combobox, o programa selecionado e tals
var TextLength: Cardinal;
   Text: PAnsiChar;
begin
TextLength:=GetWindowTextLengthA(edit);
GetMem(Text, TextLength+1);
GetWindowTextA(edit, Text, TextLength+1);
result:=string(Text);
end;

function WindowProc(hWnd: DWORD; uMsg, wParam, lParam: Integer): Integer;  stdcall;  //a função que recebe as mensagens da janela
var
 NumerodeArquivo,na : Integer;
 NomedoArquivo,ext : String;
begin

  if uMsg = WM_DROPFILES then   //verificando se é a mensagem de "arrastar" arquivo pra janela
   begin
       SetLength(NomedoArquivo,255);
       NumerodeArquivo := DragQueryFile(Wparam,$FFFFFFFF,PChar(NomedoArquivo),255);
       for na := 0 to NumerodeArquivo-1 do
         begin
           DragQueryFile(Wparam,na,PChar(NomedoArquivo),255);
           if NomedoArquivo <> '' then
             begin
               ext:=String(NomedoArquivo);
               SetLength(ext,pos(#0,ext)-1);
               ext:=copy(ext,length(ext)-3,4);
               if (ext = '.dll') or (ext = '.ocx') then
                 if InjectDll(getprocpid(pegaText(wcombo)),PAnsiChar(NomedoArquivo)) then
                   messagebox(0,'Dll injetada com sucesso.',':D',0)
                     else
                   messagebox(0,'erro Dll não injetada.','x3',0)
             end;
         end;
   end;

Result:=DefWindowProc(hWnd, uMsg, wParam, lParam);  //envia as mensagens pro interpretador da user32, pra ele fazer todo o trabalho e tals.



if uMsg=WM_DESTROY then  // verificando se a mensagem é uma das que são enviadas pra janela ao clica no X de fechar
 begin
  PostQuitMessage(0);  //enfia mensagem de saida termino fechamento como preferir
  Halt;   //termina o programa o mesmo que um exit;, é um ret pro terminate process, não esquentem a cabeça em aprender isso agora
 end;
end;

begin
loadlibrary('comctl32.dll'); //carregar a dll comctl32 porque a classe do combobox é registrada por ela
Inst:=HInstance; //a instancia, vcs lembram daquela novela araguaia, então..


with WinClass do    //começando a criar a classe da janela
 begin
   style := CS_OWNDC or CS_HREDRAW or CS_VREDRAW; //estilos
   lpfnWndProc := @WindowProc; //função que recebera as mensagens enviadas pra janela
   hInstance := Inst;  // a instancia... rs
   hbrBackground := createSolidBrush(0);
   {a cor de fundo da janela, vc tbm pode pintar com uma imagem
   usando a function CreatePatternBrush(handle de uma bitmap) }
   lpszClassname := 'Worgamel'; //nome da classe a ser criar
   hCursor := LoadCursor(0, IDC_ARROW); //aqui vc escolhe o cursor do mouse
 end;

 RegisterClassA(WinClass); //Registra a Classe criada




Handle:=CreateWindowExA( WS_EX_WINDOWEDGE or WS_EX_LAYERED, //o estilo da janela
                         'Worgamel', //nome da classe da janela
                         'Dll Inject', //texto do topo da janela
                         WS_VISIBLE or WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX, //estilos a serem aplicados na janela
                         300, //x na tela onde vai ser criado a janela
                         300, //Y na tela onde vai ser criado a janela
                         200, //largura horinzontal da janela
                         100, //largura vertical da janela
                         0, //handle de alguma janela parent
                         0, //handle do pro menu se tivesse um rs
                         Inst, //Instancia, até hoje não sei pra que essa porra
                         nil
                        );

wcombo  := CreateWindowEx(0, 'COMBOBOX', nil, WS_VISIBLE or CBS_DROPDOWNLIST or WS_CHILD or WS_VSCROLL, 15, 15, 165, 200,handle,0,Inst,nil);
GetListProc; //enchendo o combobox com a lista de processos
UpdateWindow(Handle); //joga a janela pra frente
SetLayeredWindowAttributes(handle,0,230, 2);  //dá uma transparencia :3

DragAcceptFiles(handle,true); //ativando o arrastar arquivos pra janela

while(GetMessage(Msg, 0, 0, 0)) do  //loop de trafego de mensagens e tals
 begin
  TranslateMessage(msg); //interpreta a mensagem
  DispatchMessage(msg);  //dispacha a mensagem
 end;

end.

 

Não reparem meus erros de PTBR nos coments, alias não reparem anda porque eu escrevi isso ai mais rapido do que eu leio, então... :fuma:

Share this post


Link to post
Share on other sites

Cara bem legal seu trabalho =D mais to sen tempo para ver D=

Share this post


Link to post
Share on other sites

poderia explicar onde coloca o codigo se é uma dll ou um form, tem gente que não vai intender vlw

consegui fazer

Share this post


Link to post
Share on other sites
poderia explicar onde coloca o codigo se é uma dll ou um form, tem gente que não vai intender vlw

consegui fazer

 

vc tah brincando neh? a primeira coisa do código é program e vc diz preu dizer se é uma dll? ou pior, se é um form?

Share this post


Link to post
Share on other sites

Cara, para isso que serve fórum ou google, caso tenha dúvidas, pergunte ou pesquise... ¬¬'


b34c171261.png

Share this post


Link to post
Share on other sites

Cara super interessante e criativo seu code, nota 10, parabéns xD

Só acho q n é necessário buscar 2 vezes pelos processos(1 pra listar outra pra pegar a pid),

sem paciência pra pensar agora, mas enfim, parabéns rsrs.

Abraço.

Share this post


Link to post
Share on other sites
Cara super interessante e criativo seu code, nota 10, parabéns xD

Só acho q n é necessário buscar 2 vezes pelos processos(1 pra listar outra pra pegar a pid),

sem paciência pra pensar agora, mas enfim, parabéns rsrs.

Abraço.[/font][/b]

 

vlw bro, e sobre as 2 listadas de processo, é necessario sim.

eu até pensei sobre isso, em por as pids num array ao mesmo tempo que tivesse listando os nomes no combobox

mas, ai pro prog saber qual processo o usuario escolheu eu teria que e pegar a pid do array

eu teria que interceptar o click e pegar o index do item selecionado, e então usar o "array[index]"

pra pegar o o click e o selecionado na lista no click eu teria que fazer um wndproc pro combobox

e blablabla, sairia do foco de ser um simples código e tals...

 

abraço, vlw pela atenção no meu tópico :yes::fuma:

Share this post


Link to post
Share on other sites

Belo code jovem.

Realmente está mais agradável a entender..

Meus parabens, continue assim nos ajudando.

Abraços. :)

Share this post


Link to post
Share on other sites

Muito bom mesmo, continue assim, continue postando coisas do tipo.

Obrigado por compartilhar.

 

Abraçss

Share this post


Link to post
Share on other sites

é engraçado isso, um programa bem feito assim: 18kb

esses dias eu baixei o Embarcadero RAD XE 2011, comecei a fazer um map maker para um joguinho meu, quando fui ver o tamanho do .exe: 1,2Mb

não coloquei skin nem nada.

copiei o código todo e re-compilei-o no delphi 7: 300kb.

 

agora, 18kb você se superou, muito bom.

 

NÃO USEM EMBARCADERO RAD XE :calma:

Share this post


Link to post
Share on other sites

@luxfer

Em assembly puro fica menor ainda..., cerca de 3kb :)

O meu injector(http://www.webcheats.com.br/forum/criacoes/1119216-exe-evilcodes-advanced-assembly-injector.html#post4658868) em asm, ficou 8,5kb(se me recordo bem, ou 8kb), mas por eu colocar imagem, ícones, ficou 88kb, e compactado, 57,5kb... :)


b34c171261.png

Share this post


Link to post
Share on other sites

compactado o meu dll ineject ficou com 10 kb :D

 

De:PoweR BoLT

Você recebeu uma advertência no Web Cheats

 

Prezado(a) Worgamel,

 

Você recebeu uma advertência em Web Cheats.

 

Motivo:

-------

Flood Primário

 

não vou postar/contribuir com mais nada nesse forum, não sou de aturar gracinha nenhuma, principalmente de um zé ninguem ¬¬.

PARABÉNS :yes: :fuma:

Share this post


Link to post
Share on other sites

@Worgamel

Calma manin, foi só uma advertência, não conta pontos, foi só pra tu prestar atenção msm. (um aviso)

Não há motivo pra esse estresse todo xD

Tbm não concordo com certas atitudes da moderação, na WC até existe uma área para suporte e reclamação, porem todas vezes que fui lá nenhuma fiquei satisfeito com o resultado --'

 

@off

Meu injector em C# ficou com 427 KB xD

Abraço.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...