PureBasic RunPE Detector :)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

PureBasic RunPE Detector :)

Message par celtic88 »

Slt les pures,
j ai fini de programmer un détecteur de runpe tres simple, la méthode est de comparer le processus avec son fichier sur le disk...

et voila le résulta

Code : Tout sélectionner

;By Celtic88 :)

IncludeFile "PEB_STRUCTURE.Pbi"

Structure PROCESS_BASIC_INFORMATION Align #PB_Structure_AlignC
  *Reserved1;
  *PebBaseAddress.PEB ;
  *Reserved2[2]       ;
  *UniqueProcessId    ;
  *Reserved3          ;
EndStructure

Prototype.l  GetModuleFileNameEx(hProcess.i,hModule.i,*Str,len.l)
OpenLibrary(0,"psapi.dll")
Global GetModuleFileNameEx.GetModuleFileNameEx = GetFunction(0,"GetModuleFileNameExW")

Structure Process_Info
  Pid.l
  Name.s
EndStructure

Procedure Process_Adjust_Token_Privileges()
  Protected priv.TOKEN_PRIVILEGES ,hToken .i,iReturn
  If( OpenProcessToken_( GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hToken ) )
    priv\PrivilegeCount           = 1;
    priv\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED;
    If( LookupPrivilegeValue_( #Null, #SE_DEBUG_NAME, @priv\Privileges[0]\Luid ) )
      iReturn=AdjustTokenPrivileges_( hToken, #False, @priv, 0, #Null, #Null );
      CloseHandle_( hToken )                                                  ;
    EndIf
  EndIf
  ProcedureReturn iReturn
EndProcedure

Procedure Process_Is_Injected_Process(pPid.l)
  Protected hProcess,GetPeb.PROCESS_BASIC_INFORMATION,iPeb.PEB,tIMAGE_DOS_HEADER.IMAGE_DOS_HEADER,FileName.s{#MAX_PATH},tIMAGE_DOS_HEADER2.IMAGE_DOS_HEADER,iReturn=-1,tIMAGE_NT_HEADERS.IMAGE_NT_HEADERS,tIMAGE_NT_HEADERS2.IMAGE_NT_HEADERS
  hProcess = OpenProcess_( #PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, #False, pPid );
  If hProcess
    If NtQueryInformationProcess_(hProcess, 0, @GetPeb,SizeOf(PROCESS_BASIC_INFORMATION),@Nsize) =#S_OK
      If ReadProcessMemory_(hProcess, GetPeb\PebBaseAddress, @iPeb, SizeOf(PEB), 0)
        If ReadProcessMemory_(hProcess, iPeb\lpImageBaseAddress,@tIMAGE_DOS_HEADER, SizeOf(IMAGE_DOS_HEADER), 0)
          If ReadProcessMemory_(hProcess, iPeb\lpImageBaseAddress+tIMAGE_DOS_HEADER\e_lfanew,@tIMAGE_NT_HEADERS, SizeOf(IMAGE_NT_HEADERS), 0)
            If GetModuleFileNameEx(hProcess,0,@FileName,#MAX_PATH)
              If ReadFile(0, FileName)
                ReadData(0,@tIMAGE_DOS_HEADER2,SizeOf(IMAGE_DOS_HEADER))
                FileSeek(0,tIMAGE_DOS_HEADER2\e_lfanew)
                ReadData(0,@tIMAGE_NT_HEADERS2,SizeOf(IMAGE_NT_HEADERS))
                CloseFile(0)
                iReturn= 1
                If CompareMemory(tIMAGE_DOS_HEADER,tIMAGE_DOS_HEADER2,SizeOf(IMAGE_DOS_HEADER))=1
                  If  tIMAGE_NT_HEADERS\OptionalHeader\SizeOfImage =  tIMAGE_NT_HEADERS2\OptionalHeader\SizeOfImage And 
                      CompareMemory(tIMAGE_NT_HEADERS\FileHeader,tIMAGE_NT_HEADERS2\FileHeader,SizeOf(IMAGE_FILE_HEADER)) =1
                    iReturn= 0
                  EndIf
                EndIf
              EndIf
            EndIf
          EndIf
        EndIf
      EndIf
    EndIf
    CloseHandle_(hProcess)
  EndIf
  ProcedureReturn iReturn
EndProcedure

Procedure Process_Get_Process_List(List Process_List.Process_Info())
  ClearList(Process_List())
  Protected hSnapshot,ProcEntry.PROCESSENTRY32
  hSnapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, #Null)
  If hSnapshot
    ClearStructure(@ProcEntry,PROCESSENTRY32)
    ProcEntry\dwSize = SizeOf(PROCESSENTRY32)
    If Process32First_(hSnapshot, @ProcEntry)
      While Process32Next_(hSnapshot, @ProcEntry)
        AddElement(Process_List())
        Process_List()\Pid = ProcEntry\th32ProcessID
        Process_List()\Name=PeekS(@ProcEntry\szExeFile)
      Wend
    EndIf
    CloseHandle_(hSnapshot)
  EndIf
  ProcedureReturn ListSize(Process_List())
EndProcedure

Process_Adjust_Token_Privileges()

NewList Process_List.Process_Info()
Process_Get_Process_List(Process_List())
ForEach Process_List()
   Debug "Process name : " +Process_List()\Name + " Pid : " + Str(Process_List()\Pid) + " Is Injected : "+ Str(Process_Is_Injected_Process(Process_List()\Pid))
Next
Dernière modification par celtic88 le jeu. 18/mai/2017 14:16, modifié 2 fois.
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: PureBasic RunPE Detector :)

Message par celtic88 »

Code : Tout sélectionner

;By Celtic88 (c) 2017
;Full PEB Structure

Structure UNICODE_STRING Align #PB_Structure_AlignC
  Length.w;                               
  MaximumLength.w;                         
  *Buffer        ;                               
EndStructure

Structure LIST_ENTRY Align #PB_Structure_AlignC
  *Flink.LIST_ENTRY;                              
  *Blink.LIST_ENTRY; 
EndStructure

Structure LDR_DATA_TABLE_ENTRY Align #PB_Structure_AlignC
  InLoadOrderModuleList.LIST_ENTRY;         
  InMemoryOrderModuleList.LIST_ENTRY;          
  InInitializationOrderModuleList.LIST_ENTRY;   
  *DllBase
  *EntryPoint
  SizeOfImage.l;                               
  FullDllName.UNICODE_STRING;                     
  BaseDllName.UNICODE_STRING;                 
  Flags.l                   ;                                        
  LoadCount.w               ;                               
  TlsIndex.w                ;                                
  HashTableEntry.LIST_ENTRY ;              
  TimeDateStamp.l           ;                            
EndStructure

Structure PEB_LDR_DATA Align #PB_Structure_AlignC
  dwLength.l;                                    
  dwInitialized.l;                               
  *lpSsHandle    ;                                    
  InLoadOrderModuleList.LIST_ENTRY;                
  InMemoryOrderModuleList.LIST_ENTRY;          
  InInitializationOrderModuleList.LIST_ENTRY
  *lpEntryInProgress
EndStructure

Structure RTL_CRITICAL_SECTION Align #PB_Structure_AlignC
  *DebugInfo;
  LockCount.l;
  RecursionCount.l;
  *OwningThread   ;
  *LockSemaphore  ;
  SpinCount.l     ;
EndStructure

Structure _ULARGE_INTEGER Align #PB_Structure_AlignC
  StructureUnion
    LowPart.l;
    HighPart.l;
    QuadPart.q;
  EndStructureUnion
EndStructure

Structure RTL_USER_PROCESS_PARAMETERS
  Reserved1.b[16];
  Reserved2.b[10];
  ImagePathName.UNICODE_STRING;
  CommandLine.UNICODE_STRING;
EndStructure

Structure PEB Align #PB_Structure_AlignC;528
  bInheritedAddressSpace.b
  bReadImageFileExecOptions.b
  bBeingDebugged.b
  bSpareBool.b
  *lpMutant
  *lpImageBaseAddress
  *pLdr.PEB_LDR_DATA
  *lpProcessParameters.RTL_USER_PROCESS_PARAMETERS
  *lpSubSystemData
  *lpProcessHeap
  *pFastPebLock.RTL_CRITICAL_SECTION
  *lpFastPebLockRoutine
  *lpFastPebUnlockRoutine
  dwEnvironmentUpdateCount.l
  *lpKernelCallbackTable
  dwSystemReserved.l;
  dwAtlThunkSListPtr32.l;
  *pFreeList.PEB_FREE_BLOCK
  dwTlsExpansionCounter.l
  *lpTlsBitmap
  dwTlsBitmapBits.l[2]
  *lpReadOnlySharedMemoryBase
  *lpReadOnlySharedMemoryHeap
  *lpReadOnlyStaticServerData
  *lpAnsiCodePageData
  *lpOemCodePageData
  *lpUnicodeCaseTableData
  NumberOfProcessors.l
  dwNtGlobalFlag.l
  liCriticalSectionTimeout._ULARGE_INTEGER
  dwHeapSegmentReserve.l
  dwHeapSegmentCommit.l
  dwHeapDeCommitTotalFreeThreshold.l
  dwHeapDeCommitFreeBlockThreshold.l
  dwNumberOfHeaps.l
  dwMaximumNumberOfHeaps.l
  *lpProcessHeaps
  *lpGdiSharedHandleTable
  *lpProcessStarterHelper
  dwGdiDCAttributeList.l
  *lpLoaderLock
  dwOSMajorVersion.l
  dwOSMinorVersion.l
  wOSBuildNumber.w
  wOSMinorVersion.w
  dwOSPlatformId.l
  dwImageSubsystem.l
  dwImageSubSystemMajorVersion.l
  dwImageSubSystemMinorVersion.l
  dwImageProcessAffinityMask.l;
  GdiHandleBuffer.l[34]
  *lpPostProcessInitRoutine
  *lpTlsExpansionBitmap
  dwTlsExpansionBitmapBits.l[32]
  dwSessionId.l
  liAppCompatFlags._ULARGE_INTEGER;
  liAppCompatFlagsUser._ULARGE_INTEGER;
  *lppShimData                        ;
  *lpAppCompatInfo                    ;
  usCSDVersion.UNICODE_STRING         ;
  *lpActivationContextData            ;
  *lpProcessAssemblyStorageMap        ;
  *lpSystemDefaultActivationContextData;
  *lpSystemAssemblyStorageMap          ;
  dwMinimumStackCommit.l               ;
EndStructure
.....i Love Pb :)
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: PureBasic RunPE Detector :)

Message par Shadow »

Salut celtic88, a quoi cela sert t-il ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: PureBasic RunPE Detector :)

Message par celtic88 »

un RunPE est une technique utilisée par de nombreux malwares,ce code sert a détecter les processus infecté


un programme similaire
http://www.libellules.ch/dotclear/index ... E-Detector :P

bonne chance
.....i Love Pb :)
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: PureBasic RunPE Detector :)

Message par Shadow »

Merci beaucoup celtic88 :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: PureBasic RunPE Detector :)

Message par celtic88 »

.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: PureBasic RunPE Detector :)

Message par celtic88 »

il ya une autre méthode plus avancée, en utilisant des "Hook" et intervenir avant la creation de processus victim " mode antivirus "
.....i Love Pb :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: PureBasic RunPE Detector :)

Message par Kwai chang caine »

Alors toi !!!! t'es vraiment trop fort 8O
Merci beaucoup pour le partage 8)

Pourquoi j'ai des "injected = 0" et des "injected = -1" ?
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: PureBasic RunPE Detector :)

Message par celtic88 »

re up
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: PureBasic RunPE Detector :)

Message par celtic88 »

Kwai chang caine
Bonjour
-1 = Erreur
0=le le processus est propre
1= attention! un autre processus caché derrière ce processus
.....i Love Pb :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: PureBasic RunPE Detector :)

Message par Kwai chang caine »

Merci de ta réponse 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre