QQ木马病毒查杀反病毒查杀

计算机已经进入我们的生活,我们的生活,感觉已经离不开计算机安全的计算机和网络,today Xiaobian推荐一些计算机病毒和木马的相关文章,欢迎围观参考,想了解更多,请继续关注。


一般来说,病毒分析不涉及算法问题。如果我们要分析一个算法(如我先前CM4注册机制的分析),我们需要更多地关注于过程和逻辑程序,一般不深入到通话的具体内容。病毒分析,但是,往往需要了解不同称呼的含义,从而使清除病毒的行为。因此,本文第一部分对这些调用分析。第二部分论述了进程的实现。


逆向分析


在这里,我们跳过程序的初始化部分,到达第一个API函数的位置:


我们可以直接看到的是getmodulefilename第一API函数,这是用来获取当前进程已经加载的模块文件的完整路径。该模块必须由当前进程加载。这个函数的返回值是文件路径的长度,这是保存在EAX,2B,即路径长度是2B的人物。你可以看到返回的路径,路径保存在PathBuffer在跑道上,地址追踪:


可以看到程序正确地获得了当前文件的地址,然后继续分析下一个API函数:


这里是ShellExecute函数,其功能是运行一个外部程序(或者打开一个已注册的文件,打开一个目录,打印文件等),并控制外部程序。具体到这个程序,ShellExecute将运行explorer.exe程序打开D:;事实上,它是使用程序经理打开d盘根目录。但执行这个API函数是有条件的。它需要根据第二行调用语句的结果来判断。要进入这个电话要满足什么样的条件执行ShellExecute。


进入oso.00403c48功能


该程序将比较EAX和EDX的内容,其中保存EAX字符串是我们用来从getmodulefilename当前文件的路径,但它只是转换为大写字符,EDX保持在D盘根目录下的oso.exe文件路径。两明显不同。因此条件跳转语句高亮黄色是不成立的,程序将继续执行:


需要说明的是,由于病毒是用delphi写的,4个字节的内容采取了字符串的首地址后减去4的字符串的长度。所以代码的前两行平均得到两路径的字符数,然后减去它比较。很明显,在当前路径的字符数量大,所以黄色高亮条件跳转设置的oso.00403c6b位置。


这仍然是人物的比较。由于两个不相等,最后一句是成立的oso.00403cd1位置。


这里是字母,不等于,所以条件跳转成立,函数被执行。基于以上分析,这个函数的功能是确定当前执行的文件是否位于D盘的根目录中。如果是这样的话,ShellExecute函数的执行,否则,它会跳过这一功能。由于我们的程序在桌面上,它不执行ShellExecute函数。


接下来,程序会继续判断当前程序位于E、目录F,G,H和我,如果不是,则不执行相应的ShellExecute函数。


然后程序调用的函数称为oso.004050f0进入其内部的分析:


可见,病毒程序调用GetSystemDirectory函数获取系统目录。一般来说,恶意程序的目的使用这个功能是复制自身到系统目录来迷惑用户(见001章对反病毒的攻击和防御:研究自我复制和自我缺失后)。,病毒程序将字符severe.exe和系统目录的字符串,和新路径是病毒程序需要隐藏的位置。


然后你可以看到CreateFile函数:


但这个CreateFile函数的执行是有条件的,它取决于第一行代码的调用的返回值,调用分析,你可以找到:


程序调用FindFirstFile函数是否存在系统目录中的severe.exe文件,如果没有(返回值1),它不执行CreateFile函数。因此,对CreateFile函数的功能在这里并不是要创建一个文件,但打开文件。接下来是文件复制操作:


之后,一系列的文件拷贝,与病毒本身tfidma.exe重命名并复制到系统目录下,并更名为conime.exe并复制到系统目录下的驱动程序的文件夹。类似的操作不再描述。然后程序调用ShellExecute函数重新执行程序所以在资源管理器;;会有如severe.exe conime.exe进程,并tfidma.exe.it,可以说,在这个时候,我们的电脑已经中病毒的。接下来我们将遇到的线程创建函数:


CreateThread函数通常用于睡眠或WaitForSingleObject函数相结合,因为每个线程都有自己的CPU时间片。当主线程创建一个新线程,CPU时间片还没有完成,它可以继续执行。如果主线程的代码是非常小的,然后在指定的CPU时间片的CPU主线程,主线程的结束意味着结束,所以在这种情况下,我们创造了不执行的所有线程。所以我们要让主线程等待我们创建的线程,你需要使用睡眠或该函数。这个程序使用的是睡眠功能(等待1.3秒)。


根据OD的解析CreateThread函数,它是已知的,线程调用这个函数的oso.00404958.the分析功能可以知道它主要创建并执行一个名为批处理文件;hx1.bat该批处理的内容:


主要功能是修改系统时间,测试本地网络系统并删除自己,这是病毒的常见分析部分。


三。过程守护技术原理


这个过程的程序首先应该从中国黑客病毒(蠕虫。runouce)它首创三线的结构。三线程被创建更好的保护程序本身被关闭和删除。我们可以把我们要在主线程中执行代码,然后生成两个辅助线程,其功能是保护程序,防止程序被关闭或删除用户。在这里,我们把我们的可执行文件的过程为基础的过程。两个辅助线程互相监视实时监控的对象,如果是封闭的,进程或线程创建。例如,一个病毒程序可以选择explorer.exe,以上为远程过程的居民。如果用户知道远程线程的驻留者是资源管理器,它将打开任务管理器来完成浏览器。然后我们将把远程线程注入的任务管理器。换句话说,只要浏览器或任务管理器的存在,它是不可能结束的主要过程。如果你有其他的工具来结束进程,你可以把它关掉。只要资源管理器和任务管理器不存在,就没有居民来维护远程进程。然而,要发现我们选择的远程进程是随机的,还是病毒自身造成的,并不容易。


这三个线程结构的框架大致如下(代码来自三线程程序的开发和实现的分析):


主线:1。获取操作系统目录系统


getsystemdirectory(syspath,max_path); / /查询存在的病毒在系统目录


FindFirstFile(virusname,fdata); / /如果不在系统目录下,运行程序复制到系统目录


复制文件(curname,tname,true); / /查询关闭处理后


FindClose(ffhandle);/ /开放目录的文件系统


CreateFile(kname,generic_write,file_share_write,null,open_existing,file_attribute_normal,null); / /修改时间


设置文件时间(fchandle、时间、空、时间); / /设置属性


设置文件属性否是是(kname,file_attribute_readonly | file_attribute_hidden | file_attribute_system); / /助理监控居住在主线程中创建的


CreateThread(null,0,手表,(值)运行,0、空);


2。本地监控线程: / / / /看开放查询注册表hkey_local_machine 软件微软 Windows currentversion 运行


RegOpenKeyEx(hkey_local_machine,rgspath,0,key_query_value,HKEY); / /查询是否有virusname关键


RegQueryValueEx(HKEY,_t(virusname ),零,零,lpData,dwbuflen(lpbyte)); / /如果没有钥匙,打开注册表再写的方式


RegOpenKeyEx(hkey_local_machine,rgspath,0,key_write,HKEY); / /写我们想要的东西,我们将运行系统每次启动可执行文件;


RegSetValueEx(HKEY,_t(virusname )、空(const类型,字节*)wtname,dwbuflen); / /远程线程的操作,看是否still_active,如果不创建远程线程


GetExitCodeThread(wethread,ExitCode);


三.将远程线程打开到所有可能打开的主进程中,以便监视主进程的操作。


topenprocess(process_all_access,虚假,ERP -> rpmousepid); / /等到主要过程结束


TWaitForSingleObject(ERP -> rpprocesshandle,无限); / /我们重新启动可执行文件


twinexec(ERP -> rpwinexecname,0);


4。 / / / /身份:processtopid获得进程枚举所有的过程


枚举进程(lpidprocesses,sizeof,cbneeded(lpidprocesses)) / /开放的过程;信息查询和阅读的方式


OpenProcess(process_query_information | process_vm_read,虚假,lpidprocesses {我}); / /获取流程模块的处理


EnumProcessModules(hprocess,hmodule,sizeof(hmodule),cbneeded); / /得到一个特定的模块的名称,比较


getmodulebasename(hprocess,hmodule,normalname,sizeof(normalname));


5。 / /创建远程线程:createremote / / process_create_thread为CreateRemoteThread


对于virtualallocex / / / / process_vm_write process_vm_operation为WriteProcessMemory


OpenProcess(process_create_thread | process_vm_operation | process_vm_write,虚假,remotepid); / /分配空间在远程进程的线程的代码编写成的


VirtualAllocEx(rphandle,null,CB,mem_commit,page_execute_readwrite); / /写远程线程的远程代码到远程进程的地址空间


WriteProcessMemory(rphandle,remotethr(值),远程,CB,null); / /参数远程线程需要写远程进程的地址空间


WriteProcessMemory(rphandle,remotepar(值),RP,CB,null); / /创建远程线程监控


(rphandle CreateRemoteThread,null,0,(lpthread_start_routine)remotethr,(值)remotepar,0,null);


毕竟,这个系列不是教你写病毒,而是分析病毒的一般概念。因此,我们对上述程序有一个大致的印象,以便在将来的实际分析中有一个大致的概念。


四、总结


到目前为止,QQ木马病毒(OSO .exe)分析程序,希望大家喜欢。