样本速览

静态分析
文件格式,字符串,导入表都看一眼。



IDA分析
主函数1010


开始函数各种初始化,并且点进去一些函数并没有看到一些调用函数的东西,但是结合前面有很多字符串和有导入表不像是加壳,我随便翻一翻别的函数,看看有没有什么有用的信息。 

发现确实有一些有用的东西,于是可以摁x查看引用,比如1750函数。



调用链清晰,现在可以静态先过一遍整个流程做了什么,这种简单的交给AI先看一遍,我这里选择让AI来看1750函数做了什么,并且整个调用链路,等待了一会儿之后,AI分析完成,但是没有分析出回连的C2地址啊,只能动态使用x64dbg再分析一波,因为1750函数,有明显的创建子进程的函数,我们直接断点这个函数,然后因为C2回连发生在子进程,我们附加子进程进行调试即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| start (0x1400013E0, PE入口点) └─ sub_140001010 (0x140001010) ── MinGW CRT 启动函数 (__tmainCRTStartup) ├─ ★ StackBase = NtCurrentTeb()->NtTib.StackBase + CAS 写 qword_140007040 ← 你问的第1/2个问题 ├─ TlsCallback_0 (0x140001BF0) → sub_140002690 CRT 的 TLS 管理(标准代码) ├─ _getmainargs / initterm 等 CRT 标准初始化 └─ sub_140002E50 (0x140002E50) ── ★ main(),恶意逻辑从这里开始 ├─ sub_140001BA0 → sub_140001B20 atexit 表初始化(CRT 标准) ├─ sub_140001990 (0x140001990) 隐藏控制台窗口 ├─ sub_1400019C0 (0x1400019C0) 切换工作目录到 exe 所在目录 ├─ sub_140001620 (0x140001620) 读取"请勿传播"文件 ├─ sub_1400015E0 (0x1400015E0) 双层 XOR 解密 │ ├─ sub_140001480 第一层:XOR 8字节密钥 52 3E 55 9F 94 68 18 EA │ └─ sub_140001510 第二层:XOR 递减计数器 (0xD1 - i) └─ sub_140001750 (0x140001750) ★ 注入器:自我复制 + APC 注入
|
动态调试
来到入口,并且在x64dbg下一些断点





F9运行,直到断在了创建进程,F8一路执行到返回,发现我们已经处在1750函数中了,说明断点正确,然后我们新开一个x64dbg,然后附加子进程




在这里会发生C2回连,所以我们断点常用的一些网络函数,可能就从参数中找到了C2回连地址。然后我们回到父进程,在这里进行分配内存,修改内存保护,插入线程APC队列和恢复线程的操作,我们断点到ResumeThread,


执行恢复之后,发现附加的子进程被断下来,之后就是F7或者F8一直跟,也可以下断点 
最快的还是直接process monitor监控
