作者:yueji0j1anke
首发于公号:剑客古月的安全屋
字数:635
阅读时间: 5min
声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。本文章内容纯属虚构,如遇巧合,纯属意外
目录
-
前言
-
Stalker
-
验证
-
总结
0x00 前言
今天在看雪上面看到一篇蛮有意思的文章
https://bbs.kanxue.com/thread-286323.htm
更多来说还是基于stalker bug的检测,笔者之前逆向还是遇到过多家厂商相关stalker检测,却没有从这个角度进行分析的,加上最近也在收集一些指针,特来复现一下
0x01 Stalker
前面一些文章发现基础原理并没有讲的太过深入浅出,有些基于特殊原因存在留白,这里就好好恶补一下啊。。
stalker是frida一个模块,本质上是基于动态重新编译的指令追踪器。会把内存中的指令复制到新开辟的一个内存进行执行。
但目前来说 stalker会对相同内存地址进行判断看是否需要进行重编译,其应该对比当前内存的指令与原始编译中的指令,而不是当前内存与缓存中的指令,从而导致bug产生
0x02 验证
敲代码就完事儿了
可以尝试两个字节码函数,比如说
uint64_tBlock_Bug_Check_one(uint64_tcount) {
returncount+100;
}
uint64_tBlock_Bug_Check_two(uint64_tcount){
returncount;
}
这里会用到相同的地址
那为了造成stalker产生bug,我们需要把相同的地址映射到内存进行字节码操作,这样才不会导致内存随机化问题从而不产生相同地址
可以参考地址
https://github.com/jiankeguyue/StalkerCheck
主动调用可以看到验证正常
加入trace之后,发现其确实只会验证缓存地址而不是原始指令地址
0x03 总结
目前这个检测还是蛮新颖的,不过各大厂商对stalker的检测都不同,有兴趣的小伙伴可以去参考一下
原文始发于微信公众号(剑客古月的安全屋):app逆向攻防-基于stalker的bug检测
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论