GetModuleBaseName:获取文件进程完整路径

EnumProcesses:检索进程中的每一个进程标识符。带三个参数,DWORD 类型的数组指针 lpidProcess;该数组的大小尺寸 cb;以及一个指向 DWORD 的指针 pBytesRrturned,它接收返回数据的长度。DWORD 数组用于保存当前运行的进程 IDs。pBytesRrturned 返回数组所用的内存大小

这里就需要根据main中的分析,以及函数调用规则来判断40312C的值了,eax是GetProcAddress的返回值,GetProcAddress是一个计算机函数,功能是检索指定的动态链接库(DLL)中的输出库函数地址。lpProcName参数能够识别DLL中的函数。

所以,dword_40312C的值是EnumProcessModules的地址

同样的,403128的值是GetModuleBaseNameA的地址

这样就可以理解这样的函数调用了:


函数用法举例如下:

  1. char szPath[MAX_PATH] = { 0 };  
  2. GetModuleBaseName(GetCurrentProcess(), NULL, szPath, sizeof(szPath)); 

所以401000函数功能是:使用GetModuleBaseName,获得模块PID的基本名称,尝试匹配winlogon.exe

猜测恶意代码功能与winlogon.exe有关



在401174中,需要寻找sfc_os.dll:

在4011FC中:

执行了一个新进程

再次拿出Resource Hacker看一眼

有标准的MZ,尝试保存运行,双击~:和动态执行lab1204一样的效果

分析这个在资源节的文件:

看下修改时间

这个文件夹打开之后,发现也需要学习一下

http://blog.sina.com.cn/s/blog_4be92cab0100j36b.html


动态执行exe文件:


和双击wupdmgr.exe一个效果~~~


问题1:401000的功能

猜测是加入启动项


问题2:代码注入了哪个进程

注入的进程是wupdmgr.exe


问题3:LoadLibrary加载了哪个dll

利用Imports


问题4:CreateRemoteThread的参数


返回的是一个地址(细节没弄清楚)


问题5:释放的恶意代码以及功能

释放了winup.exe,位于Prefetch文件夹下,功能是下载恶意文件


PLUS:

看了书后wp,才知道自己完全把代码逻辑理解错了,细节完全不对,只是在大面上的分析和函数功能的猜测对了点

学习细节记录一下

函数401174:

这里汇编是这样的奇怪姿势:

函数的call调用考虑堆栈平衡,函数需要几个参数,就是往上数几个push,所以4011A1的push 2是GetProcAddress的第二个参数,也就是IDA的F5大法显示的那个样子

sfc_ds.dll已经载入到winlogon.exe,在新创建的线程中不需要加载这个DLL,所以没有WriteProcessMemory的调用

在XP下,wupdmgr.exe被用作WIN系统的更新

为了隐藏窗口用0或者SW_HIDE作为uCmdShow参数的值来启动



https://jmprsp.wordpress.com/2016/03/13/practical-malware-analysis-covert-malware-launchinglab-12-04/

https://hunted.codes/writeups/challenges/practical-malware-analysis/practical-malware-analysis-lab-12-4/