Lab03-03

样本信息

字符串信息

导入表信息

资源信息

  • 通过浏览这个资源感觉这个资源里的内容是与0x41异或之后的内容

  • 还原之后是一个PE文件

样本分析

Lab03-03.exe分析

  • 从资源释放出另一个文件,解密后得到一个PE文件
  • 写入位置:C:\Windows\system32\svchost.exe
  • 以挂起的方式创建出svchost进程
  • 将svchost的文件映像去掉
  • 将资源中的内容分批拷贝到目标进程中
  • 使用SetThreadContext设置线程运行位置


资源分析

  • 使用SetWindowsHook挂钩一个键盘记录函数
  • 将按键记录写入到:practicalmalwareanalysis.log中
  • 该恶意代码能够记录:A-Z,a-z,0-9,SHIFT,CAPSLOCK,`,@,等字符

动态分析

  • 附加PID为2624的svchost.exe

查杀思路

  • 样本没有自启动。将它结束就行了。

总结

  • 使用调试器附加目标SVCHOST.exe进行调试记录器。

技巧

  • 目标进程中申请指定地址的内存
VirtualAllocEx(进程句柄,指定地址,大小,MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE)
  • 将一个PE展开后要想让其运行起来,需要将入口点正确填入
  • 将CONTEXT.eax赋值为目标的入ENTRYPOINT
  • 使用SetThreadContext函数实现这个功能。
int main()
{
    STARTUPINFO st = { sizeof(STARTUPINFO) };
    PROCESS_INFORMATION pi = {};
    if (CreateProcess(L"D:\\DLG.exe", 0, 0, 0, 0, CREATE_SUSPENDED, 0, 0, &st, &pi))
    {
        PCONTEXT pContext = (PCONTEXT)VirtualAlloc(0, sizeof(CONTEXT), MEM_COMMIT, PAGE_READWRITE);
        pContext->ContextFlags = CONTEXT_FULL;
        if (GetThreadContext(pi.hThread, pContext))
        {
            DWORD dwBase = 0;
            PDWORD pBase = (DWORD*)pContext->Ebx + 8; // pContext.Ebx中的值为PEB的地址
            DWORD dwRead = 0;
            ReadProcessMemory(pi.hProcess, pBase, &dwBase, 4, 0);
            typedef NTSYSAPI NTSTATUS(*NtUnmapViewOfSection)(HANDLE ProcessHandle, PVOID  BaseAddress);
            NtUnmapViewOfSection NUVOS = (NtUnmapViewOfSection)GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtUnmapViewOfSection");
            NUVOS(pi.hProcess, (PVOID)dwBase);
            // 接下来获取另一个PE文件的 sizeofImage imageBase
            // 修改目标进程的 PEB 中的IMAGEBASE
            // 计算新的 OEP 修改后的 PEImageBase + 另一个PE文件的 AddressOfEntryPoint
            // 将 pContext.eax 修改为新的 OEP
            // SetThreadContext
            // ResumeThread
            //
        }

    }
    return 0;
}
  • 键盘记录使用SetWindowsHook挂钩子
  • 获取前景窗口的API:GetForegroundWindow

posted on 2023-04-10 22:38  非法非非法  阅读(42)  评论(0编辑  收藏  举报

导航