词条 | Worm.Win32. RavMon |
释义 | 该病毒属蠕虫类,病毒作者通过python2exe来编译的病毒,python2exe使用python的modualfinder来调入要运行的scripts寻找并运行它所需要的所有python模块和扩展模块。病毒运行后会复制原病毒体到%windir%\\RavMon.exe,而后调用注册表相关函数,将该病毒副本添加到启动项,达到随系统启动的目的。 概述病毒名称:Worm.Win32. RavMon 病毒类型:蠕虫 危害等级:中 文件长度:3,513,806 字节 文件MD5:5D8CC0712927E07A1BAB416493F43036 公开范围:完全公开 感染系统:windows 98 及以上版本 开发工具:python 病毒描述病毒还会尝试收集感染主机的信息,如:感染的主机名,当前windows版本等。如果当前系统为xp,则病毒还会通过运行“netsh firewall delete portopening TCP”来删除防火墙端口配置协议中的传输控制协议,进而降低系统的安全性。病毒尝试连接网络,获取一个shell,通过运行rundll32.exe并加载shdocvw.dll来打开一个URL地址。病毒还具有结束进程功能。此病毒通过U盘和移动设备来进行传播。 行为分析1、HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\RavAV 键值: 字串: "C:\\WINNT\\RavMon.exe" 2、病毒尝试连接网络,尝试连接下地址: 3、开启本机一个随机端口并发送获得的计算机信息。如:计算机名、端口、版本信息等。 4、猜测该病毒的某些功能对应的python模块文件名: 终止进程对应的python模块名为:killProcName.pyo url地址对应的python模块名为: urllib.pyo、urlparse.pyo 获取目标主机信息对应的python模块名为:os.pyo http相关的python模块名为:httplib.pyo 删除cookiess对应的python模块名为:cookiess.pyo base64/quopri编码功能对应的python模块名为:base64.pyo cmd功能对应的python模块名为:cmd.pyo 修改注册表对应的python模块名为:copy_reg.pyo ftp相关的python模块名为:ftplib.pyo 调用socket相关的python模块名为:socket.pyo usb相关的python模块名为:usb.pyo -------------------------------------------------------------------------------- 代码分析python2exe使用python的modualfinder来调入要运行的scripts并且寻找运行它所需要的所有python模块和扩展模块。 纯python的模块在临时目录里被编译成.pyc(debug)和.pyo(optimized)的文件。编译后的扩展模块pyd文件也能找到。 最后生成一个与zip兼容的包,包含一个dependency目录和你的script,这个包最后提供给一个py2exe自带的python解释器。 运行生成的程序,将建立一个重要的关联,这样在script开始运行的时候,必要的模块可以从包中的正确地import。 由于扩展模块不能从zip包中包含或import,它们以被单读提供。放在dist\\myscript目录下。 解码的过程: main, winmain调用start函数。 start: (1) 获得目录名和文件名(GetModuleFileName) (2) 取出执行文件的数据(MapExistingFile) (3) 获得script的信息(GetScriptInfo) (4) 用_putenv设置用户的环境变量(PYTHONHOME,PYTHONPATH,PYTHONOPTIMIZE,PYTHONDEBUG等) (5) 将scriptinfo种的信息来设置python内部变量(Py_NoSiteFlag, Py_VerboseFlag等) (6) Py_Initialize() (7) PySys_SetArgv(argc, argv) (8) 调用BuildToc获得toc(dict对象) (9) 调用PyRun_SimpleString执行"import sys; sys.path=[r'%s']" (10)调用Load_Module调入imputil模块,调用PyRun_SimpleString执行"import imputil" (11)Py_InitModule("__main__", methods); (12)解出Scripts\\\\并运行它 (13)解出Scripts\\\\__main__.py并运行它(这里的__main__.py就是要打包的python文件,被重命名为__main__.py) source\\start.c: 1. MapExistingFile:用文件映像的方法打开文件,读处理里面的内容。 2. GetScriptInfo: 从archive.h中定义的(central directory record)格式的数据中取出script info(optimize, verbose, tag)到全局变量p_script_info中。 3. BuildToc:构造一个新的dict对象,在arch文件中做一个循环,取出所有的name放入dict中(PyDict_SetItem),其中调用了fixpath来解决"\\"和"/"的统一问题,并将dict返回(注意,name好像是不带后缀的)。 4. extract_data: 使用zlib.h中定义的zstream结构,从archive结构中获得指定的长度的数据 5. GetContentsFromOffset:计算位置,调用extract获得数据。 6. GetContents:利用PyDict_GetItemString从toc中得到指定的名字的文件的位置,调用GetContentsFromOffset获得数据。 7. Load_Module:检查p_script_info->optimize,判断文件名的后缀是".pyo"还是".pyc",调用GetContents从数据中调出这个文件。 8. get_code:指定名字,获得这个文件的内容:GetContents + PyString_FromString。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。