现在的位置: 首页 > 综合 > 正文

Finddll.c – searches are running processes For module occurrency

2013年10月14日 ⁄ 综合 ⁄ 共 3771字 ⁄ 字号 评论关闭

/*

  DLL OCCURENCY FINDER UTILITY
  it simply searches in all running process for <DLL_NAME> occurency.

  Very useful with malware detecting/removing. Imagine you
  find a dll which you can't delete and you need to know
  which process is running it...

  coded by Piotr Bania <bania.piotr@gmail.com>

  Sample usage:

   E:/projekty/finddll/Debug>finddll jar50.dll

  ....
  [+] Searching in ping.exe (PID=0x564) for module occurency.
  [+] Searching in firefox.exe (PID=0xFC4) for module occurency.

  [*] --- MODULE OCCURENCY FOUND ---
  [+] jar50.dll found in firefox.exe (PID=0xFC4)
  [+] jar50.dll base located at: 0x023c0000
  [+] jar50.dll handle in process: 0x23C0000
  [+] jar50.dll size of module: 0xD000 bytes
  [+] jar50.dll path: C:/Program Files/Mozilla Firefox/components/jar50.dll
  [*] --- PRESS ANY KEY TO CONTINUE ---
  ....

*/

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <Tlhelp32.h>

int  find_dll(char *filename);
void  display_info(PROCESSENTRY32 pe32,MODULEENTRY32 me32);

int  c=0;

int main(int argc, char *argv[]) {

 printf("[$] dll occurency finder utility /n");
 printf("[$] coded by Piotr Bania <bania.piotr@gmail.com/n/n");
 if (argc!=2) {
  printf("[!] Usage: %s <dll_name>/n",argv[0]);
  printf("[!] For example: %s KERNEL32.DLL/n",argv[0]);
  return 0;
 }
  
 find_dll(argv[1]);

 printf("/n[+] Scaning ended, found %d occurences./n",c);
 printf("Bye :)/n");
 getch();

 return 0;
}

void display_info(char *filename,PROCESSENTRY32 pe32,MODULEENTRY32 me32) {
 

 printf("/n[*] --- MODULE OCCURENCY FOUND ---/n");
 printf("[+] %s found in %s (PID=0x%X)/n",filename,pe32.szExeFile,pe32.th32ProcessID);
 printf("[+] %s base located at: 0x%08x/n",filename,me32.modBaseAddr);
 printf("[+] %s handle in process: 0x%X/n",filename,me32.hModule);
 printf("[+] %s size of module: 0x%X bytes/n",filename,me32.modBaseSize);
 printf("[+] %s path: %s/n",filename,me32.szExePath);
 printf("[*] --- PRESS ANY KEY TO CONTINUE ---/n/n");
 c++;

 // super pseudo randomization fatal exit *:)*
 if (getch()==27) exit(GetTickCount());
}

int find_dll(char *filename) {
 HANDLE hSnap,hMSnap;
 PROCESSENTRY32 pe32;
 MODULEENTRY32 me32;

 hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
 
 if (hSnap==INVALID_HANDLE_VALUE) {
  printf("[!] Error: Cannot create snapshot for processes, error=%d/n",GetLastError());
  return FALSE;
 }

 printf("[+] Snapshot for processes created, handle=0x%X/n",hSnap);
 
 if (Process32First(hSnap,&pe32)==FALSE) {
     printf("[!] Error: Process32First() failed, error=%d/n",GetLastError());
  return FALSE;
 }

 hMSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe32.th32ProcessID);
 if (hMSnap==INVALID_HANDLE_VALUE) {
  printf("[!] Error: Cannot create snapshot for modules, error=%d/n",GetLastError());
  return FALSE;
 }
 
 printf("[+] Searching in %s (PID=0x%X) for module occurency./n",pe32.szExeFile,pe32.th32ProcessID);
 if (Module32First(hMSnap,&me32)==NULL) {
  printf("[!] Error: Module32First() failed, error=%d/n",GetLastError());
  return FALSE;
 }
  

 if (!strcmpi(filename,me32.szModule)) display_info(filename,pe32,me32);
 while(Module32Next(hMSnap,&me32)!=FALSE) {
  if (!strcmpi(filename,me32.szModule)) display_info(filename,pe32,me32);
 }
 CloseHandle(hMSnap);
 //printf("/nNext process/n");

 while(Process32Next(hSnap,&pe32)!=NULL) {
  hMSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe32.th32ProcessID);
  if (hMSnap==INVALID_HANDLE_VALUE) {
   printf("[!] Error: Cannot create modules snapshot for %s (PID=0x%X), error=%d/n",pe32.szExeFile,pe32.th32ProcessID,GetLastError());
   goto next_process;
  }
   
  printf("[+] Searching in %s (PID=0x%X) for module occurency./n",pe32.szExeFile,pe32.th32ProcessID);
  if (Module32First(hMSnap,&me32)!=NULL) {
   if (!strcmpi(filename,me32.szModule)) display_info(filename,pe32,me32);
    while(Module32Next(hMSnap,&me32)!=FALSE) {
     if (!strcmpi(filename,me32.szModule)) display_info(filename,pe32,me32);
    }
   next_process:
   CloseHandle(hMSnap);
   }
  else {
   printf("[!] Error: Cannot creat snapshot for modules, error=%d/n",GetLastError());
   return FALSE; 
  }
 }     
  
 CloseHandle(hMSnap);
 CloseHandle(hSnap);
}

抱歉!评论已关闭.