|
在论坛看到过很多分享经验的,很有用,感谢这些无私的朋友;
本来一直潜水的,无聊时偶尔来看一看大家的经验分享打发时间。现分享一下宠物过滤的思路,供大家参考,大师们就不要拍砖啦。(其实这也是根据论坛一些朋友提供的思路找的,对这些东西的研究纯属个人喜好若有不妥的地方就请大师给删了吧!
思路还是栈回溯,OD里面(bp WSASend):
(丝路封包函数大概有8/9层的样子,为了防止跟错,可以直接在7/8层开始跟)
找个空旷无人的地,仍一个物品让猴子捡,OD会断下两次。第一次是扔物品的,第二次是猴子捡物品的。OD第二次断下之后返回到上层调用处。(在调用处下个断点,一扔一捡若只断一次那就是我们要找的那层call啦!)
此封包函数上边的2个call是关键,有一个就是宠物过滤的call啦!
这里就称它们为"fun_item_fiter"和"fun_id2addr"吧,
过滤call"fun_item_fiter"有点复杂,需要慢慢跟,多跟几次大概就明白的,其内部会调用"fun_id2addr",此call的作用就是通过物品ID找基址。只要把此call的调用处的地址hook掉,让其调用自己的过滤函数就ok了。
源码就不给了,提供个思路供大家参考,过滤方法很多,若愿意大家可以共享一下思路。
给一段测试用的内联汇编代码:
__declspec(naked) void MyCosFun3()
{
__asm{
mov eax,[esp+4]//取参数重新压栈call原函数
push eax
mov eax,0x9dfa10//"fun_id2addr"
call eax
add esp,4
test eax,eax //返回对象地址为空
je _end
cmp dword ptr[eax+0x224],0x3e
jne jamp //测试,只捡箭矢(类型ID:3E)
_end:
retn ;
jamp:
add esp,8 //带有1个参数,被Hook的call为__cdecl约定
mov ecx,0x8c7321
jmp ecx
}
}
用这个函数替换过滤call中"fun_id2addr"的调用处测试很多次了,暂时还没出错
inline hook、dll注入方面的知识就不多说啦。
基址是sifu的,和guanfu对不上,附上一段过滤call中的特征码:
008C723B |> /85D2 /TEST EDX,EDX
008C723D |. |8BC3 |MOV EAX,EBX
008C723F |. |8B48 04 |MOV ECX,DWORD PTR DS:[EAX+4]
008C7242 |. |0F84 32010000 |JE sro_clie.008C737A
008C7248 |. |3BD0 |CMP EDX,EAX
008C724A |. |0F85 2A010000 |JNZ sro_clie.008C737A
008C7250 |. |3BF9 |CMP EDI,ECX
008C7252 |. |0F84 14010000 |JE sro_clie.008C736C
008C7258 |. |3B7A 04 |CMP EDI,DWORD PTR DS:[EDX+4]
008C725B |. |0F84 06010000 |JE sro_clie.008C7367
008C7261 |. |8B6F 10 |MOV EBP,DWORD PTR DS:[EDI+10]
008C7264 |. |8B45 04 |MOV EAX,DWORD PTR SS:[EBP+4]
008C7267 |. |A8 06 |TEST AL,6
008C7269 |. |0F85 B2000000 |JNZ sro_clie.008C7321
008C726F |. |8A4C24 28 |MOV CL,BYTE PTR SS:[ESP+28]
008C7273 |. |F6C1 40 |TEST CL,40
008C7276 |. |75 08 |JNZ SHORT sro_clie.008C7280
008C7278 |. |A8 01 |TEST AL,1
008C727A |. |0F84 A1000000 |JE sro_clie.008C7321
008C7280 |> |F6C1 08 |TEST CL,8
008C7283 |. |74 08 |JE SHORT sro_clie.008C728D
008C7285 |. |A8 20 |TEST AL,20
008C7287 |. |0F85 94000000 |JNZ sro_clie.008C7321
008C728D |> |F6C1 10 |TEST CL,10
008C7290 |. |74 08 |JE SHORT sro_clie.008C729A
008C7292 |. |A8 40 |TEST AL,40
008C7294 |. |0F85 87000000 |JNZ sro_clie.008C7321
008C729A |> |F6C1 20 |TEST CL,20
008C729D |. |74 04 |JE SHORT sro_clie.008C72A3
008C729F |. |84C0 |TEST AL,AL
008C72A1 |. |78 7E |JS SHORT sro_clie.008C7321 |
|