sgw888 发表于 2022-11-28 13:04:10

OD 脚 本编写基础语法学习及避坑

现在用OD的人少了,这几天尝试用 OD 写脚本,中间遇到不少问题。所以把自己总结的经验分享一下。

只用到了很少几个指令,只把我用过的写一下。


基本语法:

注释用 // 开始

指令不区分大小写

保留变量 $RESULT ,一些指令执行后的结果都保存在 $RESULT 中。

自定义变量要先声明,然后才能使用

以下是我测试过的指令:

var 变量声明
示例:var addr

msg 弹窗显示信息

示例: msg "提示"
示例: msg $RESULT

mov 变量赋值,跟汇编指令类似
示例:
var addr
mov addr,401000

mov addr,eax


add 相加运算
示例:

var addr
mov addr,401000
add addr,100 //注意是十六进制


GMI eip,CODEBASE// 获取EIP,结果保存在 $RESULT

msg $RESULT// 显示结果



GMI eip,MODULEBASE// 获取模块基址

bp 下断点
示例:

bp addr//注意,addr 已事先声明,并且其中的值是下断点的目标值


run// 相当于按F9运行



// 获取内存中十六进进制数据

var hex,addr//假设 addr 是目标地址,hex 是保存数据的变量
mov hex,

mov hex, //用偏移的方式


// 从内存中读取字符串

readstr ,12 // 解释:addr 是一个变量,也是读取的内存地址,12 是字符串长度,注意是十六进制

示例:
var addr
mov addr,esi // 当前esi的值是目标值
readstr ,12// 注意,一定要加 [],结果保存在 $RESULT 中
msg $RESULT//显示读到的字符串



// 显示格式处理,比如我想弹窗显示:目标值是x (其中x是变量)

eval "目标值是 {x}"    // 解释:变量用 {} 括起来,结果会保存在 $RESULT,并不能直接弹窗
msg $RESULT//把上面的结果弹窗显示

// 十六进制数据逆序处理,注意是字节逆序
rev hex//其中,hex 是变量,结果保存在 $RESULT
mov hex,$RESULT //把逆序的结果保存到 hex中


// 写信息到文件
wrta code,$RESULT// 解释:code是变量,值是 文件的名字,$RESULT 是要保存的信息
示例:

var code
mov code,"code.txt"
wrta code,$RESULT   // 会把 $RESULT 中的信息写到文件 code.txt 中。


// 结束脚本
ret



wlf000 发表于 2022-11-28 14:13:29

谢谢楼主分享下载!!!

fodereas 发表于 2022-11-28 16:22:31

感谢分享经验

飞天梦 发表于 2022-11-28 20:35:53


感谢分享经验

xyzjxlf 发表于 2022-11-28 21:20:06

谢谢老师专注技术分享!这应该是论坛的主旋律。

哥又回来了 发表于 2022-11-30 12:26:48

这就完了?没过瘾啊。

乐活 发表于 2022-11-30 13:35:21

过来学习,多谢分享!

GCC_Kill 发表于 2022-12-1 14:00:35

谢谢分享,但是没必要守旧了. x32 x64dbg还是学习下把. OD虽然说是个好软件,但没有人维护了. 很多指令已经不支持了. 除非你用OD分析老软件,如果分析主流软件确实局限性很大.x64得脚本都有官方文档. 很多OD之前需要插件得功能都已经内置了.建议放弃OD.用X32.

izozoz 发表于 2022-12-1 19:54:09

感谢楼主分享经验
页: [1]
查看完整版本: OD 脚 本编写基础语法学习及避坑