<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    詳解七句匯編獲取Kernel32模塊地址

    VSole2022-01-19 16:40:27

    學習殼的過程中,為了獲取了Kernel32的基址的代碼,在加密殼的時候直接使用。使用Onlydbg逆向截取到相應代碼,當時的我無法理解這些代碼。現在的我有所理解,寫個解析記錄分享一下,代碼塊如下:

    GetKernel32Base proc    assume fs:nothing               ;開始使用fs寄存器    mov eax, dword ptr fs : [30h]   ;指向PEB結構    mov eax, dword ptr[eax + 0Ch]   ;指向LDR Ptr32 _PEB_LDR_DATA    mov eax, dword ptr[eax + 0Ch]   ;指向InLoadOrderModuleList _LIST_ENTRY    mov eax, dword ptr[eax]         ;移動_LIST_ENTRY    mov eax, dword ptr[eax]         ;指向Kernel32    mov eax, dword ptr[eax + 18h]   ;指向DllBase基址    retGetKernelBase endp
    

    1、第一行代碼:assume fs:nothing

    FS寄存器指向當前活動線程的TEB結構(線程結構),缺省情況下fs:error表示fs未使用,若要引用fs寄存器,需fs:nothing后,才可使用。

    2、第二行代碼:mov eax,dword ptr fs:[30h]

    我們使用Windbg來觀察結構體,輔助我們的理解。

    輸入 dt _teb

    0x30處是:ProcessEnvironmentBlock

    類型是:Ptr32 _PEB

    指向PEB

    附帶Teb結構:

    0:000> dt _tebntdll!_TEB   +0x000 NtTib            : _NT_TIB   +0x01c EnvironmentPointer : Ptr32 Void   +0x020 ClientId         : _CLIENT_ID   +0x028 ActiveRpcHandle  : Ptr32 Void   +0x02c ThreadLocalStoragePointer : Ptr32 Void   +0x030 ProcessEnvironmentBlock : Ptr32 _PEB   +0x034 LastErrorValue   : Uint4B   +0x038 CountOfOwnedCriticalSections : Uint4B   +0x03c CsrClientThread  : Ptr32 Void   +0x040 Win32ThreadInfo  : Ptr32 Void   +0x044 User32Reserved   : [26] Uint4B   +0x0ac UserReserved     : [5] Uint4B   +0x0c0 WOW32Reserved    : Ptr32 Void   +0x0c4 CurrentLocale    : Uint4B   +0x0c8 FpSoftwareStatusRegister : Uint4B   +0x0cc ReservedForDebuggerInstrumentation : [16] Ptr32 Void   +0x10c SystemReserved1  : [26] Ptr32 Void   +0x174 PlaceholderCompatibilityMode : Char   +0x175 PlaceholderHydrationAlwaysExplicit : UChar   +0x176 PlaceholderReserved : [10] Char   +0x180 ProxiedProcessId : Uint4B   +0x184 _ActivationStack : _ACTIVATION_CONTEXT_STACK   +0x19c WorkingOnBehalfTicket : [8] UChar   +0x1a4 ExceptionCode    : Int4B   +0x1a8 ActivationContextStackPointer : Ptr32 _ACTIVATION_CONTEXT_STACK   +0x1ac InstrumentationCallbackSp : Uint4B   +0x1b0 InstrumentationCallbackPreviousPc : Uint4B   +0x1b4 InstrumentationCallbackPreviousSp : Uint4B   +0x1b8 InstrumentationCallbackDisabled : UChar   +0x1b9 SpareBytes       : [23] UChar   +0x1d0 TxFsContext      : Uint4B   +0x1d4 GdiTebBatch      : _GDI_TEB_BATCH   +0x6b4 RealClientId     : _CLIENT_ID   +0x6bc GdiCachedProcessHandle : Ptr32 Void   +0x6c0 GdiClientPID     : Uint4B   +0x6c4 GdiClientTID     : Uint4B   +0x6c8 GdiThreadLocalInfo : Ptr32 Void   +0x6cc Win32ClientInfo  : [62] Uint4B   +0x7c4 glDispatchTable  : [233] Ptr32 Void   +0xb68 glReserved1      : [29] Uint4B   +0xbdc glReserved2      : Ptr32 Void   +0xbe0 glSectionInfo    : Ptr32 Void   +0xbe4 glSection        : Ptr32 Void   +0xbe8 glTable          : Ptr32 Void   +0xbec glCurrentRC      : Ptr32 Void   +0xbf0 glContext        : Ptr32 Void   +0xbf4 LastStatusValue  : Uint4B   +0xbf8 StaticUnicodeString : _UNICODE_STRING   +0xc00 StaticUnicodeBuffer : [261] Wchar   +0xe0c DeallocationStack : Ptr32 Void   +0xe10 TlsSlots         : [64] Ptr32 Void   +0xf10 TlsLinks         : _LIST_ENTRY   +0xf18 Vdm              : Ptr32 Void   +0xf1c ReservedForNtRpc : Ptr32 Void   +0xf20 DbgSsReserved    : [2] Ptr32 Void   +0xf28 HardErrorMode    : Uint4B   +0xf2c Instrumentation  : [9] Ptr32 Void   +0xf50 ActivityId       : _GUID   +0xf60 SubProcessTag    : Ptr32 Void   +0xf64 PerflibData      : Ptr32 Void   +0xf68 EtwTraceData     : Ptr32 Void   +0xf6c WinSockData      : Ptr32 Void   +0xf70 GdiBatchCount    : Uint4B   +0xf74 CurrentIdealProcessor : _PROCESSOR_NUMBER   +0xf74 IdealProcessorValue : Uint4B   +0xf74 ReservedPad0     : UChar   +0xf75 ReservedPad1     : UChar   +0xf76 ReservedPad2     : UChar   +0xf77 IdealProcessor   : UChar   +0xf78 GuaranteedStackBytes : Uint4B   +0xf7c ReservedForPerf  : Ptr32 Void   +0xf80 ReservedForOle   : Ptr32 Void   +0xf84 WaitingOnLoaderLock : Uint4B   +0xf88 SavedPriorityState : Ptr32 Void   +0xf8c ReservedForCodeCoverage : Uint4B   +0xf90 ThreadPoolData   : Ptr32 Void   +0xf94 TlsExpansionSlots : Ptr32 Ptr32 Void   +0xf98 MuiGeneration    : Uint4B   +0xf9c IsImpersonating  : Uint4B   +0xfa0 NlsCache         : Ptr32 Void   +0xfa4 pShimData        : Ptr32 Void   +0xfa8 HeapData         : Uint4B   +0xfac CurrentTransactionHandle : Ptr32 Void   +0xfb0 ActiveFrame      : Ptr32 _TEB_ACTIVE_FRAME   +0xfb4 FlsData          : Ptr32 Void   +0xfb8 PreferredLanguages : Ptr32 Void   +0xfbc UserPrefLanguages : Ptr32 Void   +0xfc0 MergedPrefLanguages : Ptr32 Void   +0xfc4 MuiImpersonation : Uint4B   +0xfc8 CrossTebFlags    : Uint2B   +0xfc8 SpareCrossTebBits : Pos 0, 16 Bits   +0xfca SameTebFlags     : Uint2B   +0xfca SafeThunkCall    : Pos 0, 1 Bit   +0xfca InDebugPrint     : Pos 1, 1 Bit   +0xfca HasFiberData     : Pos 2, 1 Bit   +0xfca SkipThreadAttach : Pos 3, 1 Bit   +0xfca WerInShipAssertCode : Pos 4, 1 Bit   +0xfca RanProcessInit   : Pos 5, 1 Bit   +0xfca ClonedThread     : Pos 6, 1 Bit   +0xfca SuppressDebugMsg : Pos 7, 1 Bit   +0xfca DisableUserStackWalk : Pos 8, 1 Bit   +0xfca RtlExceptionAttached : Pos 9, 1 Bit   +0xfca InitialThread    : Pos 10, 1 Bit   +0xfca SessionAware     : Pos 11, 1 Bit   +0xfca LoadOwner        : Pos 12, 1 Bit   +0xfca LoaderWorker     : Pos 13, 1 Bit   +0xfca SkipLoaderInit   : Pos 14, 1 Bit   +0xfca SpareSameTebBits : Pos 15, 1 Bit   +0xfcc TxnScopeEnterCallback : Ptr32 Void   +0xfd0 TxnScopeExitCallback : Ptr32 Void   +0xfd4 TxnScopeContext  : Ptr32 Void   +0xfd8 LockCount        : Uint4B   +0xfdc WowTebOffset     : Int4B   +0xfe0 ResourceRetValue : Ptr32 Void   +0xfe4 ReservedForWdf   : Ptr32 Void   +0xfe8 ReservedForCrt   : Uint8B   +0xff0 EffectiveContainerId : _GUID
    

    3、第三行代碼:mov eax,dword ptr [eax+0Ch]

    輸入 dt _peb

    0x0C處是:Ldr

    類型是:Ptr32 _PEB_LDR_DATA

    附帶Peb結構:

    0:000> dt _pebntdll!_PEB   +0x000 InheritedAddressSpace : UChar   +0x001 ReadImageFileExecOptions : UChar   +0x002 BeingDebugged    : UChar   +0x003 BitField         : UChar   +0x003 ImageUsesLargePages : Pos 0, 1 Bit   +0x003 IsProtectedProcess : Pos 1, 1 Bit   +0x003 IsImageDynamicallyRelocated : Pos 2, 1 Bit   +0x003 SkipPatchingUser32Forwarders : Pos 3, 1 Bit   +0x003 IsPackagedProcess : Pos 4, 1 Bit   +0x003 IsAppContainer   : Pos 5, 1 Bit   +0x003 IsProtectedProcessLight : Pos 6, 1 Bit   +0x003 IsLongPathAwareProcess : Pos 7, 1 Bit   +0x004 Mutant           : Ptr32 Void   +0x008 ImageBaseAddress : Ptr32 Void   +0x00c Ldr              : Ptr32 _PEB_LDR_DATA   +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS   +0x014 SubSystemData    : Ptr32 Void   +0x018 ProcessHeap      : Ptr32 Void   +0x01c FastPebLock      : Ptr32 _RTL_CRITICAL_SECTION   +0x020 AtlThunkSListPtr : Ptr32 _SLIST_HEADER   +0x024 IFEOKey          : Ptr32 Void   +0x028 CrossProcessFlags : Uint4B   +0x028 ProcessInJob     : Pos 0, 1 Bit   +0x028 ProcessInitializing : Pos 1, 1 Bit   +0x028 ProcessUsingVEH  : Pos 2, 1 Bit   +0x028 ProcessUsingVCH  : Pos 3, 1 Bit   +0x028 ProcessUsingFTH  : Pos 4, 1 Bit   +0x028 ProcessPreviouslyThrottled : Pos 5, 1 Bit   +0x028 ProcessCurrentlyThrottled : Pos 6, 1 Bit   +0x028 ProcessImagesHotPatched : Pos 7, 1 Bit   +0x028 ReservedBits0    : Pos 8, 24 Bits   +0x02c KernelCallbackTable : Ptr32 Void   +0x02c UserSharedInfoPtr : Ptr32 Void   +0x030 SystemReserved   : Uint4B   +0x034 AtlThunkSListPtr32 : Ptr32 _SLIST_HEADER   +0x038 ApiSetMap        : Ptr32 Void   +0x03c TlsExpansionCounter : Uint4B   +0x040 TlsBitmap        : Ptr32 Void   +0x044 TlsBitmapBits    : [2] Uint4B   +0x04c ReadOnlySharedMemoryBase : Ptr32 Void   +0x050 SharedData       : Ptr32 Void   +0x054 ReadOnlyStaticServerData : Ptr32 Ptr32 Void   +0x058 AnsiCodePageData : Ptr32 Void   +0x05c OemCodePageData  : Ptr32 Void   +0x060 UnicodeCaseTableData : Ptr32 Void   +0x064 NumberOfProcessors : Uint4B   +0x068 NtGlobalFlag     : Uint4B   +0x070 CriticalSectionTimeout : _LARGE_INTEGER   +0x078 HeapSegmentReserve : Uint4B   +0x07c HeapSegmentCommit : Uint4B   +0x080 HeapDeCommitTotalFreeThreshold : Uint4B   +0x084 HeapDeCommitFreeBlockThreshold : Uint4B   +0x088 NumberOfHeaps    : Uint4B   +0x08c MaximumNumberOfHeaps : Uint4B   +0x090 ProcessHeaps     : Ptr32 Ptr32 Void   +0x094 GdiSharedHandleTable : Ptr32 Void   +0x098 ProcessStarterHelper : Ptr32 Void   +0x09c GdiDCAttributeList : Uint4B   +0x0a0 LoaderLock       : Ptr32 _RTL_CRITICAL_SECTION   +0x0a4 OSMajorVersion   : Uint4B   +0x0a8 OSMinorVersion   : Uint4B   +0x0ac OSBuildNumber    : Uint2B   +0x0ae OSCSDVersion     : Uint2B   +0x0b0 OSPlatformId     : Uint4B   +0x0b4 ImageSubsystem   : Uint4B   +0x0b8 ImageSubsystemMajorVersion : Uint4B   +0x0bc ImageSubsystemMinorVersion : Uint4B   +0x0c0 ActiveProcessAffinityMask : Uint4B   +0x0c4 GdiHandleBuffer  : [34] Uint4B   +0x14c PostProcessInitRoutine : Ptr32     void   +0x150 TlsExpansionBitmap : Ptr32 Void   +0x154 TlsExpansionBitmapBits : [32] Uint4B   +0x1d4 SessionId        : Uint4B   +0x1d8 AppCompatFlags   : _ULARGE_INTEGER   +0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER   +0x1e8 pShimData        : Ptr32 Void   +0x1ec AppCompatInfo    : Ptr32 Void   +0x1f0 CSDVersion       : _UNICODE_STRING   +0x1f8 ActivationContextData : Ptr32 _ACTIVATION_CONTEXT_DATA   +0x1fc ProcessAssemblyStorageMap : Ptr32 _ASSEMBLY_STORAGE_MAP   +0x200 SystemDefaultActivationContextData : Ptr32 _ACTIVATION_CONTEXT_DATA   +0x204 SystemAssemblyStorageMap : Ptr32 _ASSEMBLY_STORAGE_MAP   +0x208 MinimumStackCommit : Uint4B   +0x20c SparePointers    : [4] Ptr32 Void   +0x21c SpareUlongs      : [5] Uint4B   +0x230 WerRegistrationData : Ptr32 Void   +0x234 WerShipAssertPtr : Ptr32 Void   +0x238 pUnused          : Ptr32 Void   +0x23c pImageHeaderHash : Ptr32 Void   +0x240 TracingFlags     : Uint4B   +0x240 HeapTracingEnabled : Pos 0, 1 Bit   +0x240 CritSecTracingEnabled : Pos 1, 1 Bit   +0x240 LibLoaderTracingEnabled : Pos 2, 1 Bit   +0x240 SpareTracingBits : Pos 3, 29 Bits   +0x248 CsrServerReadOnlySharedMemoryBase : Uint8B   +0x250 TppWorkerpListLock : Uint4B   +0x254 TppWorkerpList   : _LIST_ENTRY   +0x25c WaitOnAddressHashTable : [128] Ptr32 Void   +0x45c TelemetryCoverageHeader : Ptr32 Void   +0x460 CloudFileFlags   : Uint4B   +0x464 CloudFileDiagFlags : Uint4B   +0x468 PlaceholderCompatibilityMode : Char   +0x469 PlaceholderCompatibilityModeReserved : [7] Char   +0x470 LeapSecondData   : Ptr32 _LEAP_SECOND_DATA   +0x474 LeapSecondFlags  : Uint4B   +0x474 SixtySecondEnabled : Pos 0, 1 Bit   +0x474 Reserved         : Pos 1, 31 Bits   +0x478 NtGlobalFlag2    : Uint4B
    

    4、第四行代碼:mov eax, dword ptr [eax+0Ch]

    輸入 dt _PEB_LDR_DATA

    0x0C處是InLoadOrderModuleList

    類型是:_LIST_ENTRY

     

    附帶_PEB_LDR_DATA結構:

    0:000> dt _PEB_LDR_DATAntdll!_PEB_LDR_DATA   +0x000 Length           : Uint4B   +0x004 Initialized      : UChar   +0x008 SsHandle         : Ptr32 Void   +0x00c InLoadOrderModuleList : _LIST_ENTRY   +0x014 InMemoryOrderModuleList : _LIST_ENTRY   +0x01c InInitializationOrderModuleList : _LIST_ENTRY   +0x024 EntryInProgress  : Ptr32 Void   +0x028 ShutdownInProgress : UChar   +0x02c ShutdownThreadId : Ptr32 Void
    

    5、第五、六行代碼:mov eax, dword ptr [eax]

    輸入 dt _LIST_ENTRY

    0x00處是:Flink

    類型是:Ptr32 _LIST_ENTRY

    _LIST_ENTRY結構如下:

    0:000> dt _LIST_ENTRYntdll!_LIST_ENTRY   +0x000 Flink            : Ptr32 _LIST_ENTRY   +0x004 Blink            : Ptr32 _LIST_ENTRY
    

    flink:指向前一個_LIST_ENTRY

    blink:指向后一個_LIST_ENTRY

    可以使用他們遍歷所以DLL導入模塊

    接下來就是要知道Kernel32是在第幾塊鏈表中,輸入 !peb,可以查看加載順序,發現是第3項,于是mov eax, dword ptr [eax]執行兩次,指針向下移動兩次,來到第三塊。

    Windows的KERNEL32.dll的加載順序是固定的,于是可以放心這樣獲取KERNEL32模塊基址。

    6、第七行代碼:mov eax,dword ptr [eax + 18h]

    輸入命令:dt -b _LDR_DATA_TABLE_ENTRY

    可以發現18h的地方是DllBase的基址,正好是我們所需要的

     

    附帶_LDR_DATA_TABLE_ENTRY結構:

    0:000> dt -b _LDR_DATA_TABLE_ENTRYntdll!_LDR_DATA_TABLE_ENTRY   +0x000 InLoadOrderLinks : _LIST_ENTRY      +0x000 Flink            : Ptr32      +0x004 Blink            : Ptr32   +0x008 InMemoryOrderLinks : _LIST_ENTRY      +0x000 Flink            : Ptr32      +0x004 Blink            : Ptr32   +0x010 InInitializationOrderLinks : _LIST_ENTRY      +0x000 Flink            : Ptr32      +0x004 Blink            : Ptr32   +0x018 DllBase          : Ptr32   +0x01c EntryPoint       : Ptr32   +0x020 SizeOfImage      : Uint4B   +0x024 FullDllName      : _UNICODE_STRING      +0x000 Length           : Uint2B      +0x002 MaximumLength    : Uint2B      +0x004 Buffer           : Ptr32   +0x02c BaseDllName      : _UNICODE_STRING      +0x000 Length           : Uint2B      +0x002 MaximumLength    : Uint2B      +0x004 Buffer           : Ptr32   +0x034 FlagGroup        : UChar   +0x034 Flags            : Uint4B   +0x034 PackagedBinary   : Pos 0, 1 Bit   +0x034 MarkedForRemoval : Pos 1, 1 Bit   +0x034 ImageDll         : Pos 2, 1 Bit   +0x034 LoadNotificationsSent : Pos 3, 1 Bit   +0x034 TelemetryEntryProcessed : Pos 4, 1 Bit   +0x034 ProcessStaticImport : Pos 5, 1 Bit   +0x034 InLegacyLists    : Pos 6, 1 Bit   +0x034 InIndexes        : Pos 7, 1 Bit   +0x034 ShimDll          : Pos 8, 1 Bit   +0x034 InExceptionTable : Pos 9, 1 Bit   +0x034 ReservedFlags1   : Pos 10, 2 Bits   +0x034 LoadInProgress   : Pos 12, 1 Bit   +0x034 LoadConfigProcessed : Pos 13, 1 Bit   +0x034 EntryProcessed   : Pos 14, 1 Bit   +0x034 ProtectDelayLoad : Pos 15, 1 Bit   +0x034 ReservedFlags3   : Pos 16, 2 Bits   +0x034 DontCallForThreads : Pos 18, 1 Bit   +0x034 ProcessAttachCalled : Pos 19, 1 Bit   +0x034 ProcessAttachFailed : Pos 20, 1 Bit   +0x034 CorDeferredValidate : Pos 21, 1 Bit   +0x034 CorImage         : Pos 22, 1 Bit   +0x034 DontRelocate     : Pos 23, 1 Bit   +0x034 CorILOnly        : Pos 24, 1 Bit   +0x034 ChpeImage        : Pos 25, 1 Bit   +0x034 ReservedFlags5   : Pos 26, 2 Bits   +0x034 Redirected       : Pos 28, 1 Bit   +0x034 ReservedFlags6   : Pos 29, 2 Bits   +0x034 CompatDatabaseProcessed : Pos 31, 1 Bit   +0x038 ObsoleteLoadCount : Uint2B   +0x03a TlsIndex         : Uint2B   +0x03c HashLinks        : _LIST_ENTRY      +0x000 Flink            : Ptr32      +0x004 Blink            : Ptr32   +0x044 TimeDateStamp    : Uint4B   +0x048 EntryPointActivationContext : Ptr32   +0x04c Lock             : Ptr32   +0x050 DdagNode         : Ptr32   +0x054 NodeModuleLink   : _LIST_ENTRY      +0x000 Flink            : Ptr32      +0x004 Blink            : Ptr32   +0x05c LoadContext      : Ptr32   +0x060 ParentDllBase    : Ptr32   +0x064 SwitchBackContext : Ptr32   +0x068 BaseAddressIndexNode : _RTL_BALANCED_NODE      +0x000 Children         : Ptr32      +0x000 Left             : Ptr32      +0x004 Right            : Ptr32      +0x008 Red              : Pos 0, 1 Bit      +0x008 Balance          : Pos 0, 2 Bits      +0x008 ParentValue      : Uint4B   +0x074 MappingInfoIndexNode : _RTL_BALANCED_NODE      +0x000 Children         : Ptr32      +0x000 Left             : Ptr32      +0x004 Right            : Ptr32      +0x008 Red              : Pos 0, 1 Bit      +0x008 Balance          : Pos 0, 2 Bits      +0x008 ParentValue      : Uint4B   +0x080 OriginalBase     : Uint4B   +0x088 LoadTime         : _LARGE_INTEGER      +0x000 LowPart          : Uint4B      +0x004 HighPart         : Int4B      +0x000 u                :          +0x000 LowPart          : Uint4B         +0x004 HighPart         : Int4B      +0x000 QuadPart         : Int8B   +0x090 BaseNameHashValue : Uint4B   +0x094 LoadReason       :      LoadReasonStaticDependency = 0n0      LoadReasonStaticForwarderDependency = 0n1      LoadReasonDynamicForwarderDependency = 0n2      LoadReasonDelayloadDependency = 0n3      LoadReasonDynamicLoad = 0n4      LoadReasonAsImageLoad = 0n5      LoadReasonAsDataLoad = 0n6      LoadReasonEnclavePrimary = 0n7      LoadReasonEnclaveDependency = 0n8      LoadReasonUnknown = 0n-1   +0x098 ImplicitPathOptions : Uint4B   +0x09c ReferenceCount   : Uint4B   +0x0a0 DependentLoadFlags : Uint4B   +0x0a4 SigningLevel     : UChar
    

    附帶找到的PEB、TEB相關結構圖一張,方便理解,感謝前輩們的無私貢獻,讓我們學習更加輕松:

    dwordlist_entry
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    學習殼的過程中,為了獲取了Kernel32的基址的代碼,在加密殼的時候直接使用。使用Onlydbg逆向截取到相應代碼,當時的我無法理解這些代碼。
    CobaltStrike ShellCode詳解
    2022-08-04 16:51:50
    接下來就是重點了,加載起來的這段shellcode開頭先將DF標志位置0,這里為什么這樣做后面會提到。
    shellcode編寫探究
    2022-06-09 15:34:57
    前言shellcode是不依賴環境,放到任何地方都可以執行的機器碼。shellcode的應用場景很多,本文不研究shellcode的具體應用,而只是研究編寫一個shellcode需要掌握哪些知識。要使用字符串,需要使用字符數組。所以我們需要用到 LoadLibrary 和 GetProcAddress 這兩個函數,來動態獲取系統API的函數指針。
    進程保護可以通過三環hook,諸如inline hook,IAT hook
    x32TLS回調函數實驗
    2023-05-31 09:34:55
    TLS回調函數介紹TLS回調函數是在程序運行時由操作系統自動調用的一組函數,用于在進程加載和卸載時執行一些初始化和清理操作。在TLS回調函數中,可以訪問當前線程的TLS數據,并對其進行修改或檢查。值得一提的是TLS回調可以用來反調試,原理實為在實際的入口點代碼執行之前執行檢測調試器代碼。為了棧平衡,我們要把傳進這個回調函數的參數所占用的
    Windows內核-句柄
    2022-04-16 16:06:49
    進程的地址空間分為系統空間和用戶空間,內核對象都保存在系統空間中,用戶空間不能通過地址作為指針來引用它們,Windows使用句柄(handle)來對內核對象進行引用。看起來很小,但是涉及的內容很多。
    在所有函數調用發生時,向棧幀內壓入一個額外的隨機 DWORD,隨機數標注為“SecurityCookie”。在函數返回之前,系統將執行一個額外的安全驗證操作,被稱做 Security check。
    CVE-2021-31956是由Windows Ntfs組件系統存在整形溢出所導致,該漏洞可導致本地權限提升。
    shellcode loader的編寫
    2023-04-17 11:15:39
    改變加載方式指針執行#include?參數1:分配的內存的起始地址,如果為NULL則由系統決定。參數2:分配的內存大小,以字節為單位。參數3:分配的內存類型,MEM_COMMIT表示將分配的內存立即提交給物理內存,MEM_RESERVE表示保留內存但不提交。參數4:分配的內存保護屬性,PAGE_READWRITE可讀可寫,PAGE_EXECUTE_READ可執行可讀。結構體的指針,用于指定新線程的安全屬性,NULL表示默認安全屬性
    在開始學習Async反向通信之前先來研究一個Sync正向通信案例,不論是正向反向通信其在通信模式上與《驅動開發:通過ReadFile與內核層通信》所介紹的通信模式基本一致,都是通過ReadFile觸發驅動中的IRP_MJ_READ讀取派遣。唯一的區別是在傳輸數據時使用了MmGetSystemAddressForMdl方式,它將給定MDL描述的物理頁面映射到系統空間,并調用RtlCopyMemory()將全局字符串復制到這個空間內,這樣客戶端就可以循環讀取內核傳出的數據。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类