黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 软件破解 >> 文章正文
[图文]破解利器Olldbg脚本教学(四)-ODbgScript的注意事项和使用技巧
        ★★★★★
破解利器Olldbg脚本教学(四)-ODbgScript的注意事项和使用技巧
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-11-7

作 者: 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)

[1] [2] 下一页  

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886