-
-
[原创]某P的debugport的另一种过法。
-
发表于:
2013-8-3 23:01
12615
-
继上一次过掉双击调试之后,利用它的思想,又相继过掉了那几个函数和debugport。刚才在虚拟机里面,OD加载之后,有模块,可下段,没又sx非法之类报错。但是过了一会游戏退出了。不知道是不是跟我虚拟机配置不够有关?总之能调试附加,给我这新人一大信心。
开始说debugport的过法。看了以前好多帖子,都是修改TP,最近,有人也是修改TP,另外pass crc校验。我不会找crc校验,希望有大牛来指点我一下。于是另外想了一种办法。
先上反汇编代码:
b0dc627e 895c3804 mov dword ptr [eax+edi+4],ebx
b0dc6282 8b3dc472ddb0 mov edi,dword ptr [TesXXXX+0x132c4 (b0dd72c4)]
b0dc6288 8b7f1c mov edi,dword ptr [edi+1Ch]
b0dc628b 0379b8 add edi,dword ptr [ecx-48h]
b0dc628e 33c0 xor eax,eax
b0dc6290 ab stos dword ptr es:[edi]
b0dc6291 ab stos dword ptr es:[edi]
b0dc6292 8b3dc472ddb0 mov edi,dword ptr [TesXXXX+0x132c4 (b0dd72c4)]
b0dc6298 8b7f04 mov edi,dword ptr [edi+4]
b0dc629b 0379b8 add edi,dword ptr [ecx-48h]
b0dc629e 33c0 xor eax,eax
b0dc62a0 8707 xchg eax,dword ptr [edi]//这里清0
一处清零的地方。我从上面跟下来,发现,debugport的偏移0xbc让他存在了一个局部变量中。
那么,跟到这个局部变量赋值的地方。
b0e6XXXX 0f85d2000000 jne TesXXXX+0x783c (b0e6XXXX)
b0e6XXXX 8b4508 mov eax,dword ptr [ebp+8]
b0e6XXXX c74004bc000000 mov dword ptr [eax+4],0BCh//这里赋值。
b0e6XXXX c7400c30010000 mov dword ptr [eax+0Ch],130h
b0e6XXXX c74010a0010000 mov dword ptr [eax+10h],1A0h
b0e6XXXX c7004c020000 mov dword ptr [eax],24Ch
b0e6XXXX c740141c010000 mov dword ptr [eax+14h],11Ch
这段代码大体意思,判断当前系统版本。然后会给一些偏移。。。别的不管,我只管0xbc
然后,我可以在b0e6XXXX c7400c30010000 mov dword ptr [eax+0Ch],130h
下硬件断点。然后HOOK INT1 中断。然后悄无声息的将eax+4的内容改为别的。我发现118这个偏移不错。
然后。。。。某P开始疯狂对这个地址清0.
好了。想法就是这样。(之前有人说到律师函之类,所以锁了一些修饰。希望不会引火。)
上代码:
下硬件断点。
__asm
{
mov eax,hookaddr
mov DR0,eax
mov eax,2
mov DR7,eax
}
void __declspec (naked) My_Kitrap1()
{
_asm
{
//保存环境;
pushfd
pushad
mov ebx,eax
mov ecx,XxxPBASE
add ecx,0x7774
mov eax,dr0
cmp eax,ecx
jne jmpoldtrap01
mov eax,dr6
and eax,1
cmp eax,1
jne jmpoldtrap01
mov word ptr [ebx+4],0x118
mov eax,0
mov dr0,eax
popad
popfd
iretd
jmpoldtrap01:
popad
popfd
push 0
mov word ptr [esp+2],0
jmp originalkitrap1addrjmpaddr
}
}
大体 就这样吧。
现在我有几个问题,想问,麻烦大牛给小弟解解惑。
1,某P现在加了object hook?这个会有什么影响呢?难道推出的原因是他?
2,虚拟机,我只用了单核,多核的时候就会出错。 我IDThook的时候是inline hook的。
多个CPU的时候,他们的INT1 的地址应该都一样吧? 难道我下硬件断点的时候,还需要对多个CPU下?dr0-7这几个硬件断点到底是属于线程的还是属于CPU呢?基础很差啊我。
3,刚开始我OD附加的时候,没有模块,没有CPU的内容。OD附加了之后,也不退出,就是什么都没有。后来突然想起来,加了个驱动。就是HOOK NTSetThreadInformation 这个函数的。居然能成了。。哦对了。想到这好像有点印象了。。。他调用了这个函数,防止调试器获取异常?对吧。。。。
先问这些吧。睡觉去了。晚安。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)