[分享] OD2.0脚本插件: ODBGScript2 ++
在OD2.01脚本插件ODbgScript2.03(作者tpruvot等)的基础上,进行了部分命令的修正和增加。在about里有ODbgScript2.03的下载地址带源码。(目前已更新到v8&ms版本odbgscript2.06,传送门)
1、增加DOJS命令(==$$),我称为“撸串”命令,你给它一个js字符串,它还你一个精彩的js人生. DOJS丰富了原有脚本命令,如虎添翼。
DOJS可以执行JavaScript语言命令(js)和计算字符串表达式,返回最后一个表达式或命令的结果给$RESULT 。js是面向网页编程的语言,包括前端和后端编程,相当强大,支持各类数据的处理、函数调用、控制语句、类及方法、操作本地文件等. 现在, DOJS带你走进js世界。参见附件范例TEST-DOJS使用。实际使用传送门。
如:
--------------------------计算字符串表达式和调用js对象方法------------------------------
DOJS "3+4" // $RESULT= 7
DOJS "3+4*5-6==17" //$RESULT= TRUE
$$ "new Date().toLocaleString()" //$RESULT= 2016年10月4日 15:55:36
-----------------------------------调用自定义函数---------------------------------------
var x="'do'", y="'js'" //提示:eval 的替换{ }符号,更改为@ #
eval "function myname(c,d){ return c+d;};myname(@x#,@y#);"
$$ $RESULT //$RESULT= "dojs"
----------------------------------使用js数组和if语句------------------------------------
eval "var a='apple', b=[1,'apple',2,'pear']; if(a==b[1]){'yes'}else{'no'}"
$$ $RESULT //$RESULT="yes"
----------------------------------使用do-while循环--------------------------------------
mov j,20 // pass a var
eval "var i=@j#, x=3; do{x=i+1;i--} while(i>5); parseInt(x,16);"
$$ $RESULT
inc $RESULT //$RESULT=8
---------------------------------------使用for循环---------------------------------------
eval "var k=@j#; for(var i=1;i<k;i++){var x=i}; parseInt(x,16);"
dojs $RESULT //$RESULT=19
------------------------------------使用while循环----------------------------------------
eval "var i=@j#, k=1; while(i>3){ i--; k++; }; parseInt(k,16);"
dojs $RESULT //$RESULT=18
特别注意安全事项:因DOJS可以执行js命令,所以当然可以执行操作本地文件,比如删除、运行、复制文件,修改注册表、添加权限用户、开关机等,已亲测可行,有安全隐患。所以对于运行外来脚本时,要确认是否有恶意js命令。操作本地文件的一个例子:传送门
2、增加SWITCH-CASE命令(辅助命令BREAKS,ENDSW)比较简单的匹配数字、字符或串的使用。参见附件范例TEST-SWITCH使用。如果想使用较为复杂的switch-case,请用撸串命令,见范例TEST-DOJS使用说明。
如1:简单使用switch命令
var choice=2, s
switch choice
default:
tmsg " 不匹配case,或者可以做些缺省的任务", 6.228
breaks
case 1:
mov s, " 只因为在人群中多看了你一眼 。"
breaks
case 2:
mov s, " 我就是我,是颜色不一样的烟火。"
breaks
endsw
tmsg s, 30.228 //结果显示30.228秒关闭:“我就是我,是颜色不一样的烟火。” 见截图
如2:用DOJS实现复杂的switch-case命令:
var i=48
eval "var i=parseInt(@i#,16),s;" //eval { } is replaced by @ # .
eval "@$RESULT# switch(true){ "
eval "@$RESULT# case i<0: s="i<0";s;break;"
eval "@$RESULT# case i>=0 && i<=20: s="0<i<=20";s;break;"
eval "@$RESULT# case i>20 && i<=50: s="20<i<=50";s;break;"
eval "@$RESULT# default: s="50<i";s;}"
$$ $RESULT //$RESULT= "20<i<=50"
3、增加SUBSTRS命令取代READSTR命令,可以截取任意位置字符和长度。
如: VAR str="test substrs I love luchuan"
SUBSTRS str,13.,14. //$RESULT= "I love luchuan"
4、增加TMSG命令.
一个带延时自动关闭的消息对话框(时间为浮点数)。若时间为0.0,则窗口需手动关闭,等同于MSG命令。若时间参数后再加一个 ?参数,等同于MSGYN。
如:TMSG "带延时关闭的对话框, 3s后自动关闭..." , 3.0 //结果:显示3s后关闭对话框。
VAR N=10
TMSG N,3.225 //结果:显示"10",并在3.225s后关闭消息窗口。
5、增加STRREP命令,字符串替换功能, 将原始字符串中的某些字符全部替换成另外一些字符。
如:STRREP "D:\A\B\C\D\E", "\", "\\" //$RESULT="D:\\A\\B\\C\\D\\E"
6、增加ENDS命令,即end script的意思,并且2s后自动关闭ends窗。
原ret命令既有结束脚本和call的返回作用,易混淆,所以就分开了,ends为结束整个脚本,而ret返回call。
7、增加快捷键,大键盘的数字1、2、3、4。
在OD的CPU窗口中(odbgscript窗口需最小化或关闭),1为暂停脚本,2为继续运行脚本,3为放弃运行,4为单步运行脚本。
8、增加脚本窗口右键菜单Reload,重载当前脚本快捷功能,快捷键为R,这下调试脚本就爽YY了。
9、改进#INC命令,可以包括载入js后缀文件,以odbg脚本可运行方式载入,dojs可运行与浏览器无关的大部分js语句命令,可能依赖于你自己电脑系统里的js引擎是否支持最新标准。
研究了一下,如果想支持最新js标准ES6的命令,至少有三个办法,一是升级电脑系统自带的js引擎。二是借助nodejs(内含Google的V8引擎),不仅仅是一个js运行环境。支持最新版标准,需安装,可直接运行js文件和单条命令(不仅仅这些功能)。借助node和dojs命令,便可实现运行新版ES6中的命令在odbgscript脚本界面中,见截图,let和set命令是ES6中新增的。
三是将Google V8 JavaScript 引擎直接嵌入到本DLL中,传送门。
10、改进VAR命令,原版命令只能声明一个变量,且不能赋值。现在可以同时声明多个变量,并进行多个变量赋值。目前支持long型数据和字符串型的赋值。如果重复定义,取最后定义和赋值。同时也支持$RESULT赋值。
如: EVAL "test var command"
VAR res= $RESULT, a=9,bb,ccc="string",d8=-6,filepath="d:\t.txt"
WRT filepath,"this is a test of var command ."
//结果是:res="test var command", a=9, bb=0, ccc="string", d8=0XFFFFFFFA, filepath="d:\t.txt", 并在d盘生成t.txt文件。
11、改进ASM命令,原版命令不判断新指令和原指令大小。
现在如果新指令小于原指令长度,则自动填充Nop。如果大于,则提示是否进行覆盖后面原有代码。
12、改善了ODbgscript窗口右键菜单Abort的快捷键为A,作用放弃执行,并返回到脚本开始。而Esc为退出脚本窗口。原版,Abort快捷键失效,只有ESC.
13、ODbgscript窗口完美支持中文显示,以及支持wrt/wrta中文写入文件(.txt/.doc等等)。
14、在脚本窗口中,编辑脚本快捷键为s,打开脚本为o。
15、修复2.03版的BD命令不能禁止断点。
16、修复2.03版GCI命令读取目的跳转地址,现在可以正常读取call esi或call xxx[xxx]形式的目的跳转地址。
17、脚本界面做了显示优化,可以保持脚本缩进格式,见附图对比。
18、版本小升级为ODbgScript2.04 ,感谢2.03版原作者分享源代码。
19、本DLL纯属实构,如有雷同,纯属巧合。
范例用的都是中文式的英语,都懂哈。百思不得姐,为什么网上就找不到没有错的源码呢?即使epsylon3 和 tpruvot 脚本维护个人网页,也好像很久没更新了。难道我没找对?
win7 x64 测试ok,win7 x32估计应该也能用,win8和win10,不知道哈,自己试试吧。
截图如下:






