PatchGuard自效驗粗略分析

Editor發表於2018-09-10

花了幾天時間,只是粗略除錯分析,patchguard實在是太大了,貧道無能 ,水平有限可能有不實之處。

有時間應該還會繼續除錯,研究吧。此處感謝 大表哥 這麼多的無私幫助。


//ed nt!Kd_SXS_Mask 0
//ed nt!Kd_FUSION_Mask 0
//.......
//Win10PG 負責解密PG執行的程式碼如果改了直接109
//PG context裡面會清理Dr暫存器
//
sidt fword ptr [rbp+4E0h]
INITKDBG:00000001402DC129 lidt fword ptr [rbp+378h]
INITKDBG:00000001402DC130 mov dr7, rax
INITKDBG:00000001402DC133 lidt fword ptr [rbp+4E0h]


除錯pgcontext用VT禁用Noimage記憶體寫入DR和呼叫lidt指令,然後用硬體斷點暫存器來除錯。pg裡面有些地方跟蹤很容易掛掉,暫且不提。

關於自效驗如下:

演算法有很多,貼一個,大概都是這種:


mov rax, [r9] ; Vu=*ULONG_PTR *Pg[0]
INITKDBG:00000001402DC29C mov ecx, r11d ; 可能計算的範圍?
INITKDBG:00000001402DC29F xor rax, r8 ; Vu=^
Vu2
INITKDBG:00000001402DC2A2 mov r8, [r9+8] ; Vu2=*ULONG_PTR *Pg[1]
INITKDBG:00000001402DC2A6 rol rax, cl ; rol(Vu,cl)
INITKDBG:00000001402DC2A9 add r9, 10h ; p=+0x10
INITKDBG:00000001402DC2AD xor r8, rax ;
Vu2
^count
INITKDBG:00000001402DC2B0 rol r8, cl ;
rol(
Vu2
,cl)
INITKDBG:00000001402DC2B3 sub rdx, r12 ; 是否計算完畢?
INITKDBG:00000001402DC2B6 jnz short cpg ; Vu=*ULONG_PTR *Pg[0]

r8最終=sign

我只跟到4處 sign

第一 pg解密呼叫處,此處在pg執行體頭部,進行效驗,計算得出的key與PatchGuard_CmpAppendDllSectionSign 對比。如果失敗,開頭就會進入藍屏流程了。

第二處是效驗pg_Exec上方逆效驗,也會對比sign,失敗進行奇葩操作(658h)。

第三處是正向計算pg_exec 下方效驗,也會對比sign 失敗進行奇葩操作(8B8h)

第四處、具體沒看,存在奇葩(828h)

Pg 17134 1804 自效驗pgcontext偏移:828h(101) 8B8h(109) 658h(101)

還有一處效驗沒有跟,它會呼叫KiDispatchCallout,暫時的解決辦法是寫 c3 (C0000005)

像這種執行時 自效驗 pgcontext裡面非常的多。

效驗一 PgEntry:

演算法在上方,很多,不貼了。

mov [rdi+0C4h], esi
INITKDBG:00000001402F246A cmp [rdi+8B8h], r8 ; //對比 sign 正確跳走 不正常給把錯誤碼賦值
INITKDBG:00000001402F2471 jz short loc_1402F24DD
INITKDBG:00000001402F2473 mov rax, [rdi+588h]
INITKDBG:00000001402F247A mov ecx, [rdi+684h]
INITKDBG:00000001402F2480 mov [rax], rdi
INITKDBG:00000001402F2483 mov [rax+10h], ecx
INITKDBG:00000001402F2486 mov eax, [rdi+790h]
INITKDBG:00000001402F248C mov rdx, [rdi+8B8h]
INITKDBG:00000001402F2493 test eax, eax
INITKDBG:00000001402F2495 jnz short loc_1402F24DD ; 進入藍屏流程
INITKDBG:00000001402F2497 mov rax, [rdi+588h]
INITKDBG:00000001402F249E mov rcx, r8
INITKDBG:00000001402F24A1 xor rcx, rdx
INITKDBG:00000001402F24A4 mov [rax+18h], rcx
INITKDBG:00000001402F24A8 mov eax, [rdi+790h]
INITKDBG:00000001402F24AE test eax, eax
INITKDBG:00000001402F24B0 jnz short loc_1402F24DD ; //進入藍屏流程
INITKDBG:00000001402F24B2 lea rax, [rdi+r9]
INITKDBG:00000001402F24B6 mov [rdi+7A0h], r15
INITKDBG:00000001402F24BD mov [rdi+798h], rax
INITKDBG:00000001402F24C4 mov qword ptr [rdi+7A8h], 109h
INITKDBG:00000001402F24CF mov [rdi+7B0h], r8
INITKDBG:00000001402F24D6 mov [rdi+790h], r12d
//////這裡判斷是否存在藍屏程式碼
INITKDBG:00000001402F2853 CheCkKdebugCode: ; CODE XREF: INITKDBG:00000001402F2508j
INITKDBG:00000001402F2853 cmp [rdi+790h], r15d ; //是否在藍屏程式碼
INITKDBG:00000001402F285A jz loc_1402F2B37

最後會執行執行到《

//這裡貼點1804的程式碼

》這裡

第一個效驗,不通過寫入一個藍屏程式碼109 後面判斷是否存在藍屏程式碼,然後就開始了善後工作,會清理一堆不知所謂的東西 。

然後關閉防寫,給dbgprin寫c3在恢復,最後的 imcall處無實際意義,最終呼叫 Sdbpcheck->清棧->KeBugCheckEx.

sdbpcheck不能Fuck jmp得封裝層 無法返回原有上下文,ret法也不行,回來沒有正常得可執行程式碼了 。

14393到是可以返回,但是依然要修改返回後的 int3 和下面跟的一個imcall 。實際情況還並不明朗。

結論:至少 1804 fuck sdbpcheckdll已死。

這裡貼點1804的程式碼:


mov rax, [rdi+218h]
INITKDBG:00000001402F2A6E mov byte ptr [rax], 0C3h ; //把dbgprint寫c3 恢復防寫位
INITKDBG:00000001402F2A71 mov cr0, r12
INITKDBG:00000001402F2A75 mov r12, [rbp+40h]
INITKDBG:00000001402F2A79
INITKDBG:00000001402F2A79 loc_1402F2A79: ; CODE XREF: INITKDBG:00000001402F28EBj
INITKDBG:00000001402F2A79 mov ecx, [rdi+7C0h]
INITKDBG:00000001402F2A7F test ecx, ecx ; //跳走了
INITKDBG:00000001402F2A81 jz FirstCodeVildCheck ; //sdbpcheck藍屏
INITKDBG:00000001402F2A87 mov rax, cr8
INITKDBG:00000001402F2A8B cmp al, r11b
INITKDBG:00000001402F2A8E jnb short loc_1402F2A9E
INITKDBG:00000001402F2A90 mov rax, cr8
INITKDBG:00000001402F2A94 mov cr8, r11
INITKDBG:00000001402F2A98 mov ecx, [rdi+7C0h]
INITKDBG:00000001402F2A9E
INITKDBG:00000001402F2A9E loc_1402F2A9E: ; CODE XREF: INITKDBG:00000001402F2A8Ej
INITKDBG:00000001402F2A9E test ecx, ecx
INITKDBG:00000001402F2AA0 jz FirstCodeVildCheck ; //sdbpcheck藍屏
INITKDBG:00000001402F2AA6 sub ecx, 1
INITKDBG:00000001402F2AA9 jz FirstCodeVildCheck3
INITKDBG:00000001402F2AAF sub ecx, 1
////
//FirstCodeVildCheck: ; CODE XREF: INITKDBG:00000001402F2A81j
INITKDBG:00000001402F2CDE ; INITKDBG:00000001402F2AA0j ...
INITKDBG:00000001402F2CDE and qword ptr [r15+610h], 0 ; //sdbpcheck藍屏
INITKDBG:00000001402F2CE6 and qword ptr [r15+690h], 0
INITKDBG:00000001402F2CEE mov rcx, [rdi+158h]
INITKDBG:00000001402F2CF5 call KeGuardCheckICall
INITKDBG:00000001402F2CFA mov rax, [rdi+158h]
INITKDBG:00000001402F2D01 mov r9, rbx
INITKDBG:00000001402F2D04 mov [rsp+30h], r14
INITKDBG:00000001402F2D09 mov r8, rsi
INITKDBG:00000001402F2D0C mov [rsp+28h], rax
INITKDBG:00000001402F2D11 mov rdx, r12
INITKDBG:00000001402F2D14 mov ecx, 109h
INITKDBG:00000001402F2D19 mov [rsp+20h], r13
INITKDBG:00000001402F2D1E call SdbpCheckDll
INITKDBG:00000001402F2D1E ; ---------------------------------------------------------------------------
INITKDBG:00000001402F2D23 db 0Dh dup(0CCh)
INITKDBG:00000001402F2D30 qword_1402F2D30 dq 5541544157565340h, 70EC834857415641h, 8E8898B48D98B48h


關於 FsRtlMdlReadCompleteDevEx:

這個裡面的效驗處有很多。

想到了個不知道是否可行的Patch。

自效驗方法:我貼一點程式碼 =就是擼掉 藍屏程式碼賦值的地方,把flag這些都Nop掉。

入口處效驗和藍屏


14393
lea rax, [rdi+r8] ; //賦值
INITKDBG:0000000140249923 mov [rdi+658h], rsi ; 藍屏引數
INITKDBG:000000014024992A mov [rdi+650h], rax ; //藍屏引數
INITKDBG:0000000140249931 mov qword ptr [rdi+660h], 109h ; //藍屏程式碼
INITKDBG:000000014024993C mov [rdi+668h], rdx ; //效驗和
INITKDBG:0000000140249943 mov dword ptr [rdi+648h], 1 ; //是否啟用了?
1804
lea rax, [rdi+r9]
INITKDBG:00000001402F24B6 mov [rdi+7A0h], r15
INITKDBG:00000001402F24BD mov [rdi+798h], rax
INITKDBG:00000001402F24C4 mov qword ptr [rdi+7A8h], 109h
INITKDBG:00000001402F24CF mov [rdi+7B0h], r8
INITKDBG:00000001402F24D6 mov [rdi+790h], r12d

第二處效驗FsRtlMdlReadCompleteDevEx效驗和藍屏。


14393
lea rax, [r12+rsi]
INITKDBG:0000000140239303 mov [r12+650h], rax
INITKDBG:000000014023930B xor eax, eax
INITKDBG:000000014023930D mov [r12+658h], rax
INITKDBG:0000000140239315 mov qword ptr [r12+660h], 101h
INITKDBG:0000000140239321 mov [r12+668h], rdx
INITKDBG:0000000140239329 mov [r12+648h], r13d
1804
//演算法
loc_1402DC311: ; CODE XREF: INITKDBG:00000001402DC325j
INITKDBG:00000001402DC311 xor r8, [r9]
INITKDBG:00000001402DC314 mov ecx, r11d
INITKDBG:00000001402DC317 rol r8, cl
INITKDBG:00000001402DC31A add r9, 8
INITKDBG:00000001402DC31E add r10d, 0FFFFFFF8h
INITKDBG:00000001402DC322 sub rdx, rsi
INITKDBG:00000001402DC325 jnz short loc_1402DC311
INITKDBG:00000001402DC327
INITKDBG:00000001402DC327 loc_1402DC327: ; CODE XREF: INITKDBG:00000001402DC308j
INITKDBG:00000001402DC327 test r10d, r10d
INITKDBG:00000001402DC32A jz short loc_1402DC342
INITKDBG:00000001402DC32C
INITKDBG:00000001402DC32C loc_1402DC32C: ; CODE XREF: INITKDBG:00000001402DC340j
INITKDBG:00000001402DC32C movzx eax, byte ptr [r9]
INITKDBG:00000001402DC330 mov ecx, r11d
INITKDBG:00000001402DC333 xor r8, rax
INITKDBG:00000001402DC336 add r9, rsi
INITKDBG:00000001402DC339 rol r8, cl
INITKDBG:00000001402DC33C add r10d, 0FFFFFFFFh
INITKDBG:00000001402DC340 jnz short loc_1402DC32C
INITKDBG:00000001402DC342
INITKDBG:00000001402DC342 loc_1402DC342: ; CODE XREF: INITKDBG:00000001402DC32Aj
INITKDBG:00000001402DC342 mov [r12+658h], r14
INITKDBG:00000001402DC34A lea rcx, [rbp+0AB0h]
INITKDBG:00000001402DC351 mov edx, r13d
INITKDBG:00000001402DC354 mov r9, r15
INITKDBG:00000001402DC357 mov r11d, 0FFFFFFF8h
//
cmp [r12+658h], r8 ; //658是否是pg的sign 這個位置 從pg 剛剛解密 還未執行時 就和現在是一樣的
INITKDBG:00000001402DC38E jz loc_1402DC414 ; //正常流程肯定會跳下去
INITKDBG:00000001402DC394 mov rax, [r12+588h] ; //TriageImagePageSize
INITKDBG:00000001402DC39C mov ecx, [r12+684h] ; //這個00070989 不知道是什麼
INITKDBG:00000001402DC3A4 mov [rax], r12
INITKDBG:00000001402DC3A7 mov [rax+10h], ecx
INITKDBG:00000001402DC3AA mov eax, [r12+790h] ; //這裡是0
INITKDBG:00000001402DC3B2 mov rcx, [r12+658h] ; //或許是sign
INITKDBG:00000001402DC3BA test eax, eax
INITKDBG:00000001402DC3BC jnz short loc_1402DC414
INITKDBG:00000001402DC3BE mov rax, [r12+588h]
INITKDBG:00000001402DC3C6 xor rcx, r8
INITKDBG:00000001402DC3C9 mov [rax+18h], rcx ; //不知所謂
INITKDBG:00000001402DC3CD mov eax, [r12+790h]
INITKDBG:00000001402DC3D5 test eax, eax
INITKDBG:00000001402DC3D7 jnz short loc_1402DC414
INITKDBG:00000001402DC3D9 mov rax, 0A3A03F5891C8B4E8h
INITKDBG:00000001402DC3E3 add rax, r12
INITKDBG:00000001402DC3E6 mov [r12+798h], rax ; //藍屏引數
INITKDBG:00000001402DC3EE xor eax, eax
INITKDBG:00000001402DC3F0 mov [r12+7A0h], rax ; //清空低4byte 藍屏程式碼
INITKDBG:00000001402DC3F8 mov qword ptr [r12+7A8h], 101h ; //藍屏程式碼
INITKDBG:00000001402DC404 mov [r12+7B0h], r8 ; //效驗和
INITKDBG:00000001402DC40C mov [r12+790h], esi ; //esi為1
INITKDBG:00000001402DC414
第三處:
14393
懶得找了
1804
mov [r12+0C4h], esi
INITKDBG:00000001402DC970 cmp [r12+8B8h], r8
INITKDBG:00000001402DC978 jz ExEcOtherSafeCall ; //正常直接 的話 必然相等然後走
INITKDBG:00000001402DC97E mov rax, [r12+588h]
INITKDBG:00000001402DC986 mov ecx, [r12+684h]
INITKDBG:00000001402DC98E mov [rax], r12
INITKDBG:00000001402DC991 mov [rax+10h], ecx
INITKDBG:00000001402DC994 mov eax, [r12+790h]
INITKDBG:00000001402DC99C mov rdx, [r12+8B8h]
INITKDBG:00000001402DC9A4 test eax, eax
INITKDBG:00000001402DC9A6 jnz short ExEcOtherSafeCall ; //這裡的eax 如果不是0啊 出去就藍屏了 各種奇怪的錯誤
INITKDBG:00000001402DC9A8 mov rax, [r12+588h]
INITKDBG:00000001402DC9B0 mov rcx, r8
INITKDBG:00000001402DC9B3 xor rcx, rdx
INITKDBG:00000001402DC9B6 mov [rax+18h], rcx
INITKDBG:00000001402DC9BA mov eax, [r12+790h]
INITKDBG:00000001402DC9C2 test eax, eax
INITKDBG:00000001402DC9C4 jnz short ExEcOtherSafeCall ; //這裡的eax 如果不是0啊 出去就藍屏了 各種奇怪的錯誤
INITKDBG:00000001402DC9C6 mov rax, 0A3A03F5891C8B4E8h
INITKDBG:00000001402DC9D0 add rax, r12
INITKDBG:00000001402DC9D3 mov [r12+798h], rax
INITKDBG:00000001402DC9DB xor eax, eax
INITKDBG:00000001402DC9DD mov [r12+7A0h], rax
INITKDBG:00000001402DC9E5 mov qword ptr [r12+7A8h], 109h
INITKDBG:00000001402DC9F1 mov [r12+7B0h], r8
INITKDBG:00000001402DC9F9 mov [r12+790h], r14d
INITKDBG:00000001402DCA01 jmp short loc_1402DCA05 ; //判斷 這一處 如果要修改藍屏程式碼 必須也給Nop點 下面的eax必須為0
ExEcOtherSafeCall: ; CODE XREF: INITKDBG:00000001402DC978j
INITKDBG:00000001402DCA03 ; INITKDBG:00000001402DC9A6j ...
INITKDBG:00000001402DCA03 xor eax, eax ; //這裡的eax 如果不是0啊 出去就藍屏了 各種奇怪的錯誤
INITKDBG:00000001402DCA05

待更新研究.....


struct _PatchGuard_Context_15063{
UCHAR CmpAppendDllSection[0xE8];//other Pg version dynamic
ULONG64 ExAcquireResourceSharedLite:
ULONG64 ExAcquireResourceExclusiveLite;
ULONG64 ExAllocatePoolWithTag;
ULONG64 ExFreePool;
ULONG64 ExMapHandleToPointer;
ULONG64 ExQueueWorkItem;
ULONG64 ExReleaseResourceLite;
ULONG64 ExUnlockHandleTableEntry;
ULONG64 ExAcquirePushLockExclusiveEx;
ULONG64 ExReleasePushLockExclusiveEx;
ULONG64 ExAcquirePushLockSharedEx;
ULONG64 ExReleasePushLockSharedEx;
ULONG64 KeAcquireInStackQueuedSpinLockAtDpcLevel;
ULONG64 ExAcquireSpinLockSharedAtDpcLevel;
ULONG64 KeBugCheckEx;
ULONG64 KeDelayExecutionThread;
ULONG64 KeEnterCriticalRegionThread;
ULONG64 KeLeaveCriticalRegion;
ULONG64 KeEnterGuardedRegion;
ULONG64 KeLeaveGuardedRegion;
ULONG64 KeReleaseInStackQueuedSpinLockFromDpcLevel;
ULONG64 ExReleaseSpinLockSharedFromDpcLevel;
ULONG64 KeRevertToUserGroupAffinityThread;
ULONG64 KeProcessorGroupAffinity;
ULONG64 KeInitializeEnumerationContext;
ULONG64 KeEnumerateNextProcessor;
ULONG64 KeCountSetBitsAffinityEx;
ULONG64 KeQueryAffinityProcess;
ULONG64 KeQueryAffinityThread;
ULONG64 KeSetSystemGroupAffinityThread;
ULONG64 KeSetCoalescableTimer;
ULONG64 ObfDereferenceObject;
ULONG64 ObReferenceObjectByName;
ULONG64 RtlImageDirectoryEntryToData;
ULONG64 RtlImageNtHeader;
ULONG64 RtlLookupFunctionTable;
ULONG64 RtlPcToFileHeader;
ULONG64 RtlSectionTableFromVirtualAddress;
ULONG64 DbgPrint;
ULONG64 MmAllocateIndependentPages;
ULONG64 MmFreeIndependentPages;
ULONG64 MmSetPageProtection;
ULONG64 Unknow1;
ULONG64 Unknow2;
ULONG64 Unknow3;
ULONG64 Unknow4;
ULONG64 RtlLookupFunctionEntry;
ULONG64 KeAcquireSpinLockRaiseToDpc;
ULONG64 KeReleaseSpinLock;
ULONG64 MmGetSessionById;
ULONG64 MmGetNextSession;
ULONG64 MmQuitNextSession;
ULONG64 MmAttachSession;
ULONG64 MmDetachSession;
ULONG64 MmGetSessionIdEx;
ULONG64 MmIsSessionAddress;
ULONG64 MmIsAddressValid;
ULONG64 MmSessionGetWin32Callouts;
ULONG64 KeInsertQueueApc;
ULONG64 KeWaitForSingleObject;
ULONG64 Unknow5;
ULONG64 ExReferenceCallBackBlock;
ULONG64 ExGetCallBackBlockRoutine;
ULONG64 ExDereferenceCallBackBlock;
ULONG64 KiMarkBugCheckRegions;
ULONG64 PspEnumerateCallback;
ULONG64 CmpEnumerateCallback;
ULONG64 DbgEnumerateCallback;
ULONG64 ExpEnumerateCallback;
ULONG64 ExpGetNextCallback;
ULONG64 EmpCheckErrataList;
ULONG64 KiSchedulerApcTerminate;
ULONG64 KiSchedulerApc;
ULONG64 EmpCheckErrataList;
ULONG64 KiSwInterruptDispatch;
ULONG64 MmAllocatePagesForMdlEx;
ULONG64 MmAllocateMappingAddress;
ULONG64 MmMapLockedPagesWithReservedMapping;
ULONG64 MmUnmapReservedMapping;
ULONG64 KiSwInterruptDispatch+0x12a0;
ULONG64 KiSwInterruptDispatch+0x1310;
ULONG64 MmAcquireLoadLock;
ULONG64 MmReleaseLoadLock;
ULONG64 KeEnumerateQueueApc;
ULONG64 KeIsApcRunningThread;
ULONG64 KiSwInterruptDispatch+0xe70;
ULONG64 PsAcquireProcessExitSynchronization;
ULONG64 ObDereferenceProcessHandleTable
ULONG64 PsGetNextProcess;
ULONG64 PsQuitNextProcess;
ULONG64 MmIsSessionLeaderProcess;
ULONG64 PsInvokeWin32Callout;
ULONG64 MmEnumerateAddressSpaceAndReferenceImages;
ULONG64 PsGetProcessProtection;
ULONG64 PsGetProcessSignatureLevel;
ULONG64 PsGetProcessSectionBaseAddress;
ULONG64 SeCompareSigningLevels;
ULONG64 KeComputeSha256;
ULONG64 KeComputeParallelSha256;
ULONG64 KeSetEvent;
ULONG64 RtlpConvertFunctionEntry;
ULONG64 RtlpLookupPrimaryFunctionEntry;
ULONG64 RtlIsMultiSessionSku;
ULONG64 KiEnumerateCallback;
ULONG64 KeStackAttachProcess;
ULONG64 KeUnstackDetachProcess;
ULONG64 VslVerifyPage;
ULONG64 KiGetInterruptObjectAddress;
ULONG64 Unknow6;
ULONG64 Unknow7;
ULONG64 Unknow8;
ULONG64 Unknow9;
ULONG64 Unknow10;
ULONG64 Unknow11;
ULONG64 KiEntropyTimingRoutine;
ULONG64 KiProcessListHead;
ULONG64 KiProcessListLock;
ULONG64 Unknow12;//(pG Encrypt?)
ULONG64 Unknow13;//(pG Encrypt?)
ULONG64 PsActiveProcessHead;
ULONG64 PsInvertedFunctionTable;
ULONG64 PsLoadedModuleList;
ULONG64 PsLoadedModuleResource;
ULONG64 PsLoadedModuleSpinLock;
ULONG64 PspActiveProcessLock;
ULONG64 PspCidTable;
ULONG64 ExpUuidLock;
ULONG64 AlpcpPortListLock;
ULONG64 KeServiceDescriptorTable;
ULONG64 KeServiceDescriptorTableShadow;
ULONG64 KeServiceDescriptorTableFilter;
ULONG64 VfThunksExtended;
ULONG64 PsWin32CallBack;
ULONG64 TriageImagePageSize;
ULONG64 KiTableInformation;
ULONG64 HandleTableListHead;
ULONG64 SeNullSid;
ULONG64 Unknow14;
ULONG64 Unknow15;//(fffff780`00000000)
ULONG64 Unknow16;//(a9ad6402`bae5207b)
ULONG64 SeProtectedMapping;
ULONG64 $$0;//????
ULONG64 KiStackProtectNotifyEvent;
ULONG64 Unknow17;//??fffff900`00000000
ULONG64 RtlpInvertedFunctionTable;
ULONG64 KiIsrThunk;
ULONG64 Unknow17;
ULONG64 Unknow18;
ULONG64 Unknow19;
ULONG64 Unknow20;
ULONG64 Unknow21;
ULONG64 Unknow22;
ULONG64 PatchGuard_PgContext;//+0x8B8 KeDebugCheck
ULONG64 PatchGuard_CmpAppendDllSecitonSign_Self;//+0x7B0 KeDebugCheck
}


原文作者:落筆飛花

原文連結:[原創]PatchGuard自效驗粗略分析-『程式設計技術』-看雪安全論壇

轉載請註明:轉自看雪論壇



看雪閱讀推薦:


1、[原創]《0day安全...(第二版)》第3章第4節開發通用的shellcode在win10系統下測試的問題


2、[原創]一個拼湊起來的CVE-2018-8373的EXP


3、[原創]Xposed________監聽微信登入帳號和密碼


4、[原創]對照Java原始碼學習smali語法,根據smali程式碼反推java程式碼


5、[翻譯]Java型別混淆,沙箱逃逸


相關文章