一个字符串禁止Ollydbg调试

查看 164|回复 11
作者:忆魂丶天雷   
前言
好,成功把你骗进来来了,其实我是个标题党别往下看了(猫猫头保命~)
正文
OllyDebug久远的历史与现状
OD作为一款Ring3级的调试器,他的地位与名声想必大家都有所耳闻,在前些年它还是最流行的调试工具(为什么说前些年?当然是因为开源的X64dbg的崛起)......而今虽然逐渐败落,但是使用人数依旧很多,这得当然得益于各种强大的OD插件和各位大牛二改版本,使得OD强行续命残喘至今,但是因为其本身作为一款闭源软件,又加之年久失修无人维护,存在在很多致命的缺点,比如不支持64位应用调试(据说作者有开发OD2.0但是....有兴趣可以自行搜索),又比如今天的主题,一个字符干掉OllyDebug.
从一种老掉牙过时的反调试手段说起
相信如果有学习反调试的朋友应该都有见过或则听说过一种针对OllyDebug。
名为OD漏洞攻击的反调试方法。
演示代码如下:
#include
int main(int argc, char* argv[])
{
        MessageBox(NULL, TEXT("程序开始运行!"), NULL, MB_OK);
        OutputDebugStringA(TEXT("%s%s%s"));                      //
        MessageBox(NULL, TEXT("程序正常运行!"), NULL, MB_OK);
}
原理如下:

程序调用OutputDebugString()会产生一个特殊标志的软件异常,如果程序正在被调试那么调试器线程的WaitForDebugEvent函数会将此异常捕获并转化为OUTPUT_DUBGU_STRING_EVENT调试事件,OD在捕获此调试事件后会接着调用Sprintf()将OutPutDebugString中的字符串打印出来。而Springf函数并不会对参数进行检查,如果OutputDebugStringA(TEXT("%s%s%s")),OD中是Springf(目标缓冲区,"调试字符串"),因为现在调试字符串是“%s%s%s”,那么Springf(目标缓冲区,“%s%s%s”,X1,X2,X3),而此X1,X2,X3就会随机从栈中取出数据作为字符换的首地址,所以很容易取到的数据是一个无效指针会产生缓冲区异常。

值得注意的是,目前多数版本的OD已经将此漏洞修复(感恩前面说的强大的插件)
%s%s%s的死灰复燃(活了但没完全活)
是的,很遗憾,如前面所说,通过OutputDebugString输出一下%s%s%s就可以让OD崩溃的漏洞被修复了,但是%s%s%s好像还能抢救一下,这里也不卖关子,其实只是一个很简单的操作,将任意文件的文件名重命名为%s%s%s.exe即可
经过测试,咱们论坛的吾爱破解专用版Ollydbg完败,如图所示:


1.jpg (110.05 KB, 下载次数: 0)
下载附件
2023-3-26 20:18 上传



2.jpg (30.21 KB, 下载次数: 0)
下载附件
2023-3-26 20:18 上传

当然,也并不是所有的OD都可以打败,例如我跪舔的一位技术大牛表哥集成的一款二改OD就可以完美的避免这个问题(默认配置就可以过VMP反调试哦~当然我只白嫖到3.6现在都好像出VMP3.8了不知道反调试有没有改进)。


3.jpg (177.24 KB, 下载次数: 0)
下载附件
2023-3-26 20:23 上传

更为牛逼的字符串
好 本贴结束
可惜,%s%s%s的确很强大,但是在各大OD插件的魔法攻击下,它最终还是没活过来(除非你的对手用的是吾爱破解专用OD~,继续猫猫头保命)。
但是这也引发了我们一个思考,既然都是字符串,那么是否还存着其他的更为强大的字符串呢?答案是肯定的!
忆想当年,谁不是一个非主流的中二少年(bushi~)你多多少少也用过几个非主流的网名吧。比如じ浅夏♕初雨又比如꧁碎花小裙子꧂,总有一个你用过吧
那么我们给软件穿上重命名为꧁碎花小裙子꧂呢?


4.jpg (125.5 KB, 下载次数: 0)
下载附件
2023-3-26 20:48 上传

如图所示,强大到直接无视VMP反调试,碾死%s%s%s的OD竟然败在了碎花小裙子下。而且更为牛逼,直接显示无法定位文件,OD连加载文件都加载不了。
wow


1.gif (1.05 MB, 下载次数: 0)
下载附件
2023-3-26 20:49 上传

碎花小裙子牛逼,还等什么?赶紧去给你的软件穿上碎花小裙子!
小菜的测试结果
好,言归正传,其实真正牛逼的并不是什么碎花小裙子,而是其中的特殊字符꧁和꧂
这就是一个字符串的力量,这里可以简单的说一下小菜(我)的测试结果,碎花小裙子通杀了我收集的包括吾爱破解专用OD在内的17款OD,均无法直接定位文件,也就是说如果你想把文件直接拖到OD里调试,那不好意思,没门。
但是,遗憾的是,部分OD依旧可以通过附加功能,在进程列表中找到进程,然后测试发现可以正常进行附加调试,当然也有部分OD在进程列表中直接找不到含有特殊字符的进程,变相的实现了进程隐藏,但是具体原因不明,推测是某些插件起了作用。
当然,对于先进的X64dbg而言,自然不存在这种BUG,毕竟OD是年龄摆在那里。但是,也不是说绝对通杀所有的OD,我的测试结果只能证明,可以通杀我收集到的17款。
那么有字符串可以干掉X64dbg吗?
我的答案是,有,
为什么?因为,之前的群里聊到本主题相关内容时有大牛演示了。
那么这个字符是什么?
我也想知道,但是被打马赛克了,我甚至百度了有没有马赛克解码工具。(真的没什么其他用途!)
引发的反思与闲谈
经此一文,大家应该初识了字符串的神奇威力,其实发生在我们身边因为字符串导致的严重安全隐患还是很常见的,例如在QQ群流行的各种卡屏代码,尤其是对手机端造成的影响甚至可以达到让你必须清空QQ数据才能重新正常打开QQ(别问我怎么知道的,谢谢),又例如21年Win10爆出的严重漏洞,一段字符串\:$i30:$格式化你硬盘,再例如苹果IOS也发生过多起因为字符串导致的严重BUG,比如特殊字符串WIFI名称直接让手机断网,又例如某应用超长字符串导致手机卡死重启。
所以,真的不要小看一个小心的字符串,有时候会给你带来意想不到的的后果。
好了,到这里,这个水贴是真的结束了,就技术含量上来说,毫无技术含量,就实用性上来说,也几乎为0,毕竟虽然一个特殊字符串可以保护你的软件不会被OD加载,但是应该不会有人不会重命名吧,不会吧,不会吧,不会吧。
最后的最后,虽然说,应该不会有那种无聊的人在下面吐槽“没什么用”“垃圾”之类的攻击性言论,但咱们还是有言在先,如果真的觉得没用,对你帮助的意义不大,那么请如前言中所说,我是个标题党,你可以直接关贴。因为小菜身体不大好,受不了气,不能激动,请饶我狗命一次。

字符串, 碎花

Asympto69   

感觉一开始制定各类字符的计算机表示规范的时候就很不严谨,才有了现在这么多的问题哈哈哈哈
忆魂丶天雷
OP
  


孽小帅才 发表于 2023-3-26 22:35
woqu 我去!!!调试值钱修改文件名字不就可以了么

是的,正如文章末尾所说,解决这个问题的方法很简单就是对文件进行重命名。但是我需要强调的一点是,文章中本质上只是简单粗暴的对OD存在的一个BUG进行了复现,至于如何运用这一个BUG,这正是大家需要思考的问题。
忆魂丶天雷
OP
  

如果有帮助,给个免费的评分不过分吧
henry307   

如果可以,各位大牛出此破解调试的基础课吧,针对新手的 OllyDebug
coder_LGB   

回头试试看
enzospace   

收藏了,感谢分享
Natu   

道高一尺魔高一丈,楼主分享的文章挺好的,免费评分呈上,略表敬意!
思想者   

简单易懂, 学习了
孽小帅才   

woqu 我去!!!调试值钱修改文件名字不就可以了么
您需要登录后才可以回帖 登录 | 立即注册

返回顶部