恶意代码分析实战Lab0901
和0304是同一个程序,下面是自己当时对0304的分析
http://blog.csdn.net/kevin66654/article/details/79250908从IDA里分析main
先分析多次重复出现的402410
¶meters是由三部分字符串连接而成的
aCDel是删除符号,&Filename是自身,aNull是>>NULL的终结符号,shell执行之后,exit退出(符号上次的分析,双击后程序删除了自身)
401000函数:
注册表中查询:HKLM\SOFTWARE\Microsoft\XPS\Configuration
接下来一个个分析
v10是传入参数中的最后一个,在402510函数运行之后需要返回1,才不会删除自身
一一剥离分析,长度为4,每个字符都有 if 语句的控制,所以最后一个参数是abcd
今天这个调试都是血泪史啊~~~~~~
又记得当时那个说法了:不用太依赖IDA的F5,因为总会有逻辑性的错误在里面
当argv = '-cc abcd'时,执行的是401280
也是对注册表进行操作:HKLM\SOFTWARE\Microsoft \XPS
这里很奇怪,都是查询的操作,又不像是删除(clear)
当argv = '-c A B C D abcd'时,执行的是401070(A,B,C,D)
你会发现IDA的逻辑是个错的!!!
来分析401070:
注册表打开以及写入操作
注意这里为啥要标红!!!有个空格发现了嘛~~~
argv = '-re abcd'时
参数个数等于2,执行4025B0
GetMoudleFileName:获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。
当4025B0返回0时,执行402900
看到了多个API函数,感觉是开启了什么服务,又像是把文件复制到了system32下,但是去里面搜索又找不到
这里的Src就是我们OD调试的文件位置字符串,Dst就是system32下的那个字符串
ExpandEnvironmentStrings:扩展环境变量字符串,并使用当前用户定义的值来替换这些环境变量字符串
argv = '-in abcd',调用的是402600函数
看到了常见的system32和CreateService!!!问题是,啥也看不到
argv = '-re AAA abcd',调用的是402900函数
可以看到AAA以参数的方式传入了该函数
接下来会调用的是OpenSCManager和OpenService函数
argv = '-in AAA abcd',调用的是402600函数
感觉是可能开启了一个服务的样子,用net start又看不到
简写字母应该是这样的咯:
in:install
re:reinstall
c:clear
分析基本是这样了,但是又回答不了之后的问题,是肯定不到位的所以很奇怪
问题1:如何让恶意代码安装自身
-in AAA abcd
问题2:命令行选项和密码
这个分析应该到位了,有 -in, -re, -c, -cc
密码是abcd
问题3:OllyDbg修补
可以把jnz和jz的跳转更改,使得判断时不进入DeleteSelf的自删除函数
问题4:基于系统的特征
在注册表的HKLM\SOFTWARE\Microsoft \XPS下,写入了Configuration键值
问题5:通过网络命令执行了哪些不同操作
在函数列表里遍历,发现401640函数块有与网络相关的操作
401740函数是InternetDisconnect
401870:关键API是CreateFile和ReadFile和send,本地往服务器写入文件
401790:fread是读文件
4019E0:CreateFile和WriteFile,往本地写入文件
401E60:有点像网络特征的main函数
问题6:网络特征
然后可以看得到一个GET请求,HTTP 1.0的版本号信息