COM汇编程序编写和转换
神奇的恶意代码分析实验(一)
Powered By BrotherJIE
因为万恶之源要求在其他专业里选专业基础课和专业课(真▪强化班学生),而这学期开的课里面,能选的计算机方向的课程1就只剩信安的恶意代码分析和防治了。开学老师就表示该课十分硬核,开课时七八十人选课,基本会有一半左右人退课2,首先得了解一些OS和汇编这方面的知识,还要接触PE文件格式这种。第一次环境配置和测试实验就过于趣味性。
此时此刻的心情↓↓↓
第一次实验的内容看上去很简单:安装虚拟机→配置好XP和DOS虚拟机→安装MASM2015实验环境(XP)和MASM(DOS)→编写一个简单汇编程序测试一哈→用转换程序将EXE文件转换为COM文件3。
果然前四步都巨无敌简单,测试汇编程序的话,还可以顺手复用一波当年学微机写过的“史诗级”中断子程序的代码,岂不妙哉!当然安装MS-DOS的时候会有点小坑,按教程里面来按部就班就很容易解决啦!
但白熊眉头一皱发现显然事情并没有那么简单,从网上随手爬下来一个可以转换文件格式的EXE2COM程序,放到两个系统里转换,结果。。。WTF?!他竟然会报错,但其实原来程序运行的都稳如老狗了。EMMM,错误提示:exe2com: EXE has relocatable items, can’t convert。
作为百度和Google的“资深战略合作伙伴”(危),这时候当然需要亲自动手查资料了。于是乎求得一些EXE文件头部的格式,并偶遇EXE文件和COM文件的区别,发现COM文件是极为简单而神秘的一种文件格式,IP指针只能从100H处开始执行。整个文件一个段这种,而且真的非常纯净!!只有用于执行的二进制代码和数据(纯天然但不一定无公害),用来管理的PSP块都是DOS系统给他生成的(XP虚拟机可以运行是因为32位系统可以兼容16位汇编程序)
于是乎又找来一段最为简单滴COM文件DEMO,结果发现编译还能出错(main块符号不匹配),果然是网上特别是CSDN这种爬的各种代码,十有八九都是不靠谱的,只能努力回忆和翻阅微机学的可怜的汇编基础来试图借助外力进行人脑DEBUG,这才发现这货竟然没有结束符号main endp?好在补上之后终于编译成功并正常运行了,否则我的电脑屏幕很有可能就要遭殃了呢。
到这里事情基本上已经接近尾声了,但是还没完呢,转换的时候还是会发出警告的WARNING!提示初始的IP指针不是100H???那我那个ORG 100H,把地址相对偏移的位置都设置成100H了竟然还敢说我没做好?!只能充分发掘自己的数据挖掘潜力。。。好家伙,我直接好家伙,我把EXE2COM的源代码都搬出来了!!其实比下载的二进制版本还要更新一点,而且编译下来也是能成功用的。充分发挥“代码审查”的能力,Ctrl+F万能搜索大法吼啊!啪的一下就找到了,很快哦!原来是这样!,用DEBUG工具看,初始IP确实不是100H,而是神秘的0H,而且一直在划水???自增直到IP到了100H才开始真的工作。据网上说这是因为EXE文件如果没有特殊指定的话那就是从0H开始执行的!终于明白辽!
1 | /* Check header; to be convertible, must have: EXE转换COM的条件(头部) |
老师的评价:(斜眼笑)
对作业中的一些问题有较为深入的分析,建议大家阅读