欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[分享] OD2.0脚本插件: ODBGScript2 ++

[分享] 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
104 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=3do{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.03GCI命令读取目的跳转地址,现在可以正常读取call esicall xxx[xxx]形式的目的跳转地址。
17、脚本界面做了显示优化,可以保持脚本缩进格式,见附图对比。


18、版本小升级为ODbgScript2.04 ,感谢2.03版原作者分享源代码


19
、本DLL纯属实构,如有雷同,纯属巧合。  
   
范例用的都是中文式的英语,都懂哈。百思不得姐,为什么网上就找不到没有错的源码呢?即使epsylon3  tpruvot 脚本维护个人网页,也好像很久没更新了。难道我没找对?   
   
   win7 x64 
测试okwin7 x32估计应该也能用,win8win10,不知道哈,自己试试吧。
     
   
截图如下:


上传的附件 ODbgScript2.dll
TEST-SWITCH.txt
Test-DOJS.txt
ODBGScript.chm

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功