本文为看雪论坛优秀文章
看雪论坛作者ID:千音丶
一、自动喊话
想实现自动喊话怎么办?可以通过键鼠模拟,也可以找到喊话call,或者也可以找到控件输入call,在调用发送喊话的call,我们这里要找的是控件输入call。
![a3a09d4b10ec09208b1661e9f44ae8b0.png](https://i-blog.csdnimg.cn/blog_migrate/0e15401743b57d3b4a0ea480c01a8d3e.jpeg)
>>>>控件输入call
我们输入字符的时候肯定是要访问当前控件对象的,那么我可以从这个编辑框内容的长度来当做一个突破口, 当前有多少字符长读,我们就搜多少。
![a58dc823ff75737af5110e47520b240b.png](https://i-blog.csdnimg.cn/blog_migrate/011d6638ad65c0c6960aeb5e5bcad626.jpeg)
最终有7个结果:
![a6a7a18d21b500a4697ef8f1605af577.png](https://i-blog.csdnimg.cn/blog_migrate/bb4eaa232193e28812bf867e480e4e02.jpeg)
我们可以移动编辑里的光标,发现有个地址的内容变了,很显然这个地址是存放是光标的位置。
![12cf2558bf2f0e409779839c048bcf64.png](https://i-blog.csdnimg.cn/blog_migrate/be631d66e496737697d1f57d93db9ad8.jpeg)
剩下的3个都是存储字符串长度的,我们随便找个然后下内存写入断点。
![3ace846b1324960a8c4835dfac6e15da.png](https://i-blog.csdnimg.cn/blog_migrate/1dc0388f3e2ca0095f6c44a89210853d.jpeg)
输入字符被断下:
![55a2c49ba72b8a4cdb62bba92cccf16f.png](https://i-blog.csdnimg.cn/blog_migrate/fe7a58fc12677bab0b963dcc7808eea3.jpeg)
然后我们Ctrl+F9不断的返回,沿途记录call:
![a6ac0bd60be20ade75a350b0981b4c50.png](https://i-blog.csdnimg.cn/blog_migrate/da48b710b657125b7e55e833ed74dcb3.jpeg)
那么先从第一个call 分析:
![b5fd5cb1feb3df8104a7286e9bcbfbd1.png](https://i-blog.csdnimg.cn/blog_migrate/d6ea8e4d517d3f1cf660b065625fcd64.jpeg)
分析第一个参数,发现很像是一个结构体:
![9896c258e559a270d04f161123994910.png](https://i-blog.csdnimg.cn/blog_migrate/3e7a41ba6700ee905737627623d4deee.jpeg)
具体分析如下:
在来看看ecx是什么。
从这些名字不难看出来应该是控件相关的。
![fa3487d99b70876fce332c206de1bacd.png](https://i-blog.csdnimg.cn/blog_migrate/18021aacf94709494e6da288455a9775.jpeg)
并且在+11c的位置可以到是当前编辑框里的内容,那么这个应该就是控件对象了。
![5aa28ae0432a2e0292e7bac16ee4fba5.png](https://i-blog.csdnimg.cn/blog_migrate/d038b5d6c7a0ac214885e751e486cf44.jpeg)
>>>>测试输入call
先构造这么一个结构体:
![d4d0c074e01cb6ec16e45db608285a84.png](https://i-blog.csdnimg.cn/blog_migrate/fd56f8d6c8b9e5e8b6bde4ee668c1220.jpeg)
调用一下,发现可以成功输入:
![a8dcf2d1c3f7eecd0ea66db541136e87.png](https://i-blog.csdnimg.cn/blog_migrate/16e130b5cdc34bc4971eba1a6ee454bf.jpeg)
>>>>发送call
他要发送内容,肯定是要发包的,我们可以在Send函数上下个断点。
喊话之后被断下:
![aa0db39a0dba9e8c2e5b168aaf5d5bd7.png](https://i-blog.csdnimg.cn/blog_migrate/505d6cec8cb01a118890db0b4d8a1fa6.jpeg)
Ctrl+F9返回,沿途记录call:
![e5c977809d382e00dfa29e8d10a126e9.png](https://i-blog.csdnimg.cn/blog_migrate/aad0c4171c8c763fd93ebe5df123ab08.jpeg)
直接从后面的call开始测试,这里有个简易的方法就是把call Nop掉,然后看看效果还在不在,但是Nop的时候注意堆栈平衡。
然后把这个call Nop掉之后发现不会喊话了。
![37babc3dc5f65a04314abecf54aba080.png](https://i-blog.csdnimg.cn/blog_migrate/f9ae6962da9c52ce4af246f807b4cd16.jpeg)
那么我们直接调用这个call做个测试,发现可以调用成功。
![49c0ddf87ab46adaa6ecd9c1969b466a.png](https://i-blog.csdnimg.cn/blog_migrate/1918ec9f0efdc3c93ad0e4bf099b264f.jpeg)
二、控件遍历