郁闷了,以前的方法都不能用了!
就GetPixel饶法来说
1.修改自己程序不让EhSvc.dll等DLL挂钩自己的程序
可是现在HShield都在驱动级拦截服务SDT,所以应用层对抗没意思了
2.用汇编自己写GETpixel
function xiaocall(x1,x2,x3:DWORD):DWORD;
asm
mov eax, $10BF
mov edx, $7FFE0300
call dword ptr [edx]
ret $0C
end;
function GetPixelA(DC: HDC; X, Y: Integer): COLORREF;stdcall
asm
push ebx
mov ebx, dword ptr [ebp+$8]
mov eax, ebx
push edi
and eax, $0FFFF
or edi, $FFFFFFFF
cmp eax, $10000
jnb @@2
shl eax, $4
add eax, dword ptr [$77F33000]
cmp byte ptr [eax+$A], 1
jnz @@2
mov ecx, ebx
shr ecx, $10
cmp word ptr [eax+$8], cx
jnz @@2
mov ecx, dword ptr [eax+$4]
and ecx, $FFFFFFFE
cmp ecx, dword ptr [$77F33004]
jnz @@2
push esi
mov esi, dword ptr [eax+$C]
test esi, esi
je @@1
push dword ptr [ebp+$10]
push dword ptr [ebp+$C]
push ebx
call xiaocall
mov edi, eax
mov eax, dword ptr [esi+$5C]
@@1:
pop esi
@@2:
mov eax, edi
pop edi
pop ebx
end;
可是现在HShield都在驱动级拦截服务SDT,所以应用层对抗没意思了
3.用BITMAP实现
function GetPixelEx(DC: HDC; X, Y: Integer): COLORREF;stdcall
label
js;
var
p:pRGBArray;
yansebmp:TBitmap;
begin
try
Result:=$FFFFFFFF;
yansebmp:=TBitmap.Create;
IF not Assigned(yansebmp) then Exit;
yansebmp.PixelFormat:=pf24bit;
yansebmp.Height:=1;
yansebmp.Width:=Screen.Width;
BitBlt(yansebmp.Canvas.Handle, //目标dc,也就是Image1的dc
0, //复制到Image1的x = 0处
0, //复制到Image1的y = 0处
1, //复制Image1->Width这么宽
1, //复制Image1->Height这么宽
DC, //源dc
x, //从桌面的x = 0处开始复制
y, //从桌面的y = 0处开始复制
SRCCOPY //指定为直接复制过去,不做处理
);
p:=yansebmp.ScanLine[0];
Result:=RGB(p[0].rgbtRed,p[0].rgbtGreen,p[0].rgbtBlue);
yansebmp.free;
Form1.Panel1.Color:=Result;
exit;
except
end;
Result:=$FFFFFFFF;
yansebmp.free;
end;
消耗CPU太厉害不说,现在也只对GETDC(0)的场景有效 其他也被驱动层拦截了
4.HOOK程序 劲舞团本身的程序里实现GETPIXEL 因为劲舞3.0版本以及以前版本,对自己进程是放行的,现在3.1版本也不能用此漏洞了!
5.Rootkit 方法 我把自己的进程链从物理内存里删掉 以前老版本可以用 现在新版本也不成了
6.驱动对抗 驱动不怎么精通 以前写个修复SDT的 但是没用!现在想不出什么好的办法来实现GETPIXEL 跪求点子