吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17297|回复: 50
收起左侧

[OllyDbg 1.x Plugin] ollyDBG脱壳脚本编辑器/OD脚本编辑器/OD指令查询

  [复制链接]
残情 发表于 2015-10-21 11:43
本帖最后由 残情 于 2015-10-21 11:48 编辑

OllyDbg 编写脚本必备软件。指令查询。方便好用

1.jpg
2.jpg

ollyDBG脱壳脚本编辑器.rar (769.93 KB, 下载次数: 1354)
内置指令大全:


33.1.1 保留变量
------------------------

$RESULT
-------
<RESULT>
保存某些函数的返回值,比如FIND函数,等等。

$VERSION
--------
<VERSION>
保存OllyScript,的版本信息
例:
  cmp $VERSION, "0.8"  //比较是否大于 0.8版
  ja version_above_08  

3.1.2 指令
--------------

#INC "文件名"  
---------
<INClude>
将一个脚本文件的内容包含到另外一个脚本文件中
例:
  #inc "anotherscript.txt"


#LOG
----
<LOG>
开始记录运行指令
指令会显示在OllyDbg的log窗口中,每条记录前都会加上“-->”的前缀
例:
  #log

ADD 目的操作数,源操作数
-------------
<ADD>
源操作数与目的操作数相加,并把相加的结果保存到目的操作数中。
例:
  add x, 0F
  add eax, x
  add [401000], 5
  add y, " times" // 如果在次之前y="1000" ,则在执行完此指令之后y="1000 times"

AI
--
<Animate Into>
在OllyDbg中执行“自动步入” [Animate into]操作。
例:
  ai

AN 地址
-------
<ANalyze>
从指定处,对代码进行分析。
例:
  an eip // 相当于在OllyDbg中按 Ctrl+A键

AND 目的操作数, 源操作数
-------------
<AND>
源操作数与目的操作数进行逻辑与操作,并将结果保存到到目的操作数中。
例:
  and x, 0F
  and eax, x
  and [401000], 5

ASK 问题
------------
<ASK>
显示一个提示输入框,让用户输入,并将结果保存转保留变量$RESULT中(如果用户按了取消键,则$RESULT=0)。
例:
  ask "Enter new EIP"
  cmp $RESULT, 0
  je cancel_pressed
  mov eip, $RESULT

ASM 地址, 指令
-----------------
<ASseMble>
修改指定地址的指令。
并将修改后的汇编指令长度保存到保留变量$RESULT中
例:
  asm eip, "mov eax, ecx" //将当前指令修改为 mov eax,ecx

AO
--
<Animate Over>
在OllyDbg中执行“自动步过” [Animate over]操作。
例:
  ao

BC 地址
-------
<BreakPoint Clear>
清除指定地址的断点。
例:
  bc 401000
  bc x
  bc eip

BP addr
--------
<BreakPoint>
在指定地址设断点
例:
  bp 401000
  bp x
  bp eip

BPCND 地址, 条件
----------------
<BreakPoint on CoNDition>
在指定地址处,设置条件断点。
例:
  bpcnd 401000, "ECX==1" //当 代码执行到401000且 ecx等于1 时,程序暂停

BPL 地址, 表达式
--------------
<BreakPoint of Logging>
在指定地址处设置记录断点,将表达式的结果记录到记录窗口中。
例:
  bpl 401000, "eax" // 每次执行到401000时,都将eax寄存器的结果记录

BPLCND 地址, 表达式, 条件
-----------------------
<BreakPoint of Logging on CoNDition>
在指定地址处设置记录断点,如果条件为真时,将表达式的结果记录到记录窗口中。
例:
  bplcnd 401000, "eax", "eax > 1" // 如果执行到401000时,满足eax>1,则将eax寄存器的结果记录

BPMC
----
<BreakPoint Memory Clear>
清除内存断点。
例:
  bpmc

BPHWC 地址
----------
<BreakPoint HardWare Clear>
删除指定地址处的硬件断点。
例:
  bphwc 401000 //清除 401000处的断点

BPHWS 地址, 模式
----------------
<BreakPoint HardWare Set>
在指定地址,设置硬件断点。有三种模式: "r" - 读取, "w" - 写入 或者 "x" - 执行.
例:
  bphws 401000, "x" //当执行到此地址时发生中断

BPRM 地址, 大小
---------------
<BreakPoint on Read Memory>
在指定地址处,设置一个内存读取断点。 “大小” 是指内存中的字节大小。
例:
  bprm 401000, FF  //一个字节

BPWM 地址, 大小
---------------
<BreakPoint on Write Memory>
在指定地址处,设置一个内存写入断点。“大小” 是指内存中的字节大小。
例:
  bpwm 401000, FF

CMP 目的操作数, 源操作数
-------------
<CoMPare>
比较 目的操作数与源操作数的大小,和其对应的汇编指令作用相同。
例:
  cmp y, x
  cmp eip, 401000

CMT 地址, 字符串
--------------
<CoMmenT>
在指定地址处,加入注释。
例:
  cmt eip, "这是入口" //当前地址处 加上 “这是入口”的注释

COB
---
<Continue On Breakpoint>
发生中断后,让脚本继续执行(移除EOB指令)
例:
  COB

COE
---
<Continue On Exception>
发生异常后,让脚本继续执行(移除EOE指令)
例:
  COE

DBH
---
<DeBugger Hided>
隐藏调试器
例:
  dbh

DBS
---
<DeBugger Show>
对隐藏的调试器操作进行恢复,不再隐藏。
例:
  dbs

DEC 变量
-------
<DECrement by 1>
对变量进行减一操作
例:
  dec v

DM 地址, 大小, 文件名
-------------------
<Dump Memory>
从指定地址处开始,在内存中提取指定大小的数据,并保存到指定的文件中
例:
  dm 401000, 1F, "c:\dump.bin"

DMA 地址, 大小, 文件名
-------------------
<Dump Memory Appended>
从指定地址处开始,在内存中提取指定大小的数据,并保存到指定的文件中;如果指定文件已存在,则将数据追加到指定文件尾部。
例:
  dma 401000, 1F, "c:\dump.bin"

DPE 文件名, 入口
----------------
<Dump Process with Entry point>
提取执行模块到指定文件中。
“入口”用来设定入口地址。
例:
  dpe "c:\test.exe", eip //入口为当前地址,保存为C盘下test.exe

EOB 标签
---------
<Execution On Breakpoint>
在下次中断发生时,跳转到指定标签处。
例:
  eob SOME_LABEL

EOE 标签
---------
<Execution On Exception>
在下次异常发生时,跳转到指定标签处。
例:
  eoe SOME_LABEL

ESTI
----
<Exception STep Into>
相当于在OllyDbg按 SHIFT-F7。
例:
  esti

ESTO
----
<Exception STep  cOntinue>
相当于在OllyDbg按 SHIFT-F9。
例:
  esto


EVAL
----
<EVALuate>
计算含义变量的表达式。
变量必须已经在脚本中声明。插到字符串中时,要放在用大括号{}中。
结果保存在保留变量$RESULT中Sets the reserved $RESULT variable
例:
  var x
  mov x, 1000
  eval "x的值是 {x}" // 执行后$RESULT为 "x的值是 00001000"

EXEC/ENDE
---------
<EXECute/END of Execute>
对当前调试进程,执行在EXEC和ENDE之间的指令。
有大括号的,会被大括号中的变量的值替代。
例:
// 以下是做移动操作
var x
var y
mov x, "eax"
mov y, "0DEADBEEF"
exec
mov {x}, {y} // mov eax, 0DEADBEEF 将被执行
mov ecx, {x} // mov ecx, eax 将被执行
ende
// 以下是调用调试程序的ExitProcess函数
exec
push 0
call ExitProcess
ende
ret

FILL 地址, 长度, 值
---------------------
<FILL>
从指定地址开始,在内存中填充为指定长度的某个值
例:
fill 401000, 10, 90 // 10字节的 NOP 指令

FIND 地址, 查找内容
---------------
<FIND>
从指定地址开始在内存中查找指定的内容。
如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。
查找的串支持通配符“??”(见下面的例子)。

例:
  find eip, #6A00E8# // 查找一个Call,其的第一个参数为0 (push 0)
  find eip, #6A??E8# // 查找一个带参数的Call

FINDOP 地址, 查找内容
-----------------
<FIND OPcode>
从指定地址开始查找指定一个指令,这个指令是以指定内容为开始的。
如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。
查找的串支持通配符“??”(见下面的例子)。
例:
  findop 401000, #61# // find next POPAD
  findop 401000, #6A??# // find next PUSH of something

译者注:
对比一下FIND 和FINDDOP的区别:
地址          数据                 代码
00401007      B8 3300          MOV     EAX, 33
0040100C      33F6                 XOR     ESI, ESI
find 401007,  #33#    //$RESULT等于401008
finddop 401007, #33#  //$RESULT等于40100C

GN 地址
-------
<Get Name>
获得指定地址的符号名(比如指向API函数)。
符号名将保存到保留变量$RESULT中。如果符号名是一个API函数,则$RESULT_1保存链接库名(比如 kernal32)而 $RESULT_2保存符号名(比如 ExitProcess)。
例:
  gn 401000

GPA 函数名, 动态链接库名
-------------
<Get Procedure  Address>
在指定的动态链接库中,获得指定函数的地址。
如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。
在设置API函数断点时,这个指令非常有效。
例:
  gpa "MessageBoxA", "user32.dll" // 这条指令执行后,$RESULT等于函数MessageBoxA的地址,您可以使用"bp $RESULT"设置断点。

GO 地址
-------
<GO>
执行到指定地址处 (相当于SoftICE中的 G 命令)
例:
  go 401005

GMI 地址, 信息
--------------
<Get Module Info>
获得指定地址所在模块的相关信息。
“信息”可以是模块基地址[MODULEBASE], 模块大小[MODULESIZE], 代码段基地址[CODEBASE] 或者 代码段大小[CODESIZE]
(如果您想在将来的版本中,获得更多的信息,请联系我)。
信息会保存到保留变量$RESULT中 (如果没有找到信息,则$RESULT等于0).
例:
  GMI eip, CODEBASE // 这条指令执行后,$RESULT等于当前所在模块的代码段基地址。

INC 变量
-------
<INCrement by 1>
对变量进行加一操作
例:
  inc v

JA 标签
--------
<Jump if Above>
在cmp命令后使用. 和其对应的汇编指令作用相同.
例:
  ja SOME_LABEL

JAE 标签
---------
<jump if Above or Equal>
cmp. 和其对应的汇编指令作用相同.
例:
  jae SOME_LABEL

JB 标签
--------
<Jump if Below>
在cmp命令后使用.  和其对应的汇编指令作用相同.
例:
  jb SOME_LABEL

JBE 标签
---------
<Jump if Below or Equal>
在cmp命令后使用。和其对应的汇编指令作用相同.
例:
  jbe SOME_LABEL

JE 标签
--------
<Jump if Equal>
在cmp命令后使用.  和其对应的汇编指令作用相同.
例:
  je SOME_LABEL

JMP 标签
---------
<JuMP>
跳转到指定标签.
例:
  jmp SOME_LABEL

JNE 标签
---------
<Jump if Not Equal>
在cmp命令后使用.  和其对应的汇编指令作用相同.
例:
  jne SOME_LABEL

LBL 地址, 字符串
--------------
<LaBel Insert>
在指定地址处插入一个标签
例:
  lbl eip, "NiceJump"

LOG 源操作数
-------
<log>
将源操作数输出到OllyDbg的记录窗口[log window]中。
如果源操作数 是一个字符串常量,则原样记录。
如果源操作数 是一个变量或一个寄存器,则记录名称及其存放的数值
例:
  log "Hello world" // 记录为 "Hello world"
  var x
  mov x, 10
  log x // 记录为 "x = 00000010"

MOV 目的操作数, 源操作数
-------------
<MOVe>
将源操作数移动到目的操作数中。
源操作数可以是一个十六进制序列格式#某个十六进制序列#,例如:#1234#。
提醒:十六进制序列的位长只能是偶数,比如2, 4, 6, 8等等。
例:
  mov x, 0F
  mov y, "Hello world"
  mov eax, ecx
  mov [ecx], #00DEAD00BEEF00#
  mov !CF, 1
  mov !DF, !PF
  mov [403000], "Hello world"

MSG 消息
-----------
<MeSsaGe>
将指定消息,显示到一个对话框中。
例:
  MSG "脚本暂停"

MSGYN message
-----------
<MeSsaGe Yes or No>
将指定消息,显示到一个对话框中,这个对话框有“是”、“否”按钮。
如果点“是”,保留变量 $RESULT 等于1,否则保留变量$RESULT等于0 。
例:
  MSGYN "继续?"

OR 目的操作数, 源操作数
-------------
<OR>
源操作数和目的操作数做逻辑或操作,并将结果保存到到目的操作数中。
例:
  or x, 0F
  or eax, x
  or [401000], 5

PAUSE
-----
<PAUSE>
暂停脚本运行。可以通过插件菜单恢复脚本运行。
例:
  pause

REPL addr, find, repl, len
--------------------------
REPL 地址, 查找字符串, 替换字符串, 长度
--------------------------
<REPLace>
在指定地址开始,在指定长度字节内,用“替换字符串”替换“查找字符串”。
允许使用通配符
例:
  repl eip, #6a00#, #6b00#, 10
  repl eip, #??00#, #??01#, 10
  repl 401000, #41#, #90#, 1F

RET
---
<RETurn>
退出脚本。
例:
  ret

RTR
---
<Run To Return>
相当于在OllyDbg中执行 "Run to return" [Ctrl+F9]操作。
例:
  rtr

RTU
---
<Run To User code>
相当于在OllyDbg中执行 "Run to user code"[Alt+F9] 操作。
例:
  rtu

RUN
---
<RUN>
相当于在OllyDbg中按 F9。
例:
  run

SHL 目的操作数, n
-------------
左移目的操作数,n比特位;并将结果保存到到目的操作数中。
例:
  mov x, 00000010
  shl x, 8 // x is now 00001000

SHR目的操作数, n
-------------
<SHift Right>
右移目的操作数,n 比特位;并将结果保存到到目的操作数中。
例:
  mov x, 00001000
  shr x, 8 // x is now 00000010

STI
---
<STep Into>
相当于在OllyDbg中按 F7,单步步入。
例:
  sti

STO
---
<STep Over>
相当于在OllyDbg中按 F8,单步步过。
例:
  sto


SUB dest, src
-------------
Substracts src from dest and stores result in dest
Example:
  sub x, 0F
  sub eax, x
  sub [401000], 5

TI
--
<Trace Into>
相当于在OllyDbg中执行 "Trace into" 操作。
例:
  ti


TICND cond
----------
<Trace Into Condition>
执行 "Trace into" 操作,直到条件为真时停止。
例:
  ticnd "eip > 40100A" // 当 eip > 40100A 时停止

TO
--
<Trace Over>
相当于在OllyDbg中执行 "Trace over" 操作。
例:
  to

TOCND cond
----------
<Trace Over Condition>
执行 "Trace over" 操作,直到条件为真时停止。
例:
  tocnd "eip > 40100A" // 当 eip > 40100A 时停止

VAR
---
<VARiable>
在脚本中,声明一个变量。
必须在变量使用先声明。
例:
  var x

XOR 目的操作数, 源操作数
-------------
<XOR>
源操作数与目的操作数进行异或操作,并将结果保存到到目的操作数中。
例:
  xor x, 0F
  xor eax, x
  xor [401000], 5


3.2 标签
----------
定义标签,要在标签名后面要加上一个冒号.
例:
  SOME_LABEL:


3.3 注释
------------
您可以使用“//”在任何地方进行注释。
块注释必须另外起一行并以 “/*”做为开始,以“*/”作为结束,“*/”也必须另起一行。

例:
/*
您的注释
*/


3.4 菜单
---------
OllyScript的主菜单包含了下面几项:
- Run script...[运行脚本...]: 用户选择一个脚本,并运行这个脚本。
- Abort [中止]: 中止脚本运行
- Pause [暂停]: 暂停脚本运行
- Resume[恢复]: 恢复脚本运行
- About [关于]: 显示此插件信息

------------------------------

4. 嵌入其他的插件
---------------------------------
您可以在您的插件中调用OllyScrip,并且运行一个脚本。
使用类似于下面的代码进行调用:

HMODULE hMod = GetModuleHandle("OllyScript.dll");
if(hMod) // 检测是否被其他插件加载
{
  // 获得输出函数地址
  int (*pFunc)(char*) = (int (*)(char*)) GetProcAddress(hMod, "ExecuteScript");
  if(pFunc) // 检查是否获得输出函数
    pFunc("myscript.txt"); // 执行输出函数
}

------------------------------


点评

点赞,这个不错。  发表于 2017-7-14 07:15

免费评分

参与人数 11吾爱币 +3 热心值 +11 收起 理由
wind706 + 1 + 1 已答复!
菜鸟也想飞 + 1 + 1 谢谢@Thanks!
XXXXXXXXXXXXXXX + 1 + 1 谢谢,支持
herculesrance + 1 热心回复!
yunhsk + 1 谢谢@Thanks!
dtkissme + 1 谢谢@Thanks!
rooot + 1 没有理由不顶啊
kanaing + 1 谢谢@Thanks!
my1229 + 1 不错的工具,下载并支持楼主!
我的爱是你 + 1 不错的东西
syy6542320 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

利赦 发表于 2015-10-21 12:13
这个感觉不错,顶顶。
a8188578 发表于 2015-10-21 12:25
anyio 发表于 2015-10-21 12:28
njzycwc 发表于 2015-10-21 12:33
如此强悍啊 收藏了
cxj98 发表于 2015-10-21 12:36
高大上的软件,确实要感谢。。
动物凶猛 发表于 2015-10-21 12:56
真心牛逼啊
netle8 发表于 2015-10-21 13:26
看样子不错,下载了
caleb110 发表于 2015-10-21 13:26
多谢分享,下载啦!
my1229 发表于 2015-10-21 14:28
不错的工具,下载并支持楼主!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 20:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表