加载中…
个人资料
elecs
elecs
  • 博客等级:
  • 博客积分:0
  • 博客访问:53,657
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

OD脚本调试

(2018-05-23 09:44:08)
标签:

od脚本调试

分类: 信息安全
在逆向程序时,往往会遇到比较复杂的算法,除了一句句跟踪调试外,还有什么方法可以快速破解呢?当然有了,这就是“OD脚本调试”。

下面简单举个例子,譬如:看雪2017CTF年中赛第7题。用户输入20个字符,程序依照算法算出对应结果。如果计算出的结果与特定数值相等,则返回成功提示。其中算法逻辑比较复杂,一步步跟踪十分烦躁的。而且,发现输入字符相同,则输出结果也相同,因此,可以用OD脚本爆破出符合条件的输入。

可以将此脚本保存为run.txt
var patch
var gettext
var aftercalc

var inputbuf
var calcbuf
var keybuf
var inputoffset
var calcoffset
var calcdowrd
var keydowrd
var testchar

mov patch,40e3eb
mov gettext,4104fc
mov aftercalc,411a31
mov inputoffset, 0
mov calcoffset, 0
mov testchar, 10
sub [patch],1 //patch
go patch

test:
go gettext
mov inputbuf,[esp+8]
sto
add inputbuf, inputoffset
fill inputbuf, 1, testchar

go aftercalc
mov calcbuf,[ebp-48]
add calcbuf, calcoffset
mov keybuf,[esi+18]
add keybuf, calcoffset
mov calcdowrd, [calcbuf]
mov keydowrd, [keybuf]
cmp keydowrd, calcdowrd

je testok

add testchar, 1
cmp testchar, 9f
ja loopinput
jmp test
testok:
log "find"
log inputoffset
log testchar
add testchar, 1
jmp test
loopinput:
mov testchar, 10
add inputoffset, 1
add calcoffset, 4

cmp inputoffset, 14
ja end
jmp test

end:
log "end" 

这段脚本就是不断将用户输入的SN[i]替换成0x10-0x9f,把SN[i]的计算结果与特定数值比对,如果相等则将SN[i]数值记录下来,循环往复直至比较完20位输入。

程序运行后,OD附加,在0040E3EB设置断点,运行到此。(备注:运行到断点处后,一定要删除断点,要不影响之后的运行。

选择插件OdbgScript--> 脚本运行窗口
OD脚本调试

在脚本运行窗口,右键点击“载入脚本”,打开事先写好的OD脚本(譬如run.txt)。脚本显示在窗口中,未执行的语句显示为黑色,已执行过的语句显示为红色。
OD脚本调试

可以按Tab单步执行,也可用F2设置断点等,与普通程序调试类似。执行过程如下图所示
OD脚本调试

如果脚本的执行结果以log呈现,则打开OD的Log窗口即可。
OD脚本调试

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有