当前位置:首页 > 科技 > 正文内容

QQ盗号木马之逆向分析(怎么用木马病毒盗QQ)

2019-06-30 07:00:12科技730

大家好,今天就和蜜蜜一起来看看这个问题吧 。怎么用木马病毒盗QQ,QQ盗号木马之逆向分析很多人还不知道,现在让我们一起来看看吧!

一般来说,病毒分析不涉及算法。如果要分析算法(就像我之前对CM4注册机制的分析),那么就需要更加关注程序的流程和逻辑,一般不要深究调用的具体内容。但是,病毒分析往往需要找出不同调用的含义,从而找出病毒的行为。因此,本文的第一部分着重对这些呼吁进行分析。第二部分简要讨论了守护进程技术的实现。

QQ盗号木马之逆向分析(怎么用木马病毒盗QQ)

逆向分析

这里我们跳过程序的初始化部分,直接进入第一个API函数的位置:

我们可以直接看到的第一个API函数是GetModuleFileName。该函数用于获取当前进程加载的模块的文件的完整路径,该模块必须由当前进程加载。这个函数的返回值是文件路径长度,保存在EAX是2B,也就是说路径长度是2B字符。你可以看到返回的路径是什么。将路径保存在“PathBuffer”中,按照地址查看:

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

ShellExecute函数出现在这里。它的功能是运行外部程序(或打开注册文件、打开目录、打印文件等。)并对外部程序有一些控制。具体到这个程序,ShellExecute会运行Explorer.exe程序打开“d:”,其实就是用程序管理器打开d盘的根目录,但是这个API函数的执行是有条件的,需要根据第二行CALL语句的结果来判断,所以需要输入这个调用,看看需要满足什么条件才能执行ShellExecute。

输入函数oso.00403C48

程序会比较EAX和EDX的内容,其中EAX保存的字符串是我们之前用GetModuleFileName得到的当前文件的路径,只是转换成了大写字符。OSO.EXE的文件路径EDX保存在d盘的根目录下,这里两者明显不同。因此,用黄色突出显示的条件跳转语句无效,程序将继续按顺序执行:

这里需要注意的是,由于这个病毒是Delphi写的,所以这个字符串的长度就是字符串的第一个地址减去4后的4字节内容。所以代码的前两句意思是得到两个路径的字符数,然后用减法比较。这里很明显,当前路径中的字符数很大,所以用黄色突出显示的条件跳转成立,它来到oso.00403C6B的位置:

这里还是人物对比。因为两者不相等,最后一句的条件跳转成立,就到了oso.00403CD1的位置:

这里比较的是盘符,也是不相等的,所以条件跳转成立,这个功能就完成了。基于以上分析,该函数的作用是判断当前执行的文件是否位于D盘根目录,如果是,则正在执行ShellExecute函数,否则跳过该函数的执行。因为我们的程序位于桌面,所以不执行ShellExecute函数。

接下来,程序会继续判断当前程序是否位于E,F,G,H,I的根目录下,如果不是,那么就不会执行相应的ShellExecute函数。

之后,程序将调用名为oso.004050F0的函数进入其内部分析:

可以看出,病毒程序调用了GetSystemDirectory函数来获取系统目录。一般来说,恶意程序使用该功能的目的是将自身复制到系统目录中迷惑用户(详见《反病毒攻防研究第001篇:自我复制与自删除》)。之后病毒程序会将字符“severe.exe”与上面得到的系统目录字符串结合,新路径就是病毒程序需要隐藏的地方:

然后您可以看到CreateFile函数:

但是这个CreateFile函数的执行是有条件的,它依赖于第一行代码中CALL的返回值。输入此呼叫进行分析,您可以发现:

该程序调用FindFirstFile函数来查找系统目录中是否有severe.exe文件。如果没有文件(返回值为-1),则不会执行CreateFile函数。可以看出,这里CreateFile的作用不是创建文件,而是打开文件。接下来是文件复制操作:

然后就是一系列的文件复制,病毒会把自己改名为tfidma.exe,复制到系统目录下。它还会将自己重命名为conime.exe,并将其复制到系统目录下的驱动程序文件夹中。类似的操作在此不再赘述。之后,程序会再次调用ShellExecute函数来执行创建的程序。因此,severe.exe、conime.exe和tfidma.exe等进程将出现在资源管理器中。可以说,这个时候,我们的电脑已经感染了病毒。接下来我们将遇到线程的创建函数:

CreateThread函数通常与Sleep或WaitForSingleObject函数一起使用。因为每个线程都有自己的CPU时间片,所以当主线程创建一个新线程的时候,它的CPU时间片有时候是没有完成的,可以继续执行。有时如果主线程的代码很小,那么在CPU中

  根据OD对CreateThread函数的解析可以知道,该线程所调用的是oso.00404958这个函数。分析这个函数可以知道,它主要是创建了名为“hx1.bat”的批处理文件并执行,而该批处理的内容为:

  其主要作用就是修改系统时间,测试本地网络系统并删除自身。病毒的常规分析部分就是这些。

  三、进程守护技术原理

  进程的守护技术最早应该是源于“中国黑客病毒(worm.runouce)”,它开创性地采用了“三线程”结构。创建三线程就是为了更好地保护程序自身不被关闭和删除。我们可以将想要执行的代码放在主线程里,然后再生成两个辅助线程,它们的功能就是实现对程序的保护,防止程序被用户关闭或删除。在此,称我们的可执行文件的进程为主进程。两个辅助线程相互实时监视,如果监视对象被关闭了,就重新创建线程或进程。比如病毒程序可以选择Explorer.exe和Taskmgr.exe作为远程进程驻体。如果用户知道了远程线程的驻体为资源管理器后,就会打开任务管理器来结束Explorer,这时我们再把远程线程驻入到任务管理器中。也就是说,只要Explorer或Taskmgr有一个存在,就不可能结束主进程。如果有其它结束进程的工具,你就可以将其关闭掉,只要资源管理器和任务管理器均不存在时,就没有驻体来维持远程进程。不过,如果我们选择的远程进程为随机的,或者就是病毒自创的,这就不容易发现了。

  这种三线程结构的程序框架大致如下(代码来自《浅析三线程程序开发思路与实现》):

  // 1.主线程:main // 获得操作系统的系统目录

  GetSystemDirectory(syspath,MAX_PATH); // 查询系统目录下病毒是否存在

  FindFirstFile(virusname,&fdata); // 如果系统目录下没有,在将正在运行的程序复制到系统目录下

  CopyFile(curname,tname,TRUE); // 在查询完毕后,关闭相关句柄

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

  CreateFile(kname,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); // 修改时间

  SetFileTime(fchandle,&ftime,NULL,&ftime); // 设置属性

  SetFileAttributes(kname,FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM ); // 创建驻留在主进程内的辅助监视线程

  CreateThread(NULL,0,watch,(LPVOID)rthread,0,NULL);

  // 2.本地辅助监视线程:watch // 以查询方式打开注册表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

  RegOpenKeyEx(HKEY_LOCAL_MACHINE,rgspath,0,KEY_QUERY_VALUE,&hkey); // 查询是否存在virusname的键值

  RegQueryValueEx(hkey,_T("virusname"),NULL,NULL,(LPBYTE)lpdata,&dwbuflen); // 如果没有相关键值,就以写方式再次打开注册表

  RegOpenKeyEx(HKEY_LOCAL_MACHINE,rgspath,0,KEY_WRITE,&hkey); // 写入我们想要的东西,系统每次启动都会运行我们的可执行文件;

  RegSetValueEx(hkey,_T("virusname"),NULL,type,(const byte *)wtname,dwbuflen); // 获得远程线程的运行情况,看是否为STILL_ACTIVE,如果不是则创建远程线程

  GetExitCodeThread(wethread,&exitcode);

  // 3.远程线程:remote // 以所有可能的访问方式打开主进程,以便监视主进程的运行情况

  tOpenProcess(PROCESS_ALL_ACCESS,FALSE,erp->rpmousepid); // 等待直到主进程结束

  tWaitForSingleObject(erp->rpprocesshandle,INFINITE); // 重新启动我们的可执行文件

  tWinExec(erp->rpwinexecname, 0);

  // 4.获得进程ID:processtopid // 列举所有的进程

  EnumProcesses(lpidprocesses,sizeof(lpidprocesses),&cbneeded); // 以查询信息和读取的方式打开进程

  OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,lpidprocesses[i]); //获得进程模块的句柄

  EnumProcessModules(hprocess,&hmodule,sizeof(hmodule),&cbneeded); // 获得特定模块的名字,以备比较

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

  // 5.创建远程线程:createremote // PROCESS_CREATE_THREAD for CreateRemoteThread

  // PROCESS_VM_OPERATION for VirtualAllocEx // PROCESS_VM_WRITE for WriteProcessMemory

  OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,remotepid); // 在远程进程中分配空间,以备将线程代码置入其中

  VirtualAllocEx(rphandle,NULL,cb,MEM_COMMIT,PAGE_EXECUTE_READWRITE); // 将远程线程remote的代码写入到远程进程的地址空间中

  WriteProcessMemory(rphandle,remotethr,(LPVOID)remote,cb,NULL); // 将远程线程所需的参数也写入到远程进程的地址空间中

  WriteProcessMemory(rphandle,remotepar,(LPVOID)&rp,cb,NULL); // 创建远程监视线程

  CreateRemoteThread(rphandle,NULL,0,(LPTHREAD_START_ROUTINE)remotethr,(LPVOID)remotepar,0,NULL);

  毕竟本系列不是教大家编写病毒,而是剖析病毒的大概思路,所以上述程序大家有个大概的印象即可,这样在以后的实际分析中,就能有大概的应对思路。

  四、小结

  至此,QQ盗号木马(oso.exe)病毒程序的分析就到这里。希望大家喜欢.

这篇文章到此就结束,希望能帮助到大家。

扫描二维码推送至手机访问。

版权声明:文章内容摘自网络,如果无意之中侵犯了您的版权,请联系本站,本站将在3个工作日内删除。谢谢!

本文链接:http://xixia168.cn/n/kj/10837.html

标签: 木马盗号
分享给朋友:

“QQ盗号木马之逆向分析(怎么用木马病毒盗QQ)” 的相关文章

植树节的由来简说(植树节的来历简写50字)

植树节的由来简说(植树节的来历简写50字)

大家好,今天就和兔兔一起来看看这个问题吧 。植树节的来历简写50字,植树节的由来简说很多人还不知道,现在让我们一起来看看吧!    植树节的来历简写50字:植树节是为了纪念中国民主革命先行者孙中山先生。他是中国近代史上 第一个重视并大力提倡植树造林的人。习俗就是在这一天植树造林,美化环境的活动。一、...

2021全国各地樱花最佳观赏时间表一览(樱花什么时候开花大概几月到几月)

2021全国各地樱花最佳观赏时间表一览(樱花什么时候开花大概几月到几月)

大家好,今天就和大牛一起来看看这个问题吧 。樱花什么时候开花大概几月到几月,2021全国各地樱花最佳观赏时间表一览很多人还不知道,现在让我们一起来看看吧!导语:近来天气越来越暖和了,很多春花都含苞待放中。其中,樱花也即将迎来最佳观赏时期。我国每年春季赏樱花的去处可太多了,武汉、南京、北京、上海等等,...

中国哪个朝代的人可以吃玉米(哪个朝代能吃到玉米)

中国哪个朝代的人可以吃玉米(哪个朝代能吃到玉米)

大家好,今天就和小熊一起来看看这个问题吧 。哪个朝代能吃到玉米,中国哪个朝代的人可以吃玉米很多人还不知道,现在让我们一起来看看吧!  导语:玉米是一种很美味的粗粮,且营养价值高,常食用可美容养颜,延缓衰老,增强人的体力和耐力。由于玉米的饱腹感比较强,一般可替代主食,因此受到许多减肥者的喜爱。那么,您...

屈臣氏会员日是每月几号(屈臣氏会员日是哪一天)

屈臣氏会员日是每月几号(屈臣氏会员日是哪一天)

大家好,今天就和兔兔一起来看看这个问题吧 。屈臣氏会员日是哪一天,屈臣氏会员日是每月几号很多人还不知道,现在让我们一起来看看吧!  一、屈臣氏会员日是哪一天 屈臣氏会员日是每月几号二、屈臣氏会员日是每月的5日,所以一年就有12次,会员日当天积分五倍升值。三、屈臣氏公司介绍  屈臣氏集团起源于1841...

我国禽流感爆发是哪一年(禽流感是哪一年发生的)

我国禽流感爆发是哪一年(禽流感是哪一年发生的)

大家好,今天就和毛毛一起来看看这个问题吧 。禽流感是哪一年发生的,我国禽流感爆发是哪一年很多人还不知道,现在让我们一起来看看吧!    自从1997年在香港发现人类也会感染禽流感之后,此病症引起全世界卫生组织的高度关注。其后,此流感一直在亚洲区零星爆发,但从2003年12月开始,禽流感在东亚多国──...

八月十五来历民间故事(八月十五的由来)

八月十五来历民间故事(八月十五的由来)

大家好,今天就和可心一起来看看这个问题吧 。八月十五的由来,八月十五来历民间故事很多人还不知道,现在让我们一起来看看吧!  一、  八月十五的由来  “中秋”一词,最早见于《周礼》。根据我国古代历法,农历八月十五日,在一年秋季的八月中旬,故称“中秋”。一年有四季,每季又分孟、仲、季三部分,因为秋中第...