欢迎来到天天文库
浏览记录
ID:24652213
大小:53.00 KB
页数:4页
时间:2018-11-15
《科普:分析一个flashexploit的样本》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、科普:分析一个flashexploit的样本~教育资源库 有不少朋友一直怂恿我写这么一个马后炮分析的文章,也拖了好久,现在放出来了。 首先感谢MarkDoat MarkDoeLabelData86 DefineBits6 DOABC82 SHOE1 其中Sing中提到的算法: #defineENC_HIGH_BIT0x80 #defineENC_BYTE_MASK0x7f unsignedchartemp=iENC_BYTE_MASK; i=i>>7; if(i>0) temp
2、=ENC_HIGH_BIT;
3、 解码算法: #defineENC_BITSPERBYTE7 #defineENC_BYTEMASK0x7f #defineENC_HIGHBIT0x80 do { if(shift>4*ENC_BITSPERBYTE) break; temp=readUInt8(f); result
4、=(ENC_BYTEMASKtemp)<<shift; shift+=ENC_BITSPERBYTE; }p)); 文件中的99be8ea008就是一个encoded的整数值,decode以后获得的值为: 0x08a08eb4是经
5、过计算后的OpcodeMark的位置,根据MarkDoask_address+(marker_byte–(marker_byte%4))+4 scene_count=(0x80000000
6、(address/12)) 再次还原后得到的值为0x302b3928,对应flash.ocx中Marker值0xf8的索引位置。 DoABC位于文件偏移的0x463处,其中修改过的ABC(ActionByteCode)在0x5b3处。 这段ABC符合MarkDoeLabelData结构时候存在一个空指针引用的漏洞,malloc()分配内存失败返回
7、一个空指针,紧接着又会往这个指针+offset的地方写上任意的2字节的值,offset和写入的值都是可控,MarkDoarker值(如上图所示意)就可以传递一串任意的指令来达到修改栈上数据的目的。 在这里可能很多朋友会产生疑问,不用0xf8不一样能传递这些指令么,的确是能够传递,但是AVM2首先会调用alloca_probe在stack上分配一个空间来作为AVM2的虚拟栈,也就是说所有的指令都在这个栈上进行处理从而不会干扰程序原本的栈,例如get_local指令,这个指令只有一个offset的参数,而AVM2是这样解析这条指令,从虚拟栈的基地址+offs
8、et*4的地12下一页友情提醒:,特别!方取出一个des: HookNtCreateProcess/Ntemory绕过第三方保护软件针对这2个API的保护,修复CreateProcessInternalpPathA()获取临时文件目录,调用DeleteFile删除orz.exe,并且下载新的木马文件保存为orz.exe然后调用CreateProcessInternalA执行它,shellcode这部分已经有朋友发了详细的分析文章,大家可以参靠的那篇。 还有一些通用性和稳定性的在这个exploit未被考虑的,比如flash的CWS功能,以及在shel
9、lcode中恢复进程的上下文等。上一页12友情提醒:,特别!
此文档下载收益归作者所有