为什么要发这个贴子
- 因为之前论坛某同学发的查找sessionkey的资料并不是很完全。
借鉴
- 我也是按照他的思路查找关键函数
oi_symmetry_encrypt2 找下去找到的,希望你也可以。
快速找到关键加密函数
- 按照之前的帖子我找了
Common.dll 下的oi_symmetry_encrypt2 函数
不管你是用od,还是ce都可以快速找到
下断点
- 在这个函数下个
f2 断点
等待中断
- 这个函数非常容易下断,随便动下
某q 就会下断,不要怀疑,断点是不是错了,因为某q 无时无刻都会给服务器发送反馈信息,其信息是加密的,所以很容易就会自动断下,或者直接发个消息也可以。
看堆栈
- 如果你具有一定的逆向知识,了解一个函数的调用过程,那你一定知道调用函数的
esp(也就是栈顶) 所指向的就是返回地址,也就是call 指令的下一条语句的首地址,不了解也没关系,后面慢慢了解
从堆栈找到参数
- 现在
esp 指向的是返回地址
- 那么
esp+4 就是发的消息,不信你发个消息看看指针指向的内容是不是有你发的消息
esp+8 就是第一个参数的长度
esp+0xc 就是我们要找的sessionkey 的指针了,那它指向的就是16位的sessionkey 了。
如何通过软件获得?
- 既然找到了
sessionkey 了,那怎么写软件来获取呢?说实话我半年没摸逆向了,我就提供个思路具体只有靠大家了,我很多细节都忘了,以后有机会再写吧!
- 通过
hook 很容易获得,从开始hook 函数,转跳到我们自己的程序断,hook 请注意机器码的长度,esp+0xc 获取地址,然后将sessionkey 的内容复制到我们自己申请的地址,注意长度16字节
- 听说可以直接内存搜索,我试了一下没搜到,自己可以试一试
- 临时获取方法
- 因为用ce调试,退出不会影响到程序运行,所以可以临时获取
- 欢迎补充。。。。。
为啥要获取sessionkey
sessionkey 故名思意,会话key,如果了解某q协议 的朋友应该知道,前面那么复杂的登录协议,就是为了最后一步sessionkey 有了它就可以获取发送 、聊天 了,如果为了省事情,就像网络爬虫一样,往往最复杂的就是最开始的登录 、验证 但是只要我们得到了cookie ,那这些都是子虚乌有的,所以大家不仅要保护好自己的密码,更要保护好自己的cookie 和sessionkey 。
|