首页
社区
课程
招聘
[旧帖] [原创]通过IDA分析一个病毒 0.00雪花
发表于: 2009-10-18 13:07 3981

[旧帖] [原创]通过IDA分析一个病毒 0.00雪花

2009-10-18 13:07
3981

在看雪注册了好久了,一直处于潜水阶段,很多时候看到好贴子,想下载附件学习。苦于临时二字。
这周末刚好闲着,就用一个菜鸟的眼光,分析一个病毒好了。希望能借此转正。如果没有成功,或许是我的能力还没有达到看雪的最低要求,继续努力。抑或是总潜水,对论坛的贡献不够。以后会改正的。

不废话了。

前两天上数据库课,由于家中的事情,耽误了很多课程,索性找到老师拷了课件,准备回去看看,课打开U盘,傻眼了,4个系统、只读属性的陌生程序, wsctf.exe   EXPLORER.exe auto.exe  SysAnti.exe看名字一个比一个邪恶,估计都不是什么好东西。
  刚好到周末了,拿出一个auto.exe稍微分析一下,由于本人,也是才入看雪,菜鸟一个。有什么问题,也请您谅解,多多指出。

先用PEID查壳。ASPack 2.12 -> Alexey Solodovnikov [Overlay]

如果没有变形,这个ASPack2.12还是很好脱得。
在OD里面ESP定律尝试一下,到达OEP。
PEID再看一下,这次看到病毒是用VC++写的。

下面就先载入IDA大概了解一下病毒程序的流程。
因为是新手,所以我把最近学习到的东西,都写上一点,也给自己加深一下记忆。

.text:00401000 ; Input MD5   : 31166CBED8689B31956DC95FE02C8333
.text:00401000 ; File Name   : C:\Documents and Settings\Administrator\桌面\unpack_virus.exe
.text:00401000 ; Format      : Portable executable for 80386 (PE)
.text:00401000 ; Imagebase   : 400000
.text:00401000 ; Virtual size   : 00002000 (8192.)
.text:00401000 ; OS type         :  MS Windows
.text:00401000 ; Application type:  Executable 32bit
.text:00401000
.text:00401000                 .686p
.text:00401000                 .mmx
.text:00401000                 .model flat

.text:00401000 ; ======================================================================
.text:00401000 ; Segment permissions: Read/Write
.text:00401000                 assume cs:_text
.text:00401000             assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
  
  首先这是个80386下的PE格式文件,映像基址为0x00400000,一般在Win NT中,这个基址是默认的。系统为MS Windows,应用程序类型32bit,CPU为686P的指令系统,4GB的平坦模式。这些都是最基本的,大体上,没什么说的。

  下面,是汇编中,对段寄存器的设置只定义了代码段,数据段。

OK下面就是对程序部分开始进行一些简单的分析了。

首先通过GetSystemTime得到系统时间,之后修改系统时间。(估计是为了废掉卡巴,可能是个老病毒了,毕竟学校机器都是N久不动得了)
.text:0040104F                 lea     eax, [ebp+SystemTime]
.text:00401052                 push    eax             ; lpSystemTime
.text:00401053                 call    ds:GetSystemTime
.text:00401059                 cmp     [ebp+SystemTime.wYear], 7D5h
.text:0040105F                 jbe     short loc_401071
.text:00401061                 lea     eax, [ebp+SystemTime]
.text:00401064                 mov     [ebp+SystemTime.wYear], 7D5h
.text:0040106A                 push    eax             ; lpSystemTime
.text:0040106B                 call    ds:SetSystemTime

  之后是一段时间的Sleep
  下面发现了一个FindWindowExA函数,查找一个名为卡巴斯?的进行匹配。(目的昭然若揭,在这个下面还调用了一个PostMessageA,将结束avp.exe进程的消息传递到消息队列中,还是为了卡巴而生)
.text:004010A2                 push    offset szWindow ; "卡巴斯?
.text:004010A7                 push    ebx             ; lpszClass
.text:004010A8                 push    ebx             ; hWndChildAfter
.text:004010A9                 push    ebx             ; hWndParent
.text:004010AA                 call    ds:FindWindowExA
  
  

下面又开始Sleep
.text:004010C2                 push    edi             ; dwMilliseconds
.text:004010C3                 call    esi ; Sleep

  通过GetModuleFileNameA 获得当前文件路径,通过GetSystemDirectoryA获得系统路径。再往下看,会释放一些东西。 ProcName ; "LoadLibraryA"     ModuleName ; "kernel32"

.text:00401100                 push    0FFh            ; nSize
.text:00401105                 push    eax             ; lpFilename
.text:00401106                 push    0               ; hModule
.text:00401108                 call    ds:GetModuleFileNameA
.text:0040110E                 lea     eax, [ebp+sz]
.text:00401114                 push    0FEh            ; uSize
.text:00401119                 push    eax             ; lpBuffer
.text:0040111A                 call    ds:GetSystemDirectoryA

  后面通过lstrcpy   lstrcat   lstrlen   lstrcmp来释放一个del.bat来达到运行kowin.exe和删除自身的目的。
.text:0040115B                 push    offset aDel_bat ; "del.bat"
.text:0040116D                 push    offset aKowin_exe ; "kowin.exe"

.text:004011C5                 push    40000000h       ; dwDesiredAccess
.text:004011CA                 push    eax             ; lpFileName
.text:004011CB                 call    ds:CreateFileA

.text:00401236                 push    eax             ; lpBuffer
.text:00401237                 push    [ebp+hObject]   ; hFile
.text:0040123A                 call    edi ; WriteFile

.text:004013A2                 push    [ebp+hObject]   ; hObject
.text:004013A5                 call    ds:CloseHandle
.text:004013AB                 lea     eax, [ebp+CmdLine]
.text:004013B1                 push    0               ; uCmdShow
.text:004013B3                 push    eax             ; lpCmdLine
.text:004013B4                 call    ds:WinExec

把这个进程名字压入堆栈,之后怎么调用我不太知道,但根据病毒的特征,应当是插入进程,来达到,跟随系统启动自身的目的。
.text:004014C6                 push    offset aWinlogon_exe ; "winlogon.exe"

  下面开始的创建自身服务。
.text:0040151E                 push    offset ServiceStatus ; lpServiceStatus
.text:00401523                 xor     eax, eax
.text:00401525                 push    hServiceStatus  ; hServiceStatus
.text:0040152B                 mov     ServiceStatus.dwWin32ExitCode, eax
.text:00401530                 mov     ServiceStatus.dwCurrentState, 1
.text:0040153A                 mov     ServiceStatus.dwCheckPoint, eax
.text:0040153F                 mov     ServiceStatus.dwWaitHint, eax
.text:00401544                 call    ds:SetServiceStatus
.text:0040154A                 test    eax, eax
.text:0040154C                 jnz     short locret_401554
.text:0040154E                 jmp     ds:GetLastError

.text:00401561                 push    offset ServiceName ; "kowin"
.text:00401566                 mov     ServiceStatus.dwServiceType, 30h
.text:00401570                 mov     ServiceStatus.dwCurrentState, 2
.text:0040157A                 mov     ServiceStatus.dwControlsAccepted, 3
.text:00401584                 mov     ServiceStatus.dwWin32ExitCode, edi
.text:0040158A                 mov     ServiceStatus.dwServiceSpecificExitCode, edi
.text:00401590                 mov     ServiceStatus.dwCheckPoint, edi
.text:00401596                 mov     ServiceStatus.dwWaitHint, edi
.text:0040159C                 call    ds:RegisterServiceCtrlHandlerA

  在这段代码之前,病毒还根据之前获得系统路径释放两个文件exe 和 dll。
  并在各个盘符下释放一个auto.exe 和 auotrun.inf,达到感染U盘的目的。

  下面这段,是通过ShellExecute来启动资源管理器,explorer.exe 进而插入其中。
.text:00401AEC                 push    esi             ; nShowCmd
.text:00401AED                 push    0               ; lpDirectory
.text:00401AEF                 push    eax             ; lpParameters
.text:00401AF0                 push    offset File     ; "explorer.exe"
.text:00401AF5                 push    offset Operation ; "open"
.text:00401AFA                 push    0               ; hwnd
.text:00401AFC                 call    ds:ShellExecuteA

  这一小段显示了在服务中,启动病毒程序的参数, -k
.text:00401B42                 push    offset SubStr   ; "-k"
.text:00401B47                 push    [ebp+Str]       ; Str
.text:00401B4A                 call    strstr

后面还是一大段的Sleep,这个病毒中Sleep用的很多,以后遇到就不说。

  下面使用RegCreateKeyExA来对注册表进行操作,由于IDA是静态的,所以,只能做到这样,等下用OD,看能不能跟出来注册表的键位。原因还是自己才学习,很多东西,不懂。望见谅。
.text:00401CD8                 push    esi             ; lpdwDisposition
.text:00401CD9                 push    eax             ; phkResult
.text:00401CDA                 push    esi             ; lpSecurityAttributes
.text:00401CDB                 push    0F003Fh         ; samDesired
.text:00401CE0                 mov     edi, ds:RegCreateKeyExA
…..
…..
.text:00401D12                 push    [ebp+hKey]      ; hKey
.text:00401D15                 call    ds:RegCloseKey

  先将eax清零,之后通过GetVolumeInformation获得C盘的盘区信息。由于是静态的,所以这应当是个子程序,在之前的某个时刻就调用了。
.text:00401DEA                 xor     eax, eax
.text:00401DEC                 push    0Ah             ; nFileSystemNameSize
.text:00401DEE                 push    eax             ; lpFileSystemNameBuffer
.text:00401DEF                 push    eax             ; lpFileSystemFlags
.text:00401DF0                 lea     ecx, [ebp+VolumeSerialNumber]
.text:00401DF3                 push    eax             ; lpMaximumComponentLength
.text:00401DF4                 push    ecx             ; lpVolumeSerialNumber
.text:00401DF5                 push    0Ch             ; nVolumeNameSize
.text:00401DF7                 push    eax             ; lpVolumeNameBuffer
.text:00401DF8                 push    offset RootPathName ; "c:\\"
.text:00401DFD                 call    ds:GetVolumeInformationA

WriteProcessMemory
GetProcAddress
CreateRemoteThread
GetProcAddress
FreeLibrary
之后就是这几个病毒特有函数的的使用,基本完毕。

这样通过IDA走了一遍,大概知道这个病毒的流程还有动作。下面在虚拟机里面实体测试一下。

通过上面的截图,基本验证之前在IDA里的判断,还有System Repair Engineer的扫描日志。
(我个人两个浏览器chrome,还有世界之窗,用chrome编辑的图片,别人看到是红叉,这里就不上图了,我把图片链接放最底下)

下面就写下病毒的基本动作:
获取C盘的磁盘信息,获取系统盘路径,进而向system32下写入一个dll 和 一个exe 这两个的名字是一个随机的8位数,至于通过磁盘信息算出的8位数的算法, 由于个人是新手,分析不出来。之后dll插入系统的winlogon.exe进程。
而后,检测卡巴斯基,如果检测到了,通过修改时间过卡巴。(这里我通过C写了一个窗口名为卡巴斯基,进程名为avp.exe的东西,但病毒貌似不管这个,估计我的小程序,还是没达到卡巴的要求,呵呵)
下面开始注入explorer进程,并启动这个进程。并向各个盘符下写入auto.exe还有autorun.inf

[AutoRun]
open=auto.exe
shellexecute=auto.exe
shell\Auto\command=auto.exe
这个是提取出来的,呵呵,很经典了。

剩下的就是修该注册表,创建服务。基本过程就是这样了。
text:00401F39 push  offset aSystemCurrentc ; "SYSTEM\\CurrentControlSet\\Services\\"
注册表是这个地方遭到修改。

下面在用OD动态的走一遍。由于是动态的,很多东西,我也不是很熟悉,只能说也是大概的,有一个新手菜鸟的眼光看一下,希望得到大大们的指导。

004025A6  |.  53            push    ebx        ; /pModule
004025A7  |.  FF15 50304000 call    dword ptr [<&kernel32.GetMod>; \GetModuleHandleA
004025AD  |.  50            push    eax
004025AE  |.  E8 A3F0FFFF   call    00401656     //F7跟进程序
004025B3  |.  8945 98       mov     dword ptr [ebp-68], eax
004025B6  |.  50            push    eax                          ; /status
004025B7  |.  FF15 E4304000 call    dword ptr [<&msvcrt.exit>]   ; \exit

头有点晕,估计很多细节都没有把握好,不过这个病毒特征很明显,而且动作也不复杂,流程都出来了,就不用OD再走了,我估计剩下的每个call都跟进去,应当会很神伤。
休息一下。休息一下。

还希望能获得一个邀请码,能更深入的学习。

用到的API帮助(由于个人还处于初级菜鸟阶段,很多函数需要百度)
FindWindowExA     9d6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0l9^5x3o6x3I4x3#2)9J5k6h3S2@1L8b7`.`.

GetModuleFileNameA        28fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1^5y4e0V1I4x3W2)9J5k6h3S2@1L8h3H3`.

GetSystemDirectoryA         0cdK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1&6x3o6b7I4x3q4)9J5k6h3S2@1L8b7`.`.

lstrcpy        fc4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0V1H3y4U0b7%4x3g2)9J5k6h3S2@1L8b7`.`.

PostMessageA      050K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0l9^5x3o6p5%4z5g2)9J5k6h3S2@1L8b7`.`.

lstrcat       3c4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0V1H3y4U0M7@1y4g2)9J5k6h3S2@1L8b7`.`.

lstrlen      70aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0V1H3y4K6p5I4y4#2)9J5k6h3S2@1L8b7`.`.

lstrcmp   The lstrcmp function compares two character strings.

CreateFileA     27fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1^5z5o6M7#2z5g2)9J5k6h3S2@1L8b7`.`.

WriteFile           c54K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1&6y4e0M7^5x3W2)9J5k6h3S2@1L8b7`.`.

CloseHandle       93aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1^5z5o6M7#2y4W2)9J5k6h3S2@1L8b7`.`.

WinExec      b90K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1^5y4U0R3^5x3W2)9J5k6h3S2@1L8b7`.`.

SetServiceStatus      954K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3#2K6y4U0R3$3x3U0b7I4i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

GetLastError       7b0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0M7K6x3o6p5$3z5q4)9J5k6h3S2@1L8b7`.`.

RegisterServiceCtrlHandlerA         065K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3#2K6y4U0R3#2x3o6f1@1i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

CreateThread     669K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0p5&6x3e0b7@1y4q4)9J5k6h3S2@1L8b7`.`.

ShellExecuteA          8b4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0l9@1y4o6f1K6x3#2)9J5k6h3S2@1L8b7`.`.

StartServiceCtrlDispatcherA       c23K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3#2K6y4U0R3$3x3K6t1@1i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

RegCreateKeyExA        e36K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1&6x3K6R3K6x3g2)9J5k6h3S2@1L8b7`.`.

RegSetValueExA   4a2K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1&6y4K6j5J5y4g2)9J5k6h3S2@1L8b7`.`.

RegCloseKey         b32K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1&6x3K6R3J5y4g2)9J5k6h3S2@1L8b7`.`.

GetVersionExA       bc8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3U0t1$3y4K6R3@1y4q4)9J5k6h3S2@1L8h3H3`.

GetVolumeInformationA   ca9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1&6x3U0p5J5x3q4)9J5k6h3S2@1L8b7`.`.

OpenSCManagerA        b33K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3#2K6y4U0R3@1x3K6t1K6i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

OpenServiceA         1edK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3#2K6y4U0R3@1x3K6x3H3i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

StartServiceA      8bbK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3#2K6y4U0R3$3x3K6t1I4i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

CloseServiceHandle   847K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3#2K6y4U0R3J5x3o6t1^5i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

LocalAlloc        b5bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3q4S2x3K6j5$3y4K6t1K6i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

QueryServiceConfigA   4ecK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3#2K6y4U0R3@1z5e0x3J5i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

ChangeServiceConfigA    3edK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3&6Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3L8r3W2T1M7X3q4J5P5g2)9J5c8X3#2K6y4U0R3I4z5e0R3%4i4K6t1^5g2W2y4Q4x3X3f1^5y4g2)9J5z5g2)9J5k6h3q4K6M7s2R3`.

WriteProcessMemory     eacK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0b7&6y4e0j5&6x3#2)9J5k6h3S2@1L8b7`.`.

GetProcAddress     b0cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0f1J5x3K6f1J5x3#2)9J5k6h3S2@1L8b7`.`.

CreateRemoteThread   809K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3y4U0V1%4x3e0j5%4i4K6u0W2K9s2c8E0L8l9`.`.

GetProcAddress    ae6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0f1J5x3K6f1J5x3#2)9J5k6h3S2@1L8b7`.`.

FreeLibrary       bd0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0S2K9h3E0W2i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6$3K9h3g2%4i4K6u0r3x3e0t1^5y4e0R3^5z5q4)9J5k6h3S2@1L8b7`.`.

本文有关图片链接的地
67eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8Z5L8%4c8G2x3W2)9J5k6h3u0S2j5X3q4T1K9h3q4F1i4K6u0W2j5$3!0E0i4K6u0r3N6i4m8D9L8$3q4V1x3g2)9J5c8U0t1H3x3o6V1I4x3o6p5^5i4K6u0r3y4e0x3$3z5f1c8r3b7e0m8q4b7K6u0q4b7V1p5$3y4K6c8r3c8V1b7&6z5e0m8o6b7e0R3@1x3U0k6o6x3U0m8Q4x3X3g2B7M7r3M7`.

89eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8Z5L8%4c8G2x3W2)9J5k6h3u0S2j5X3q4T1K9h3q4F1i4K6u0W2j5$3!0E0i4K6u0r3N6i4m8D9L8$3q4V1x3g2)9J5c8U0t1H3x3o6V1I4x3o6p5^5i4K6u0r3z5o6g2p5x3U0f1I4b7@1y4r3y4K6y4r3z5p5p5@1c8e0t1&6c8o6y4p5y4@1u0p5x3U0f1I4b7U0t1$3z5o6y4Q4x3X3g2B7M7r3M7`.

bddK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8Z5L8%4c8G2x3W2)9J5k6h3u0S2j5X3q4T1K9h3q4F1i4K6u0W2j5$3!0E0i4K6u0r3N6i4m8D9L8$3q4V1x3g2)9J5c8U0t1H3x3o6V1I4x3o6p5^5i4K6u0r3c8p5c8m8y4V1u0n7y4K6M7J5y4K6j5#2y4U0R3K6x3e0f1$3c8e0f1%4b7@1y4o6y4U0m8m8x3V1f1J5x3U0g2Q4x3X3g2B7M7r3M7`.

17fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8Z5L8%4c8G2x3W2)9J5k6h3u0S2j5X3q4T1K9h3q4F1i4K6u0W2j5$3!0E0i4K6u0r3N6i4m8D9L8$3q4V1x3g2)9J5c8U0t1H3x3o6V1I4x3o6p5^5i4K6u0r3b7K6t1J5b7V1c8o6x3V1b7J5b7@1x3&6y4e0p5$3x3p5u0p5y4@1u0m8y4e0S2m8z5e0k6n7y4@1p5$3b7f1y4Q4x3X3g2B7M7r3M7`.

378K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8Z5L8%4c8G2x3W2)9J5k6h3u0S2j5X3q4T1K9h3q4F1i4K6u0W2j5$3!0E0i4K6u0r3N6i4m8D9L8$3q4V1x3g2)9J5c8U0t1H3x3o6V1I4x3o6p5^5i4K6u0r3x3U0R3&6c8o6k6q4y4@1t1$3y4U0p5I4y4U0u0r3b7K6q4n7z5e0R3H3y4o6b7J5b7V1p5J5b7U0S2m8b7f1g2Q4x3X3g2B7M7r3M7`.

68eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8Z5L8%4c8G2x3W2)9J5k6h3u0S2j5X3q4T1K9h3q4F1i4K6u0W2j5$3!0E0i4K6u0r3N6i4m8D9L8$3q4V1x3g2)9J5c8U0t1H3x3o6V1I4x3o6p5^5i4K6u0r3x3K6M7^5x3V1x3@1z5o6V1J5b7e0c8p5x3V1k6m8y4f1x3^5y4e0S2n7b7V1b7@1y4U0k6q4c8o6b7J5z5o6c8Q4x3X3g2B7M7r3M7`.

abfK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4m8Z5L8%4c8G2x3W2)9J5k6h3u0S2j5X3q4T1K9h3q4F1i4K6u0W2j5$3!0E0i4K6u0r3N6i4m8D9L8$3q4V1x3g2)9J5c8U0t1H3x3o6V1I4x3o6p5^5i4K6u0r3x3@1j5@1c8U0f1^5x3@1c8p5b7f1j5$3y4p5q4m8y4f1j5K6c8V1g2n7y4U0l9H3x3K6R3#2y4e0l9#2x3@1y4Q4x3X3g2B7M7r3M7`.

如果帖子哪里有不合规范,请见谅,并指出,我会在看到的第一时间修改不合规范的地方的。


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 8
支持
分享
最新回复 (10)
雪    币: 72
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
从第一个病毒分析,深切的发现逆向/破解 确实是一个很需要耐心的东西。
从昨天晚上开始,IDA,OD,VMWARE,还有ingshi手杀的各种工具全拿出来,对付一个在大家看来其实很普通的一个病毒。
不过一直到今天中午才把全部的弄完,本想在用OD动态跟一遍的,发现,眼睛有点涨,额。

下次有机会,用OD来分析,学校中的另外的几个病毒好了。
躺一会先。
2009-10-18 13:20
0
雪    币: 72
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
呵呵,谢谢管理员。优秀....
给了入门的我很大信心。

才在当当定了第三版。问了朋友,回答了镜像光盘的问题。呵呵,书没来,就先看光盘了。
2009-10-20 20:12
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看不太明白,但是楼主真是勤快!
2009-10-20 20:15
0
雪    币: 72
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
额,我也是才看这些内容的,第一次写文。生涩得很,谅解一下。就是用IDA静态的看了一下,程序中的API。之后查询了MSDN,在虚拟机里调试,看了一下流程,联系之前的函数。大概就写了这么个。呵呵。

还是希望,能对新手谅解。
2009-10-20 20:21
0
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
在学校里做这些事情,真不错啊。基本上的行为都差不多出来了。
2009-10-24 22:56
0
雪    币: 6
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好啊,支持楼主
2009-10-25 08:03
0
雪    币: 433
活跃值: (1895)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
8
support!
2009-10-25 19:51
0
雪    币: 73
活跃值: (70)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
呵呵学习了..这些API真得好好了解一下..
2009-10-25 20:29
0
雪    币: 72
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
呵呵,得到泉哥的支持,高兴。
也谢谢大家的支持,最近第三版来了,在苦心从头看起。先不发贴了。等看好了,要做的更好。
2009-10-28 18:43
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
新手进门~~学习中...
2009-10-29 12:20
0
游客
登录 | 注册 方可回帖
返回