和0304是同一个程序,下面是自己当时对0304的分析

http://blog.csdn.net/kevin66654/article/details/79250908


从IDA里分析main


先分析多次重复出现的402410

&parameters是由三部分字符串连接而成的

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的版本号信息