- UID
- 73991
注册时间2014-2-15
阅读权限20
最后登录1970-1-1
以武会友
 
TA的每日心情 | 开心 2024-9-26 10:34 |
---|
签到天数: 28 天 [LV.4]偶尔看看III
|
现在用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,[addr]
mov hex,[addr+4] //用偏移的方式
// 从内存中读取字符串
readstr [addr],12 // 解释:addr 是一个变量,也是读取的内存地址,12 是字符串长度,注意是十六进制
示例:
var addr
mov addr,esi // 当前esi的值是目标值
readstr [addr],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
|
|