- 注册时间
- 2011-3-10
- 最后登录
- 1970-1-1
该用户从未签到
|
简单分析,小弟能力有限如果有什么错误的话,欢迎各位牛牛指正,共同进步嘛
第一处清零代码
mov edi, edi
push ebp
mov ebp, esp
push ecx
push esi
mov [ebp+var_1], 0
call ds:KeGetCurrentIrql
cmp al, 2 //判断中断级
mov esi, offset SpinLock
mov ecx, esi
jb short loc_1002660
call ds:KefAcquireSpinLockAtDpcLevel
mov [ebp+var_1], 1
jmp short loc_1002669
loc_1002660:
call ds:KfAcquireSpinLock
mov [ebp+NewIrql], al
loc_1002669: mov ecx, dword_100D1C0 //这里比较关键啦。 dword_100D1C0 这个全局变量很重要
mov edx, offset dword_100D1C0
cmp ecx, edx
jz short loc_10026BA// 这个是个关键比较啦
push ebx
push edi
loc_100267A:
mov edi, dword_100CEDC //这里存放着EPROCESS的下标
mov edi, [edi+4] //CEDC+4的位置正是BC
add edi, [ecx-34h] //[D1C0-34]的位置存放着EPROCESS结构的地址
xor eax, eax
xchg eax, [edi] //清零
mov eax, dword_100CEDC
mov ebx, [ecx-2Ch] //存放着EPROCESS+70位置的内容
mov eax, [eax+18h] //CEDC+18位置存放70下标
mov edi, [ecx-34h]//EPROCESS结构的地址
mov [eax+edi], ebx //写回去防止修改位置
mov ebx, [ecx-28h] //74的内容
mov [eax+edi+4], ebx//写回去
mov edi, dword_100CEDC
mov edi, [edi+1Ch] //取78位置
add edi, [ecx-34h]
xor eax, eax //写回去
stosd
stosd
上面这一段把EPROCESS+70,74,78的位置全部封杀了
防止把BC的位置修改为70,74,78,所以曾经某种方法改位置变得无效了
|
|