作 者: hnhuqiong
ODbgScript 入门系列(四) ODbgScript的 注意事项和新手使用技巧
ODbgScript还在不断的完善中,它是一个脚本解释器,那么它需要把用户的脚本命令一一解释出来并执行,你必须严格复合它的命令规范它才能解释你的命令.
ODbgScript程序是这样定义的:
命令 目的操作数,源操作数 [,附加操作数]
命令:必须是ODbgScript能识别的命令,我前3章已经讲解了,不过今后命令不断的扩展中
操作数:
HEX : 既没有前缀也没有后缀
DEC : 在后缀中加点.
VAR : 变量,这个变量必须在使用前用Var进行定义
32REG: 32位寄存器 (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP)
16REG: 16位寄存器 (AX, BX, CX, DX, SI, DI, BP, SP)
8REG: 8位的寄存器(AL, AH, BH,BL,CH,CL, DL, DH)
[ ] : 被中括号括起来的内存地址 而[]中可以是数值,寄存器,变量
FLG :一个标志位,带有感叹号前缀(!CF, !PF, !AF, !ZF, !SF, !DF, !OF)
## :HEX的数据系列
"" :字符串系列
?? :包含??的HEX系列或者字符串系列,代表的是可以代表任意数
{} :过程计算符,中间可以放的是变量
: :标号,跟在你命令的名字后面,代表对程序分段
本来1,47版可以支持+-*/&|^><的操作数,这个纯粹是C爱好者的一相情愿,也让脚本变得可读性和通用性大大下降,我准备在后续版本中拿掉这个功能.看大家的意愿吧.
这里以看雪的<脱壳基础知识入门(2006年版)>为蓝本来讲解,这样便于新手对照来学习:
<第一课PE格式章节,第三课 认识壳章节>
我们知道一般能玩PE文件的大部分是用正常的编程语言才能取PE的东西,我们用脚本来完整的实现一次怎么知道PE信息.
(GMI将在下一个版本发布中增加大量的可获取PE信息的操作数,基本可以囊括整个PE结构的基本信息.这个命令不光查exe的信息,同样可以查DLL的详细见发布版readme)
脚本一:取得有用的PE信息
//===============================================
var modulebase
var DOSstub
var PEheard
var codebase
var codesize
var ImportAddressTable
var IATsize
var temp
var tmp
var OrignalFirstThunk
var TimeDateStamp
var ForwardChain
var Allname
var FirstName
var FirstThunk
var Namesize
//获得基本地址
getbaseinfo:
gmi eip,MODULEBASE
mov modulebase,$RESULT
gmi eip,CODEBASE
mov codebase,$RESULT
gmi eip,CODESIZE
mov codesize,$RESULT
//寻找DOS头
mov DOSstub,[modulebase],2 //只取2个字节,这个小技巧很多大侠都不知道 :)
cmp DOSstub,5a4d //"MZ"
jne end
//寻找PE头地址
find modulebase,#50450000# // "PE"
mov PEheard,$RESULT
//寻找IAT相关数据
mov temp,PEheard
add temp,80 //PE文件头偏移80处放的就是IAT
mov temp,[temp]
add temp,modulebase
mov ImportAddressTable,temp //取得IAT的地址
mov temp,PEheard
add temp,84 //PE文件头偏移84处放的就是IAT大小
mov temp,[temp]
mov IATsize,temp //取得IAT大小
//你将看见第一个DLL的API
mov temp,[ImportAddressTable+C]
add temp,modulebase
find temp,#0000#
sub $RESULT,temp
mov Namesize,$RESULT //求得ALlName的大小
readstr [temp],Namesize //读出ALLName
mov AllName,$RESULT
find temp,#00#
sub $RESULT,temp
mov Namesize,$RESULT //求得第一个Name的大小
readstr [temp],Namesize //读出Name
mov Name,$RESULT
mov temp,[ImportAddressTable+10]
mov FirstThunk,[temp+modulebase] //求出FirstThunk
gn FirstThunk //查询FirstThunk的符号名
mov tmp,$RESULT
//在调试文件所在目录里向PE.txt文件写信息
eval "modulebase={modulebase}"
wrt "PE.txt",$RESULT
eval "codebase={codebase}"
wrta "PE.txt",$RESULT
eval "codesize={codesize}"
wrta "PE.txt",$RESULT
eval "ImportAddressTable={ImportAddressTable}"
wrta "PE.txt",$RESULT
eval "IATsize={IATsize}"
wrta "PE.txt",$RESULT
eval "AllName={AllName}"
wrta "PE.txt",$RESULT
eval "Name={Name}"
wrta "PE.txt",$RESULT
eval "FirstThunk={FirstThunk}={tmp}"
wrta "PE.txt",$RESULT
end:
ret
//==================================================================
呵呵,我写VC同样的程序还没有它清晰好读,到处是指针.你看这个多清爽!!!
(注意:这个版本里面加了命令readstr,请下载最新ODbgScript)
| 另类破解鸽子连接密码 | 03-21 | |
| 教菜鸟写注册机 | 12-27 | |
| QQ聊天记录察看器 5.2算法分析 | 12-04 | |
| 如何汉化一个软件 | 12-02 | |
| 扭曲变换加密 【目前防止软件被破 | 11-02 | |
| 破解利器Olldbg脚本教学(二)- | 10-31 | |
| 破解利器Olldbg脚本教学(一)- | 10-30 | |
| 破解|利器|ollydbg|教学|Run tra | 10-28 | |
| 破解WebEasyMail v3.6.2.1 企业版 | 10-24 | |
| 破解利器OllyDBG入门系列(五)- | 10-18 | |
| 破解利器OllyDBG入门系列(四)- | 10-17 | |
| 揭开高级游戏黑客的面纱,轻松打 | 10-17 | |