也谈写OllyScript脚本之Career和心声 :: 环球安全联盟[G.S.U]

来源: BlogBus 原始链接: http://blogbus.com:80/blogbus/blog/diary.php?diaryid=456225 存档链接: https://web.archive.org/web/20041027220918id_/http://blogbus.com:80/blogbus/blog/diary.php?diaryid=456225


总结windows下堆溢出的三种利用方式 在Win2000-XP上安静地替换正在使用的系统文件 在NT系列操作系统里让自己“消失” 用访问控制列表实现网络单向访问 用.NET创建Windows服务 一种小堆(heap)溢出的另类利用方法 一点ASP问题、差错和个人心得 通过限制防火墙端口防止黑客非法入侵 书写NDIS过滤钩子驱动实现ip包过滤 使用C#控制远程计算机的服务 搜毒网 黑客基地 天天安全网 CSDN.NET CSDN开发者资料库 Cisco及网络技术 赛迪网 中国IT认证实验室 中国协议分析网

邪恶八进制 安全焦点 绿盟科技 看雪学院论坛 北美网络安全工程师 黄嘴企鹅 Linux伊甸园 编程爱好者 CVC病毒论坛 菊花论坛 DFCG官方论坛 共创论坛

TOM.COM 太平洋电脑网 Discloser 小熊在线论坛 金山软件论坛 幻影时空论坛

lichdr <<<循环冗余校验CRC的算法分析和程序实现 | 首页 | Hook 系统服务隐藏端口>>> 也谈写OllyScript脚本之Career和心声 时间: 2004-10-23 近来,喜欢上写OllyScript脚本,又爱又恨。脚本写得比较烂和慢,原因是汇编命令没认识几个,逻辑思维差,不过认识的还能在OllyScript脚本找到,OllyScript是那么让人和爱可亲,却又是(一般地说)比较难灵活运用,运行还欠些好的透明度。个人认为,脚本和我们写程序(我可没写过真正的程序)一样,先是你有了主题(target:目标),然后用你认为可行的方式进行组织“框架”,(用OS的“法规”)填饱草图,一番潇洒的“文笔”(写命令)后,马上就要进入天堂和地狱的测试考验。如果你是“算死草”--逻辑思维很强的老手,多数直接奔向天堂;但地狱又经常向我等傻瓜招手,屡屡折磨我们。 以下是我写脚本的 Career 和心声(还很烂): 1.注意变量的声明,最好写在一起声明(在开头,同在一个脚本里的都是全局的了),以便报错时,能快速查找(虽然脚本有报错行,但我相信你不想去拉滚动条) 2.弄清变量的真正含义(声明后在赋值后才能确定,有字符、16进制数值串、32位地址或数值): for example: var addr mov addr,[esp+10]//不支持间接计算,这样脚本不会报错,但你一运行就知利害 var addr var code mov addr,401000 //缺少这行赋值,addr是0,会带来非法操作 mov addr,#9876543210ABCDEF# // 这条本是想存放16进制串到addr,应该这样 mov [addr],#9876543210ABCDEF# ,且addr应是个有效地址 3.注意命令作用的变更: find类命令应该用得比较多吧 for example: find eip,#ABCDEF# // 0.85版是从eip所在的内存块image地址开始搜索 //0.92版是从eip所指地址开始搜索 findop //此命令,是查找真正的命令--一眼就能看到的,如你要找的命令附近有花指令的,使用是找不到的。 4.尽量写成模块功能(精简为上),以便写注释、移植、(用#inc命令)组装和查找错误(第1个运行的脚本定义的变量是全局的,它到第2、3..脚本有效,全局变量值改变后可返回到上一脚本,与全局变量同名变量重新声明无效),包含脚本方面的作用我还在糊涂中。 for example: //下面的功能简单:不难看出是交换a、b两个数 var a var b var c mov a,12 mov b,10 mov c,a mov a,b mov b,c log a //记录交换后的结果 log b ret 遗憾的是大家都比较少写模块功能脚本,缺乏加强交流测试认证(可能功能细小,大家怕写了没人理会),只想写一气呵成、一起包办的专门版本脚本(开始我都认为该这样写)--有的显得相当长篇,难以理解,方法各有特点,一般只有作者本人可以读懂,这样长让作者写注释都要瞄来瞄去,心情欠佳(比如:对付某版本某加壳,作者都希望脚本简短,可多数事与愿为)就不起劲;模块化(一定的功能)可能还未被人重视的原故吧,我个人觉得应该多向这方面考虑出发写一下,好比C语言,就是个大家都普遍了解的例子,模块化一些功能--贵精求精,使之标准化==Public,容易移植,往后,我们要写起脚本来就轻松得多,因为功能已经得到测试认可,只需利用在其模块上修改一些变量或参数等,用#inc或粘贴在适当位置作连接就可事半功倍.... 5.在循环设计和判断方面上,应该多考虑错误发生的可能性,调试或运行时可在其中放入pause和log somthing 或step以便监察运行当中的闪失漏洞。比如:我所遇到过的某变量a是的地址变量,在循环中突然变成了0,如果它是参与地址访问,哈哈,后果... 6.认真检查变量对象的名称是否误写了,比如:esp写成了ebp,运行的话,脚本是无法为你检出错误的,因为这些是不需要声明的。 7.我不是程序员,也不是专家,仅是a boy,所说的都是错误中的心声,希望大家都来分享你自己的脚本“心声”,多多少少总会有的,不管它是喜与忧,是不懂还是半懂,只有加强交流和实践,脚本编写方面总会取得一定的成果的。大家很少谈写脚本的心得,猜测原因大概是写脚本的一般都不是真正的程序员(程序员引以为傲的是自己能写程序搞顶吧)或者认为提出要谈论的就一定是高手,然而你写出的功能脚本也有可能是不太实用或实际的,但我认为你愿意跟别人交流已经很不错了--即使那是事实。写脚本比较花时间(有时一个脚本花上好几天,主要是调试)--首先你要取得调试方面的收获,然后又要花尽脑汁去描绘脚本,测试,调试修复,再测试……直到成功,写完后发布,又要经历同样的测试,不难想象,他们(包括我)害羞、没空、希望交流又没人组织和提供交流的固定地点……我可是那一类不想做组织和leader的家伙,当然自己也没什么本事嘛!希望有位中国同志站出来...呵呵,鼓掌中……推举一下loveboom怎么样……… last: 我也有写脚本的问题,好些命令也没机会实践: 象是 0.92的<EXECute/END>对当前调试进程,执行在EXEC和ENDE之间的指令。 exec push 0 call ExitProcess ret ende 我没有执行成功,理解能力差吧,也不知它如何使其能够执行,call ExitProcess 这个OS能理解翻译吗?还有的是call函数一般都要用到句柄参数等,这个命令的执行缺乏透明度,里面干了什么不得而知,有朋友可告知其运用的实例吗? 呵呵,看完了,我可不是练打字呀,希望能大家发动互相交流。如果脚本写得好的话,会有一些惊喜的亮点,很多Ollydbg的其它插件都可以隐居山林了呀…… 顺便来一个脚本(不知如何): // 抵达aspr首次堆栈出现硬盘指纹 //作用:如题,方便大家在aspr定位,比如填写注册信息或什么!欢迎大家测试反馈! var drc var test var zero var count mov count,0 dbh eob break loop: esto inc count mov drc,esp add drc,28 mov zero,drc sub zero,4 mov zero,[zero] mov drc,[drc] cmp zero,0 jne loop cmp drc,0 je loop mov test,drc and test,FF000000 cmp test,0 jne loop final: log eip log drc sub drc,4 cmp [drc],0C jne loop log "下面count是使用脚本以来的异常统计:" log count cmt eip,"祝贺,你成功抵达首次堆栈出现硬盘指纹的异常!" ret break: msgyn "现在脚本发现不明的断点中断,请选择是否继续Pass异常?Y/N" cmp $RESULT,0 je end jmp loop end: msg "你选择了结束脚本,Bye Bye!" ret 孤光剑隐 发表于 2004-10-23 10:13 引用Trackback(0) | 编辑 评论 发表评论