1过PostMessage在游戏窗口置顶才有效的方法
0040A0BB |. 833D F04D4400>cmp dword ptr ds:[444DF0],0 ; eax=1 这个是屏蔽按键的为0的时候屏蔽
0040A0C2 |. 75 07 jnz short HX2Game.0040A0CB ; 这个要跳
把上面的那个地址值改1就行了,找法简单在下消息断点后过了第一个小循环后面几句就是
2 小退方法:
这个有点麻烦,要先出现小退窗口才能实现小退,直接调用是不行的
找窗口ID的地方:
06C58812 |. 8B45 0C mov eax,dword ptr ss:[ebp+C]
06C58815 |. 50 push eax ; /5表示开,0表示关
06C58816 |. 8B4D 08 mov ecx,dword ptr ss:[ebp+8] ; |对话框id
06C58819 |. 51 push ecx ; |Arg1
06C5881A |. 8B4D FC mov ecx,dword ptr ss:[ebp-4] ; |堆栈 ss:[0012EFAC]=0A550020
06C5881D |. E8 62FCFFFF call WndMgr.06C58484 ; \对话框
调用这个CALL根据ECX(就是窗口ID)也可以出现各种窗口,但是调出小退窗口后按确定是不会退出的,所以只用来观察窗口ID
ESC窗口ID:6A 小退窗口ID:0A
要据窗口ID 找出窗口地址的CALL是下面这个:
06C5865D |> 8B45 08 mov eax,dword ptr ss:[ebp+8]
06C58660 |. 50 push eax ; 窗口ID 找出来了ESC的窗口ID是6A,小退窗口ID是0A
06C58661 |. 8B4D F8 mov ecx,dword ptr ss:[ebp-8]
06C58664 |. 8B11 mov edx,dword ptr ds:[ecx] ; ds:[00C91E70]=100453B8 (WndSys.XDesktop::`vftable')
06C58666 |. 8B4D F8 mov ecx,dword ptr ss:[ebp-8]
06C58669 |. FF52 1C call dword ptr ds:[edx+1C] ; ds:[100453D4]=10022E36 (WndSys.XDesktop::FindWindowByID)
调用上面的CALL返回值就是对应窗口的地址
根据得到的窗口地址找出相对应的按纽地址
出小退窗口的按纽地址方法:
ESC窗口地址+0x10得到一个存放9节链表的表头地址.再去链表中取出对应的值+0x58就是能调出个有用的小退窗口的按纽地址
退出按纽地址的找法:
06C5B78E |. 8B8C8A 300100>|mov ecx,dword ptr ds:[edx+ecx*4+130] ; ds:[06D42C80]=00C93080 ecx=0 edx=6D42B50
edx就是上面找出的小退对话框的值,ecx为0,里面放了好多按纽地址结果就是:edx+0x130就行
分别用上面找到的按纽地址作为下面ECX的值:调用2次就实现小退了
10008C67 |. 51 push ecx ; ecx=00CEE488 打开小退对话框 通过改变ECX的值可以实现小退
10008C68 |. 894D FC mov dword ptr ss:[ebp-4],ecx ; ecx=00C930D8
10008C6B |. 8B4D FC mov ecx,dword ptr ss:[ebp-4]
10008C6E |. E8 77FFFFFF call WndSys.Signal0::emit ; 10008BEA=WndSys.Signal0::emit
10008C73 |. 8BE5 mov esp,ebp
10008C75 |. 5D pop ebp
10008C76 \. C3 retn
先写这么多吧,有人可能要说只接找出基址不就行了,我是找不出来,只能这样将就着用
小退与进入游戏CALL与其它CALL调用地方是不同的,要在很前面的地方,太后面了只能调出对话李框,却小退不了
说明:1,call的地址还是要以DLL入口为参考的,这个大家都会就不多说了
2,不通从游戏的更新界面进入,要用IDA进去改一下只接从输入帐号密码的地方进入才行,从更新界面进入,我想没几个OD 能对付得了它呵呵
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课