1. 脱壳
查看下载器的PE信息,发现其使用了UPX加壳,所以首先对下载器进行UPX 脱壳。
2. 抓包分析
通过Wireshark查看下载器发送的HTTP请求,发现如下信息:
2.1 下载器发送的第一个请求为:
http://down.72zx.com/xml/web1.xml?winver=6.1
其中如下信息与接下来的HTTP请求相关:
<web>
<id>1</id>
<name>XX软件园</name>
<tag>ONLINEDOWNE</tag>
<xmlurl>
<![CDATA[
http://www.onlinedown.net/api/index.php?action=pc.pconline.soft
]]>
</xmlurl>
<logourl>
<![CDATA[ http://www.onlinedown.net/icon.png ]]>
</logourl>
</web>
2.2 下载器发送的第二个请求为:
其返回的内容为xml格式,其中的downsrc保存了下载的来源:
<downsrc><![CDATA[http://crcfj.onlinedown.net/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://fjmcc.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://nmas.onlinedown.net/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://sdmcc.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://jsmcc5.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://sdmcc2.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://jsmcc2.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://cttnb.onlinedown.net/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://nm.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://sccrc.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://nm.onlinedown.net/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://amcc.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://klrs.onlinedown.net/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://sqyd3.newhua.com:82/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://sqyd4.newhua.com:82/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://zjmcc4.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://hlbr.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://cttxj.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://zjmcc5.newhua.com/down/QQ7.4.zip]]></downsrc>
<downsrc><![CDATA[http://jsmcc4.newhua.com/down/QQ7.4.zip]]></downsrc>
尝试改变HTTP请求中的SoftID来下载其他软件,服务器返回错误结果,因此推断后面的token应该是个参数有效性验证的信息。
现在的问题归结为下载器如何生成softid和token信息。
3. 静态分析
使用IDA对下载器代码进行静态分析。
目前已知信息:
softid为整数: 20355 / 0x00004F83
token是长度为32的十六进制字符串: 9b89c16eeafa0faf120b0f9b78294677
初步静态分析发现:
.text:00569ECC DownloadRealFile proc near ; DATA XREF: .text:00568F5Co
处为下载器启动后与服务器交互并获取下载参数的代码
push offset aWebid_0 ; "webid="
mov eax, off_57FA04
push dword ptr [eax]
push offset aSoftid_0 ; "&softid="
mov eax, off_57F550
push dword ptr [eax]
push offset aToken_0 ; "&token="
mov eax, off_57FA04
push dword ptr [eax+8]
此段代码显示相关信息存放在:
Name | Address |
---|---|
softid | off_57F550 |
token | off_57FA04 |
首先从softid入手:
跟踪地址off_57F550 :
.data:0057F550 off_57F550 dd offset unk_5A569C ; DATA XREF: sub_54C7F4:loc_54C839r
跟踪偏移unk_5A569C :
.bss:005A569C unk_5A569C db ? ; ; DATA XREF: sub_54B2D4+37o
.bss:005A569C ; .data:off_57F550o
.bss:005A569D db ? ;
.bss:005A569E db ? ;
.bss:005A569F db ? ;
在此处设置 read/write 硬件断点。
对token做同样的处理:
跟踪地址off_57FA04 :
.data:0057FA04 off_57FA04 dd offset unk_5A5684 ; DATA XREF: sub_54C7F4+4Br
跟踪偏移unk_5A5684 + 8 -> : .bss : 005A568C :
.bss:005A5684 unk_5A5684 db ? ; ; DATA XREF: sub_54B2D4+27o
.bss:005A5684 ; .data:off_57FA04o
.bss:005A5685 db ? ;
.bss:005A5686 db ? ;
.bss:005A5687 db ? ;
.bss:005A5688 db ? ;
.bss:005A5689 db ? ;
.bss:005A568A<