找回密码
 注册帐号
查看: 2089|回复: 10

[编程思路] 分享一个宠物过滤的思路

[复制链接]
发表于 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,[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
发表于 2012-10-30 02:01:01 | 显示全部楼层
学习一下,感谢分享~~~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2012-10-30 06:33:33 | 显示全部楼层
       掉我们胃口 唉唉
回复 支持 反对

使用道具 举报

发表于 2012-10-30 11:38:09 | 显示全部楼层
这算共享吧
回复 支持 反对

使用道具 举报

发表于 2012-10-30 11:56:47 | 显示全部楼层
高手!看不懂 全是汇编
回复 支持 反对

使用道具 举报

发表于 2012-10-30 16:10:59 | 显示全部楼层
esp太难找了,这个call能找到真是人才,怎么我这到文件头一下断,立刻就断下了,不让扔东西
回复 支持 反对

使用道具 举报

发表于 2012-10-31 21:55:31 | 显示全部楼层
学习了。这方法不错。从前自己的弯路走多了虽然同是出于一样的方式HOOK地址不一样处理也不一样。谢了楼主。
回复 支持 反对

使用道具 举报

发表于 2012-10-31 22:56:23 | 显示全部楼层
lookonstop 原来 这么厉害哇
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-1 08:35:57 | 显示全部楼层
xiaomeimei 发表于 2012-10-31 21:55
学习了。这方法不错。从前自己的弯路走多了虽然同是出于一样的方式HOOK地址不一样处理也不一样。谢 ...

这方法比较偷懒,不用自己遍历..哈哈.. :D
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-1 08:37:50 | 显示全部楼层
wosch2 发表于 2012-10-31 22:56
lookonstop 原来 这么厉害哇

厉害可不敢当,和大师比起来不过是白菜一颗。。
回复 支持 反对

使用道具 举报

发表于 2012-11-7 09:59:24 | 显示全部楼层
看不懂  楼主还是做个东西出来
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

QQ|Archiver|手机版|小黑屋|依人网络官方网站 ( 陕ICP备19025998号-1 )

GMT+8, 2025-2-2 07:46 , Processed in 0.056073 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表