GetModuleBaseName:获取文件进程完整路径
EnumProcesses:检索进程中的每一个进程标识符。带三个参数,DWORD 类型的数组指针 lpidProcess;该数组的大小尺寸 cb;以及一个指向 DWORD 的指针 pBytesRrturned,它接收返回数据的长度。DWORD 数组用于保存当前运行的进程 IDs。pBytesRrturned 返回数组所用的内存大小
这里就需要根据main中的分析,以及函数调用规则来判断40312C的值了,eax是GetProcAddress的返回值,GetProcAddress是一个计算机函数,功能是检索指定的动态链接库(DLL)中的输出库函数地址。lpProcName参数能够识别DLL中的函数。
所以,dword_40312C的值是EnumProcessModules的地址
同样的,403128的值是GetModuleBaseNameA的地址
这样就可以理解这样的函数调用了:
函数用法举例如下:
- char szPath[MAX_PATH] = { 0 };
- 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参数的值来启动