lookonstop 发表于 2012-10-29 23:17:46

分享一个宠物过滤的思路

在论坛看到过很多分享经验的,很有用,感谢这些无私的朋友;
本来一直潜水的,无聊时偶尔来看一看大家的经验分享打发时间。现分享一下宠物过滤的思路,供大家参考,大师们就不要拍砖啦。(其实这也是根据论坛一些朋友提供的思路找的,对这些东西的研究纯属个人喜好若有不妥的地方就请大师给删了吧!

思路还是栈回溯,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,//取参数重新压栈call原函数
                push eax
                mov eax,0x9dfa10//"fun_id2addr"
                call eax
                add esp,4
                test eax,eax        //返回对象地址为空
                je_end
                cmp dword ptr,0x3e
                jne jamp                //测试,只捡箭矢(类型ID:3E)
_end:
                retn ;
jamp:
                add esp,8        //带有1个参数,被Hook的call为__cdecl约定
                mov ecx,0x8c7321
                jmp ecx
        }
}
用这个函数替换过滤call中"fun_id2addr"的调用处测试很多次了,暂时还没出错{:1_99:}
inline hook、dll注入方面的知识就不多说啦。


基址是sifu的,和guanfu对不上,附上一段过滤call中的特征码:
008C723B|> /85D2          /TEST EDX,EDX
008C723D|. |8BC3          |MOV EAX,EBX
008C723F|. |8B48 04       |MOV ECX,DWORD PTR DS:
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:
008C725B|. |0F84 06010000 |JE sro_clie.008C7367
008C7261|. |8B6F 10       |MOV EBP,DWORD PTR DS:
008C7264|. |8B45 04       |MOV EAX,DWORD PTR SS:
008C7267|. |A8 06         |TEST AL,6
008C7269|. |0F85 B2000000 |JNZ sro_clie.008C7321
008C726F|. |8A4C24 28   |MOV CL,BYTE PTR SS:
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

SYJ317 发表于 2012-10-30 02:01:01

学习一下,感谢分享~~~~~~~~~~~~~~~~~~

和平世界 发表于 2012-10-30 06:33:33

       掉我们胃口 唉唉

474103476 发表于 2012-10-30 11:38:09

这算共享吧{:1_102:}{:1_102:}

zhoujinliang 发表于 2012-10-30 11:56:47

高手!看不懂 全是汇编{:1_94:}

SYJ317 发表于 2012-10-30 16:10:59

esp太难找了,这个call能找到真是人才,怎么我这到文件头一下断,立刻就断下了,不让扔东西

xiaomeimei 发表于 2012-10-31 21:55:31

学习了。这方法不错。{:1_124:}从前自己的弯路走多了虽然同是出于一样的方式HOOK地址不一样处理也不一样。谢了楼主。

wosch2 发表于 2012-10-31 22:56:23

lookonstop{:1_164:} 原来 这么厉害哇

lookonstop 发表于 2012-11-1 08:35:57

xiaomeimei 发表于 2012-10-31 21:55 static/image/common/back.gif
学习了。这方法不错。从前自己的弯路走多了虽然同是出于一样的方式HOOK地址不一样处理也不一样。谢 ...

这方法比较偷懒,不用自己遍历..哈哈.. :D

lookonstop 发表于 2012-11-1 08:37:50

wosch2 发表于 2012-10-31 22:56 static/image/common/back.gif
lookonstop 原来 这么厉害哇

厉害可不敢当,和大师比起来不过是白菜一颗。。{:1_94:}

1505550990 发表于 2012-11-7 09:59:24

看不懂楼主还是做个东西出来
页: [1]
查看完整版本: 分享一个宠物过滤的思路