zoukankan      html  css  js  c++  java
  • PEB标记反调试方法

                PEB标记反调试方法

    一丶PEB结构简介

      PEB.简称进程环境快. 我们在讲DLL隐藏的时候已经说过了.

    具体博客链接: https://www.cnblogs.com/iBinary/p/9601860.html

    那么我们现在直接看下PEB结构体吧

    [+0x000] InheritedAddressSpace : 0x0 [Type: unsigned char]
        [+0x001] ReadImageFileExecOptions : 0x0 [Type: unsigned char]
        [+0x002] BeingDebugged    : 0x1 [Type: unsigned char]           //一个char类型.为1表示调试状态.为0表示没有调试.可以用于反调试. API也是从这里获取的标志
        [+0x003] BitField         : 0x8 [Type: unsigned char]
        [+0x003 ( 0: 0)] ImageUsesLargePages : 0x0 [Type: unsigned char]
        [+0x003 ( 1: 1)] IsProtectedProcess : 0x0 [Type: unsigned char]
        [+0x003 ( 2: 2)] IsLegacyProcess  : 0x0 [Type: unsigned char]
        [+0x003 ( 3: 3)] IsImageDynamicallyRelocated : 0x1 [Type: unsigned char]
        [+0x003 ( 4: 4)] SkipPatchingUser32Forwarders : 0x0 [Type: unsigned char]
        [+0x003 ( 7: 5)] SpareBits        : 0x0 [Type: unsigned char]
        [+0x004] Mutant           : 0xffffffff [Type: void *]
        [+0x008] ImageBaseAddress : 0x11d0000 [Type: void *]
        [+0x00c] Ldr              : 0x77190200 [Type: _PEB_LDR_DATA *]   //用于模块隐藏的结构体
        [+0x010] ProcessParameters : 0x7216d0 [Type: _RTL_USER_PROCESS_PARAMETERS *]
        [+0x014] SubSystemData    : 0x0 [Type: void *]
        [+0x018] ProcessHeap      : 0x720000 [Type: void *]
        [+0x01c] FastPebLock      : 0x77192100 [Type: _RTL_CRITICAL_SECTION *]
        [+0x020] AtlThunkSListPtr : 0x0 [Type: void *]
        [+0x024] IFEOKey          : 0x0 [Type: void *]
        [+0x028] CrossProcessFlags : 0x2 [Type: unsigned long]
        [+0x028 ( 0: 0)] ProcessInJob     : 0x0 [Type: unsigned long]
        [+0x028 ( 1: 1)] ProcessInitializing : 0x1 [Type: unsigned long]
        [+0x028 ( 2: 2)] ProcessUsingVEH  : 0x0 [Type: unsigned long]
        [+0x028 ( 3: 3)] ProcessUsingVCH  : 0x0 [Type: unsigned long]
        [+0x028 ( 4: 4)] ProcessUsingFTH  : 0x0 [Type: unsigned long]
        [+0x028 (31: 5)] ReservedBits0    : 0x0 [Type: unsigned long]
        [+0x02c] KernelCallbackTable : 0x0 [Type: void *]
        [+0x02c] UserSharedInfoPtr : 0x0 [Type: void *]
        [+0x030] SystemReserved   [Type: unsigned long [1]]
        [+0x034] AtlThunkSListPtr32 : 0x0 [Type: unsigned long]
        [+0x038] ApiSetMap        : 0x40000 [Type: void *]
        [+0x03c] TlsExpansionCounter : 0x0 [Type: unsigned long]
        [+0x040] TlsBitmap        : 0x77194250 [Type: void *]
        [+0x044] TlsBitmapBits    [Type: unsigned long [2]]
        [+0x04c] ReadOnlySharedMemoryBase : 0x7efe0000 [Type: void *]
        [+0x050] HotpatchInformation : 0x0 [Type: void *]
        [+0x054] ReadOnlyStaticServerData : 0x7efe0a90 [Type: void * *]
        [+0x058] AnsiCodePageData : 0x7efa0000 [Type: void *]
        [+0x05c] OemCodePageData  : 0x7efa0000 [Type: void *]
        [+0x060] UnicodeCaseTableData : 0x7efd0028 [Type: void *]
        [+0x064] NumberOfProcessors : 0x8 [Type: unsigned long]
        [+0x068] NtGlobalFlag     : 0x70 [Type: unsigned long]
        [+0x070] CriticalSectionTimeout : {-25920000000000} [Type: _LARGE_INTEGER]
        [+0x078] HeapSegmentReserve : 0x100000 [Type: unsigned long]
        [+0x07c] HeapSegmentCommit : 0x2000 [Type: unsigned long]
        [+0x080] HeapDeCommitTotalFreeThreshold : 0x10000 [Type: unsigned long]
        [+0x084] HeapDeCommitFreeBlockThreshold : 0x1000 [Type: unsigned long]
        [+0x088] NumberOfHeaps    : 0x1 [Type: unsigned long]
        [+0x08c] MaximumNumberOfHeaps : 0x10 [Type: unsigned long]
        [+0x090] ProcessHeaps     : 0x77194760 [Type: void * *]
        [+0x094] GdiSharedHandleTable : 0x0 [Type: void *]
        [+0x098] ProcessStarterHelper : 0x0 [Type: void *]
        [+0x09c] GdiDCAttributeList : 0x0 [Type: unsigned long]
        [+0x0a0] LoaderLock       : 0x771920c0 [Type: _RTL_CRITICAL_SECTION *]
        [+0x0a4] OSMajorVersion   : 0x6 [Type: unsigned long]
        [+0x0a8] OSMinorVersion   : 0x1 [Type: unsigned long]
        [+0x0ac] OSBuildNumber    : 0x1db1 [Type: unsigned short]
        [+0x0ae] OSCSDVersion     : 0x100 [Type: unsigned short]
        [+0x0b0] OSPlatformId     : 0x2 [Type: unsigned long]
        [+0x0b4] ImageSubsystem   : 0x3 [Type: unsigned long]
        [+0x0b8] ImageSubsystemMajorVersion : 0x6 [Type: unsigned long]
        [+0x0bc] ImageSubsystemMinorVersion : 0x0 [Type: unsigned long]
        [+0x0c0] ActiveProcessAffinityMask : 0xff [Type: unsigned long]
        [+0x0c4] GdiHandleBuffer  [Type: unsigned long [34]]
        [+0x14c] PostProcessInitRoutine : 0x0 [Type: void (*)()]
        [+0x150] TlsExpansionBitmap : 0x77194248 [Type: void *]
        [+0x154] TlsExpansionBitmapBits [Type: unsigned long [32]]
        [+0x1d4] SessionId        : 0x1 [Type: unsigned long]
        [+0x1d8] AppCompatFlags   : {0x0} [Type: _ULARGE_INTEGER]
        [+0x1e0] AppCompatFlagsUser : {0x0} [Type: _ULARGE_INTEGER]
        [+0x1e8] pShimData        : 0x0 [Type: void *]
        [+0x1ec] AppCompatInfo    : 0x0 [Type: void *]
        [+0x1f0] CSDVersion       : "Service Pack 1" [Type: _UNICODE_STRING]
        [+0x1f8] ActivationContextData : 0x60000 [Type: _ACTIVATION_CONTEXT_DATA *]
        [+0x1fc] ProcessAssemblyStorageMap : 0x0 [Type: _ASSEMBLY_STORAGE_MAP *]
        [+0x200] SystemDefaultActivationContextData : 0x50000 [Type: _ACTIVATION_CONTEXT_DATA *]
        [+0x204] SystemAssemblyStorageMap : 0x0 [Type: _ASSEMBLY_STORAGE_MAP *]
        [+0x208] MinimumStackCommit : 0x0 [Type: unsigned long]
        [+0x20c] FlsCallback      : 0x0 [Type: _FLS_CALLBACK_INFO *]
        [+0x210] FlsListHead      [Type: _LIST_ENTRY]
        [+0x218] FlsBitmap        : 0x77194240 [Type: void *]
        [+0x21c] FlsBitmapBits    [Type: unsigned long [4]]
        [+0x22c] FlsHighIndex     : 0x0 [Type: unsigned long]
        [+0x230] WerRegistrationData : 0x0 [Type: void *]
        [+0x234] WerShipAssertPtr : 0x0 [Type: void *]
        [+0x238] pContextData     : 0x70000 [Type: void *]
        [+0x23c] pImageHeaderHash : 0x0 [Type: void *]
        [+0x240] TracingFlags     : 0x0 [Type: unsigned long]
        [+0x240 ( 0: 0)] HeapTracingEnabled : 0x0 [Type: unsigned long]
        [+0x240 ( 1: 1)] CritSecTracingEnabled : 0x0 [Type: unsigned long]
        [+0x240 (31: 2)] SpareTracingBits : 0x0 [Type: unsigned long]

    可以看到在加2的地方是表示是否被调试的标志.我们可以利用这个表示.请看下方代码.

    二丶具体代码实现.

      

    // PEB反调试.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <Windows.h>
    
    int main()
    {
        
        DWORD dwIsDebug = 0;
        //dwIsDebug = ::IsDebuggerPresent();  IsDebuggerPresent的表示就是从PEB获取的.
        __asm
        {
            mov eax, fs:[0x18];   //获取TEB  
            mov eax, [eax + 0x30];// 获取PEB
            movzx eax, [eax + 2];//获取调试标志
            mov dwIsDebug,eax
        }
        if (1 == dwIsDebug)
        {
            printf("你的程序正在被调试
    ");
            getchar();
        }
        else
        {
            printf("你的程序没有被调试
    ");
            getchar();
        }
        return 0;
    }

    而操作系统提供了一个API就是判断是否被调试的.其实内部也是获取PEB标志,有兴趣的可以反汇编查看.

    三丶实现结果

      x32dbg启动

    正常启动

  • 相关阅读:
    [转]实习生需要懂的40大基本规矩
    [转]Linux下pppoe配合Drcom插件上网方法介绍......
    收藏一些图书
    [转]30个自我提升技巧
    [转]关于Gmail打不开的解决办法
    [转]李开复经典语录盘点:人生之路在于每次的选择
    [转]哈佛管理世界中智慧
    胡伟武校友在2011年中国科大本科生毕业典礼暨学位授予仪式上的讲话
    Dynamics4.0和Dynamics2011处理Email的方法
    JS实现简单的ToolTip功能
  • 原文地址:https://www.cnblogs.com/iBinary/p/9606747.html
Copyright © 2011-2022 走看看