恶意代码分析 lab-9.1

恶意代码逆向这个东西复杂的要死,细节很多,我只写了自己关注的部分,这文章主要当做笔记给自己看的,写的不是很详细。

恶意代码分析 lab-9.1

对于windows的恶意代码,导入函数起到非常大的作用,下面是改程序的:

Address  Ordinal Name                      Library 
-------  ------- ----                      ------- 
0040B000         OpenSCManagerA            ADVAPI32
0040B004         OpenServiceA              ADVAPI32
0040B008         ChangeServiceConfigA      ADVAPI32
0040B00C         CloseServiceHandle        ADVAPI32
0040B010         CreateServiceA            ADVAPI32
0040B014         RegDeleteValueA           ADVAPI32
0040B018         RegCreateKeyExA           ADVAPI32
0040B01C         RegSetValueExA            ADVAPI32
0040B020         RegOpenKeyExA             ADVAPI32
0040B024         RegQueryValueExA          ADVAPI32
0040B028         DeleteService             ADVAPI32
0040B030         ExpandEnvironmentStringsA KERNEL32
0040B034         CopyFileA                 KERNEL32
0040B038         GetModuleFileNameA        KERNEL32
0040B03C         GetShortPathNameA         KERNEL32
0040B040         Sleep                     KERNEL32
0040B044         WriteFile                 KERNEL32
0040B048         ReadFile                  KERNEL32
0040B04C         GetLastError              KERNEL32
0040B050         GetSystemDirectoryA       KERNEL32
0040B054         CreateFileA               KERNEL32
0040B058         GetFileTime               KERNEL32
0040B05C         SetFileTime               KERNEL32
0040B060         DeleteFileA               KERNEL32
0040B064         CloseHandle               KERNEL32
0040B068         CompareStringW            KERNEL32
0040B06C         CompareStringA            KERNEL32
0040B070         CreateProcessA            KERNEL32
0040B074         GetFileAttributesA        KERNEL32
0040B078         FlushFileBuffers          KERNEL32
0040B07C         LoadLibraryA              KERNEL32
0040B080         GetProcAddress            KERNEL32
0040B084         LCMapStringW              KERNEL32
0040B088         LCMapStringA              KERNEL32
0040B08C         VirtualAlloc              KERNEL32
0040B090         SetFilePointer            KERNEL32
0040B094         GetStringTypeW            KERNEL32
0040B098         ExitProcess               KERNEL32
0040B09C         TerminateProcess          KERNEL32
0040B0A0         GetCurrentProcess         KERNEL32
0040B0A4         GetTimeZoneInformation    KERNEL32
0040B0A8         GetSystemTime             KERNEL32
0040B0AC         GetLocalTime              KERNEL32
0040B0B0         DuplicateHandle           KERNEL32
0040B0B4         GetCommandLineA           KERNEL32
0040B0B8         GetVersion                KERNEL32
0040B0BC         SetStdHandle              KERNEL32
0040B0C0         GetFileType               KERNEL32
0040B0C4         SetHandleCount            KERNEL32
0040B0C8         GetStdHandle              KERNEL32
0040B0CC         GetStartupInfoA           KERNEL32
0040B0D0         CreatePipe                KERNEL32
0040B0D4         GetExitCodeProcess        KERNEL32
0040B0D8         WaitForSingleObject       KERNEL32
0040B0DC         HeapReAlloc               KERNEL32
0040B0E0         HeapAlloc                 KERNEL32
0040B0E4         GetCPInfo                 KERNEL32
0040B0E8         GetACP                    KERNEL32
0040B0EC         GetOEMCP                  KERNEL32
0040B0F0         UnhandledExceptionFilter  KERNEL32
0040B0F4         FreeEnvironmentStringsA   KERNEL32
0040B0F8         FreeEnvironmentStringsW   KERNEL32
0040B0FC         WideCharToMultiByte       KERNEL32
0040B100         GetEnvironmentStrings     KERNEL32
0040B104         GetEnvironmentStringsW    KERNEL32
0040B108         GetModuleHandleA          KERNEL32
0040B10C         GetEnvironmentVariableA   KERNEL32
0040B110         GetVersionExA             KERNEL32
0040B114         HeapDestroy               KERNEL32
0040B118         HeapCreate                KERNEL32
0040B11C         VirtualFree               KERNEL32
0040B120         HeapFree                  KERNEL32
0040B124         RtlUnwind                 KERNEL32
0040B128         MultiByteToWideChar       KERNEL32
0040B12C         GetStringTypeA            KERNEL32
0040B130         SetEnvironmentVariableA   KERNEL32
0040B138         ShellExecuteA             SHELL32 
0040B140 22      shutdown                  WS2_32  
0040B144 115     WSAStartup                WS2_32  
0040B148 52      gethostbyname             WS2_32  
0040B14C 19      send                      WS2_32  
0040B150 23      socket                    WS2_32  
0040B154 9       htons                     WS2_32  
0040B158 4       connect                   WS2_32  
0040B15C 3       closesocket               WS2_32  
0040B160 16      recv                      WS2_32  
0040B164 116     WSACleanup                WS2_32  

对于dll大致分析:

Advapi32.dll            ====>  Windows组件访问,如服务管理器和注册表
Kernel32.dll             ===>  包含系统核心功能,访问操作内存,文件,硬件等;
Wsock32.dll和Ws2_32.dll               ===>这两个是联网DLL,访问其中任何一个DLL的程序非常可能链接网络,或者是执行网络相关任务

可以大致分析出这个程序会操作注册表,服务,执行一些网络行为,伴随着一些文件操作。

这个程序的代码量实在是庞大,所以就不贴代码了,说下主要功能:

  1. 首先程序有个密码验证功能,如果没有正确密码输入,它在执行的时候会删除自身,这可能是程序为了防止被发现,因为这是个后门程序。

  2. 对于密码的修补就可以用让参数验证函数一直返回1就可以了,给程序打个补丁。

  3. 它命令行参数有-in -re -c -cc 四个选项,对应这不同功能。

  4. -in如下 , 这是个安装程序,注册表和服务同时操作,这一波也稍微明白可windows安装包内部是怎么操作的了。。。注册表和服务会使得这个程序实现自启动,这是后门常用的计俩了。

  5. .text:00402B89 loc_402B89:                             ; CODE XREF: _main+8Fj
    .text:00402B89                 lea     edx, [ebp+ServiceName]
    .text:00402B8F                 push    edx             ; lpServiceName
    .text:00402B90                 call    sub_402600
    .text:00402B95                 add     esp, 4
    .text:00402B98                 jmp     short loc_402BC2
    

知识点

mov     edi, [ebp+lpServiceName]
lea     edx, [ebp+DisplayName]
or      ecx, 0FFFFFFFFh
xor     eax, eax
repne scasb

类似于上述的代码可以当做strcmp , strcpy , strcat 之类的代码反汇编,一开始还真没看出来。

windows恶意代码在system32这里面有时间戳相关技术来实现与kernel32.dll之类的保持一致,被称为timestomping技术。

值得注意的是如果你用od打开,即是没有参数程序也不会被删除,因为此时windows系统不允许删除这个文件。

总结

对于windows 恶意程序,静态分析想要得出完善的程序流程几乎不可能,我们应该以静态获得大致流程,以动态获得程序细节。


   转载规则


《恶意代码分析 lab-9.1》 时钟 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
rctf2019_baby_heap rctf2019_baby_heap
rctf2019-babyheap这是个off-by-null的经典题目,值得深究一番。 [*] '/home/root0/pratice/pwn_category/heap/largebin_attack/rctf2019-bab
2020-02-15
下一篇 
large bin attack large bin attack
放三个例题,自己写的很麻烦,调试了一天,raycp师傅的脚本就思路很清晰,羡慕。 0ctf2018-heapstorm2 add(0x28) #0 add(0xa90) #1 add(0x80) #2
2020-02-13
  目录