首页
社区
课程
招聘
[原创]OD LUA 插件
发表于: 2012-4-10 18:32 40726

[原创]OD LUA 插件

2012-4-10 18:32
40726
上个帖子发错地方了,发这里比较合适.

最近迷上了lua,简单,高效,几乎能做任何c/c++可以实现的功能,边学边实践,就萌发了写lua插件的想法。
目前插件DLL部分基本不需要再修改,需要其他功能自己写脚本就可以,或者提出有好想法我也可以帮忙实现。

插件下载:更新日期2012-4-11
LuaPlugindev.rar

基本介绍:
核心脚本在LuaScripts\init目录内,可自行修改。
用luajit从OD导出表获取API,可实现C版本插件所有功能。
使用lua简化开发步骤,虽然没有深度封装API,但使用脚本开发的好处是不言而喻的。

字符串查询脚本:
1.写了个查询字符串的例子,包括显示窗口和弹出菜单,给想写插件的朋友一个参考。
2.找出的字符串,可以用lua的匹配模式进一步查找.
看图,左边是查询出的字符串,右边log窗口是 查找包含”Olly“字符的结果窗口。


添加脚本:
保存断点和恢复断点 SaveLoadBreakPoint.lua
断点保存表默认文件名为当前调试进程名,保存在OD目录内。
读取断点默认读取当前进程名的.breakpoint文件。

搜索汇编代码:
FindAsmCode.lua 脚本 先输入dofile("OD全路径/FindAsmCode.lua") 加载初始化,然后执行。

搜索所有包含 "fs:"字符的代码,结果显示在log文件。


硬件条件断点:
添加了ODBG_Pausedex 回调函数,可对断下后的数据进行条件判断,下面是硬件条件断点的例子。

但是有个小问题,每次断下的时候OD会刷新CPU窗口各种数据,造成速度很慢,但是吧OD最小化就没有速度影响了。
看Plugin API里没有关于让OD停止刷新窗口数据的方法,有这方面经验的朋友请指教下。

--硬件断点事件
function OnHWBREAK(reason,extdata,reg,debgevent)
	if ret ~= 0 then
		local treg = ffi.cast("t_reg *",reg)
		if treg then
			local Msg = Expression("DWORD [esp + 08]")
			local Key = Expression("DWORD [esp + 0C]")
			if Msg == WM_KEYDOWN then
				Od.Addtolist(treg.ip,1,string.format("硬件断点键盘按下 = %s",string.char(Key)))
				return 0
			else
				--F9运行
				Od.Sendshortcut(0,0,WM_KEYDOWN,0,0,0x78)
				return 1
			end
		end
	end
end


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (43)
雪    币: 768
活跃值: (530)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
2
好,赞赏~!!
2012-4-10 19:04
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这 lua 玩得确实太牛了
2012-4-10 23:30
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
4
膜拜啊,收藏了,期待出更多作品。
2012-4-10 23:41
0
雪    币: 2194
活跃值: (1001)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
LUA还可以这么用   长见识
2012-4-11 10:07
0
雪    币: 546
活跃值: (1657)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
非常好,喜欢这个插件啊。

od加载程序出错啊
上传的附件:
2012-4-11 10:51
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=我是土匪;1062758]非常好,喜欢这个插件啊。

od加载程序出错啊
[/QUOTE]

sorry 请下新版本修改了这个问题。
2012-4-11 14:36
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢了学习下lua
2012-4-12 01:07
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
9
膜拜+谢谢。不懂Lua
2012-4-12 02:35
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
attempt to call a nil value
我用的版本是0llyICE v1.10

32-bit Assembler-
2012-4-12 08:11
0
雪    币: 506
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
好啊。楼主。
2012-4-12 08:20
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
12
谢谢楼主啊= =
2012-4-12 08:23
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
收下,3qs a lot!! 正想写插件,略懂lua
2012-4-13 15:01
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我下的已经是新版本了的,为啥还是报attempt to call a nil value,我用的是0llyICE。
2012-4-13 17:04
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
15
启动的时候报错?给个图,看看详细。
2012-4-13 17:12
0
雪    币: 212
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
这个支持OD 2.01 么?
2012-4-17 20:10
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
呵呵 出现这个问题的原因是没有放对目录,直接把最新版解压到当前目录就行
plugin 和 LuaScripts 目录要放到OD的根目录里面,也就是同级的
2012-4-17 20:32
0
雪    币: 11121
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
有那么点小猛, 真狠刚学lua~·
2012-4-17 21:00
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
19
不懂lua
2012-4-17 21:47
0
雪    币: 6131
活跃值: (984)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
貌似新版的FindString.lua脚本不正常
用8号那个版本的FindString.lua就正常
2012-4-18 06:01
0
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
终于明白 LuaScripts  这个目录也是要挎过去的。谢谢楼上几位。
2012-4-18 13:42
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
lz,你可以研究一下,使用跟踪技术,不要读一句就让它调用PauseEx回调函数,跟踪是设置步长的,比如设为10000条语句调用一次PauseEx回调
2012-4-18 20:47
0
雪    币: 227
活跃值: (120)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
23
支持.dingqi
2012-4-18 22:22
0
雪    币: 275
活跃值: (130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
残念!完全不会用 = =
执行文件跟执行脚本的区别跟用法谁可以说说阿!
2012-5-1 16:19
0
雪    币: 196
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
赞,好谢谢分享
2012-5-17 22:17
0
游客
登录 | 注册 方可回帖
返回
//