这是linhanshi兄放在他的网站上的,我觉得不错就翻译了下,水平很烂,多多包涵!
【程序编程相关:HTML教程(8)-播放音乐】 【推荐阅读:HTML教程(7)-插入图形】the other ways to detect ollydbg 检测ollydbg的另类方法 【扩展信息:HTML教程(9)-播放视频】 pumqara作/roba[tt]译 前言 现在是2004年了,ring-3级调试器被越来越多地使用,因为它们有图形界面并且比ring-0级调试器(比如softice)更加方便.在这篇文章中我将讲述如何检测最好的ring-3调试器之一——ollydbg.许多人都听说过isdebugerpresent与fs:[20]检测手段,但是有没有其他的新方法呢?下面我向你介绍我自己的一些检测手段.我会给出详细的解释,因此你可以用你自己的想象力来完善它们. 方法一:findwindow 这个方法是基于findwindow函数.像所有的对话框一样,ollydbg的主对话框(窗口?)也有它的标题与类名.使用这个api函数我们可以判断ollydbg的主窗口是否打开.microsoft这样写道: ------------------------------------------------------------------------------------------------ findwindow函数能够获得窗口类名或标题为特定字符串的顶层窗口的句柄.该函数不搜索子窗口. hwnd findwindow( lpctstr lpclassname, //窗口类名的地址 lpctstr lpwindowname //窗口标题的地址 ); 参数说明 lpclassname 指向一个以null结尾的表示窗口类名的字符串的指针,或者是一个标识窗口类名字符串的atom.如果该参数是一个atom,它必须是被函数globaladdatom预先建立的一个全局atom.这个16位的atom必须放在lpclassname的低8位,lpclassname的高8位必须为0. lpwindowname 指向一个以null结尾的表示窗口名称(即标题)的字符串的指针.如果这个参数为null,所有的窗口都被认为是符合条件的. 返回值 如果搜索成功,返回找到的符合条件的窗口句柄. 如果搜索失败,返回值为null.要得到详细的错误信息可以调用getlasterror. ------------------------------------------------------------------------------------------------ 我的程序片断: 代码: .data strollyclsname db "ollydbg",0 .code invoke findwindow, addr strollyclsname, null cmp eax, 00000000h jne olly_detected/ 方法二:createtoolhelp32snapshot, process32first/next 这是一个有趣的方法.它基于四个api函数(createtoolhelp32snapshot, process32first, process32next, getcurrentprocessid)与一个结构( processentry32 ).先看看msdn怎么说: ... 下一页