原程序分析
基本文件信息
ExeInfo 查看文件信息,PE32位且有壳
Ollydbg 入口点代码如下
脱壳后
单步跟到OEP,dump内存修复IAT,成功脱壳后用 Die 查看编译语言为 Delphi7
IDA 和 OD 的入口代码
反沙箱手段
消息循环
复杂的消息循环,使用了定时器消息,以及自定义 SendMsg,发送大量消息,使程序的运行时间延长
设备上下文
长时间消息循环到达核心代码区,里面又有许多的动态解密函数以及大量的GetDC和GetStockObject,既消耗了一定的时间又消耗了大量的内存资源
Sleep
最关键的手段还是一个 Sleep(),Sleep了4分钟
释放文件
Call下断
程序的很多代码都是动态解密的,不用跟具体的解密过程,直接在 call 跳转时下断即可。如图在释放文件的关键call下断,注意先 Patch 掉之前的 Sleep
OD粗略分析
F7 跟过去分析,发现先是获取了一些 API,然后创建一个进程,再是写入数据到子进程
IDA详细分析
使用ODScript的dma指令dump这段内存,然后IDA打开静态分析!先是GetProcAddress获取多个 API 的地址,然后CreateProcess创建自身路径所在的一个进程,传入CREATE_SUSPENDED使其挂起,利用ZwUnmapViewOfSection卸载原来所有区段以及RtlZeroMemory将内存区域置0,VirtualAllocEx配合WriteProcessMemory写入新的数据,利用SetThreadContext和ResumeThread修改程序的入口点,且恢复挂起进程运行