易语言吧

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 537|回复: 0

[技术文章] 第四课 用关键字检测OD

[复制链接]

6

主题

41

帖子

2285

积分

VIP超级贵宾

Rank: 8Rank: 8

积分
2285
威望
0
易币
2244
贡献
0
积分
2285
UID
40804
在线时间
23 小时
注册时间
2024-1-18
发表于 2025-2-9 11:44:48 | 显示全部楼层 |阅读模式
第四课 用关键字检测OD
在OD调试器里有StrongOD,ODbgScript,单步步入,单步步过等关键字
我们可以利用这个特征来实现调试器检测,这个方法同样适用于检测CE
给出源码
  
子程序名返回值类型公开备 注
特征字检测OD逻辑型 
变量名类 型静态数组备 注
句柄数组窗口句柄类 0
x整数型  
菜单句柄整数型  
菜单数量整数型  
xxx整数型  
子菜单句柄整数型  
子菜单子数量整数型  
名字文本型  
xxxxxx整数型  
文本长度整数型  
启动时间整数型  
特征分割文本型 0
特征字节集文本型  
YYYYY整数型  
子数组窗口句柄类 0
子计次整数型  
标题标记文本型  
特征字节集 = “StrongOD,ODbgScript,ODDragAttach,OllyMachine,单步步入,单步步过,自动步入,自动步过,执行到返回,硬件断点,跟踪步入,跟踪步过,断点,调用堆栈,SEH 链,RUN 跟踪,实时调试设置,Step &into,Step &over,Animate into,Animate over,Execute till return,Debugging &options,&Just-in-time debugging,Select A&PI help file,SEH chain,Call stac&k,&Breakpoints,Ru&n trace,内存断点,可执行模块,运行跟踪,INT3 断点,重新开始(&S),&Attach,VEH/SEH chain,INT3 &breakpoints,Call DLL export Alt+F6,Run thread F11,Set condition... Ctrl+T,&Options... Alt+O,Stop hit trace,Run hit trace,Execute till return Ctrl+F9”
' 以上是大致的特征字,你自己可以根据现在公开的各种魔改CE来进行添加特征字
特征分割 = 分割文本 (特征字节集, , )
标题标记 = “Breakpoints”         ‘设置了一个特定的窗口标题标记,用于后续的窗口标题匹配。
计次循环首 (枚举窗口_强力 (句柄数组), x)         ’使用 枚举窗口_强力 函数枚举系统中的所有窗口,并将窗口句柄存储在 句柄数组 中。
计次循环首 (枚举所有子窗口_强力 (句柄数组 [x].句柄, 子数组, , ), 子计次)        ' 枚举子窗口
如果真 (子数组 [子计次].标题 = 标题标记)
返回 ()
’开始检测特征字
计次循环尾 ()
菜单句柄 = API_取菜单 (句柄数组 [x].句柄)
如果真 (菜单句柄 > 0)
菜单数量 = API_取条目数量 (菜单句柄)
如果真 (菜单数量 > 0)
计次循环首 (菜单数量, xxx)
子菜单句柄 = API_取子菜单句柄 (菜单句柄, xxx - 1)
子菜单子数量 = API_取条目数量 (子菜单句柄)
如果真 (子菜单句柄 > 0 子菜单子数量 > 0)
计次循环首 (子菜单子数量, xxxxxx)
名字 = 取空白文本 (200)
文本长度 = API_取条目字串 (子菜单句柄, xxxxxx - 1, 名字, 200, 1024)
如果真 (文本长度 > 0)
计次循环首 (取数组成员数 (特征分割), YYYYY)
如果真 (寻找文本 (名字, 特征分割 [YYYYY], , ) ≠ -1)
返回 ()

计次循环尾 ()

计次循环尾 ()

计次循环尾 ()


计次循环尾 ()
返回 ()

运用这样一层检测,可以轻松检测到驱动ce,魔改ce
  
子程序名返回值类型公开备 注
枚举窗口_强力整数型 
参数名类 型参考可空数组备 注
保存数组窗口句柄类
只找可见窗口逻辑型  
句柄保存数组整数型
变量名类 型静态数组备 注
句柄数组整数型 0
句柄整数型  
临时窗口句柄类  
x整数型  
清除数组 (保存数组)
清除数组 (句柄保存数组)
句柄 = GetWindow (API_取屏幕句柄 (), 5)
判断循环首 (句柄 ≠ 0)
如果 (只找可见窗口)
如果真 (窗口是否可见 (句柄))
加入成员 (句柄数组, 句柄)

加入成员 (句柄数组, 句柄)
句柄 = GetWindow (句柄, 2)
判断循环尾 ()
计次循环首 (取数组成员数 (句柄数组), x)
临时.句柄 = 句柄数组 [x]
临时.标题 = 窗口取标题 (句柄数组 [x])
临时.类名 = 窗口取类名 (句柄数组 [x])
如果真 (是否为空 (句柄保存数组))
加入成员 (句柄保存数组, 临时.句柄)
加入成员 (保存数组, 临时)
计次循环尾 ()
返回 (取数组成员数 (保存数组))
子程序名返回值类型公开备 注
窗口取类名文本型 
参数名类 型参考可空数组备 注
窗口句柄整数型   
变量名类 型静态数组备 注
buffer文本型  
buffer = 取空白文本 (255)
GetClassName (窗口句柄, buffer, 255)
返回 (buffer)
子程序名返回值类型公开备 注
窗口取标题文本型 
参数名类 型参考可空数组备 注
hWnd整数型   
变量名类 型静态数组备 注
String文本型 返回的文本内容
nLength整数型  
nLength = GetWindowTextLength (hWnd)
String = 取空白文本 (nLength)
GetWindowText (hWnd, String, nLength + 1)
返回 (String)
子程序名返回值类型公开备 注
窗口是否可见逻辑型 返回真为可见,否则为不可见
参数名类 型参考可空数组备 注
窗口句柄整数型   窗口句柄
变量名类 型静态数组备 注
a逻辑型  
返回 (IsWindowVisible (窗口句柄))
子程序名返回值类型公开备 注
枚举所有子窗口_强力整数型 
参数名类 型参考可空数组备 注
父窗口句柄整数型   
保存数组窗口句柄类
只找可见窗口逻辑型  
句柄保存数组整数型
变量名类 型静态数组备 注
句柄整数型  
句柄数组整数型 0
x整数型  
临时窗口句柄类  
需要整理逻辑型  
句柄 = GetWindow (父窗口句柄, 5)
判断循环首 (句柄 ≠ 0)
如果 (只找可见窗口)
如果真 (窗口是否可见 (句柄))
加入成员 (句柄数组, 句柄)

加入成员 (句柄数组, 句柄)
递归 (句柄, 句柄数组, 只找可见窗口)
句柄 = GetWindow (句柄, 2)
判断循环尾 ()
如果真 (是否为空 (保存数组))
清除数组 (保存数组)
计次循环首 (取数组成员数 (句柄数组), x)
临时.句柄 = 句柄数组 [x]
临时.标题 = 窗口取标题 (句柄数组 [x])
临时.类名 = 窗口取类名 (句柄数组 [x])
加入成员 (保存数组, 临时)
计次循环尾 ()

如果真 (是否为空 (句柄保存数组))
清除数组 (句柄保存数组)
计次循环首 (取数组成员数 (句柄数组), x)
加入成员 (句柄保存数组, 句柄数组 [x])
计次循环尾 ()
返回 (取数组成员数 (句柄数组))
子程序名返回值类型公开备 注
递归  
参数名类 型参考可空数组备 注
父窗口整数型   
句柄数组整数型 
只找可见窗口逻辑型  
变量名类 型静态数组备 注
句柄整数型  
句柄 = GetWindow (父窗口, 5)
判断循环首 (句柄 ≠ 0)
如果 (只找可见窗口)
如果真 (窗口是否可见 (句柄))
加入成员 (句柄数组, 句柄)

加入成员 (句柄数组, 句柄)
递归 (句柄, 句柄数组)
句柄 = GetWindow (句柄, 2)
判断循环尾 ()

引用的API
  
DLL命令名返回值类型公开备 注
API_取菜单整数型 取得窗口中一个菜单的句柄  依附于指定窗口的一个菜单的句柄(如果有菜单);否则返回零
DLL库文件名:
user32
在DLL库中对应命令名:
GetMenu
参数名类 型传址数组备 注
窗口句柄整数型  窗口句柄。对于vb,这应该是一个窗体句柄。注意可能不是子窗口的句柄;
DLL命令名返回值类型公开备 注
API_取条目数量整数型 返回菜单中条目(菜单项)的数量  菜单中的条目数量;-1意味着出错。会设置GetLastError
DLL库文件名:
user32
在DLL库中对应命令名:
GetMenuItemCount
参数名类 型传址数组备 注
菜单句柄整数型  目标菜单的句柄;
DLL命令名返回值类型公开备 注
API_取子菜单句柄整数型 取得一个弹出式菜单的句柄,它位于菜单中指定的位置  位于指定位置的弹出式菜单的句柄(如果有的话);否则返回零
DLL库文件名:
user32
在DLL库中对应命令名:
GetSubMenu
参数名类 型传址数组备 注
菜单句柄整数型  菜单的句柄
位置整数型  条目在菜单中的位置。第一个条目的编号为0;
DLL命令名返回值类型公开备 注
API_取条目字串整数型 取得指定菜单条目的字串  在lpString中返回的字串的长度(不包括空中止字符)。零意味着出错
DLL库文件名:
user32
在DLL库中对应命令名:
GetMenuStringA
参数名类 型传址数组备 注
菜单句柄整数型  菜单句柄
条目位置整数型  欲接收的菜单条目的标识符。如果在wFlags参数中设置了MF_BYCOMMAND标志,这个参数就用于指定要改变的菜单条目的命令ID。如果设置的是MF_BYPOSITION标志,这个参数就用于指定条目在菜单中的位置(第一个条目的位置为0)
缓冲区文本型  指定一个预先定义好的字串缓冲区,以便为菜单条目装载字串
缓冲区长度整数型  载入lp缓冲区中的最大字符数量+1
标志整数型  常数MF_BYCOMMAND或MF_BYPOSITION,取决于wID参数的设置;


懒得打字嘛,点击右侧快捷回复 【选择右侧内容,快速回复】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

大漠插件注册码无须等1-3号

QQ|一:站内所有资源均来自互联网收集或用户上传分享,本站不拥有此类资源的版权。 作为网络服务提供者,对转载行为的发生不具备充分的监控能力。但是当版权拥有者提出侵权并出示充分的版权证明材料时,易语言吧负有移除转载作品以及停止继续传播的义务。在满足前款条件下采取移除等相应措施后不为此向原发布人承担违约责任,包括不承担因侵权不成立而给原发布人带来损害的赔偿责任。 用户免费分享产生,如果侵犯了你的权益,联系QQ:3066137757|Archiver|手机版|小黑屋|易语言吧

GMT+8, 2025-4-26 09:15 , Processed in 0.176695 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表