首页
社区
课程
招聘
[原创]不懂算法第三阶段第一题
发表于: 2007-9-19 07:20 25072

[原创]不懂算法第三阶段第一题

2007-9-19 07:20
25072
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 202
活跃值: (77)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
时间有点来不及,简单说一下病毒分析吧

病毒创建一个Event确保主线程只有一个,其实主线程就是进入一个irc聊天室,接受控制
如果要清除这个病毒,主要分析感染模块,现在只分析win2K以上操作系统
win9x系统就不分析了,win98是利用vxd加载到ring0的
病毒第一次启动的时候hook每个进程的
"NtCreateFile",
"NtOpenFile",
"NtCreateProcess",
"NtCreateProcessEx",
"NtCreateUserProcess"
这5个api
当调用"NtCreateFile","NtOpenFile",的时候病毒获取控制权感染文件
当调用"NtCreateProcess","NtCreateProcessEx","NtCreateUserProcess"的时候病毒控制新进程,并hook新进程的这个5个api
所以要杀毒的话先要还原被hook的api
感染模块只感染exe和scr后缀的文件,并且
WINC,WCUN,WC32,PSTO开头的文件也不感染,感染过的文件随机加上感染标志
如果加上感染标志就不会继续感染了,感染标志是love和evol
感染方式就是随机一个key,xor或者sub主模块,解密模块被随机插入垃圾代码,和随机的寄存器变形,基本使得通过特征码辩认失败,修改oep,ep指向自己的头部,代码就是加在原始文件的尾部,修改最后一个文件段,增加自身长度。
查杀难度在于重复感染和随机变形
虽然代码长度会随着解密段的大小变化,但是变化范围不大,所以整个代码的长度也比较固定
所以程序的ep如果距离最后段末尾0x8000的话,基本是这个病毒的可能性就**了
然后反汇编解密代码,病毒程序的主代码段是基本不变化的,而且变形后的主代码段是紧跟着一个汇编指令RET,我们可以遍历所有RET,尝试用RET后面第二个字符解密后面代码段,对比是否是病毒代码,如果是的话从其中取出oep的相对偏移,计算出oep
计算出病毒体的大小,从文件中去除,ep改成oep,然后做一些响应的修复

我感觉自己分析的好像不完全,程序也是一个晚上写的,估计要排倒数了
2007-9-19 07:40
0
游客
登录 | 注册 方可回帖
返回
//