恶意代码分析实战 Lab14

论坛 期权论坛 脚本     
匿名技术用户   2020-12-21 17:17   258   0

1程序使用URLMON.dll库

注意到存在base相关字符串



2程序调用GetcurrentHwProfile得到计算机硬件配置信息,返回值如下图


接着getusername得到当前用户名,看到返回结果位Administrator


上面两个就是构建网络信令的信息源元素他们最终构造如下图的字符串


然后这个字符被作为参数传递给sub_4010BB函数函数在内部调用sub_401000函数,由base字符串查看关联,知道在sub_401000里面调用了base字符串,推测函数sub_4010BB是base加密函数


看函数调用结果,得到base加密串


接着这个串和另个url地址格式,组合成最终的url地址


然后调用URLDownloadToCacheFileA下载文件,这个文件的内容就是等下调用creatprocess的程序名参数

不过本例中返回的结果位00所以不会创建进程

这个程序的目的仅仅是将,当前用户名和当前计算机配置信息传送给远端机子

注意到特征会随着当前用户的不同(计算机配置信息一般一样)而改变

看nc接到的数据


还有一个值得注意的是base64加密,最后使用a填充,而不是标准的=填充,而%s.png使用的是base64加密后的最后一位,一般是a,所以这一般是固定

创建第一个正则表达是要注意到我们要匹配的是一般不会变化的计算机配置信息,最他的格式存在固定的

HH:HH:HH:HH:HH:HH-至少24位

所以(结合课本)会得到如下正则表达式

[A-Z0-9a-z+\/]{3}6 [A-Z0-9a-z+\/]{3}6 [A-Z0-9a-z+\/]{3}6 [A-Z0-9a-z+\/]{3}6 [A-Z0-9a-z+\/]{3}6 [A-Z0-9a-z+\/]{3}t [A-Z0-9a-z+\/]{1,}

再匹配另个xxxxxx/x.png这个字符串,前面表示至少24个base64字符串\1代表/之前括号里面的捕获的第一个字符

[A-Z0-9a-z+\/]{24,} \([A-Z0-9a-z+\/]\)\ /\1.png

(正则表达式,构建特征检测不熟,有错请指正)


lab14-02

静态分析,知道程序使用WINNET库


并且存在资源节,存放着一个ip


还注意到存在base64加密字符串,还知道了他主要再sub_401000函数里面被调用,所以推测函数sub_401000是base64加解密相关函数


看程序得到资源节里面的url地址



程序输入输出框架如图,创建的第一个线程,会把创建cmd进程的输出读取出来,base64加密传输给远端

而第二个线程会从远端读取命令,然后写到管道2,也就是输入到cmd进程的标准输入,执行,不断这样轮流操作,除非没有数据才结束进程


看运行结果,第一个图是sub_4015c0的请求,第二个图是startaddress的请求包(第一个包收到后,结束另外再开一个nc才能收到第二个包)



解析一下base密文,脚本代码如下(不是标准的base64)

import string
import base64
s=""
tab='WXYZlabcd3fghijko12e456789ABCDEFGHIJKL+/MNOPQRSTUVmn0pqrstuvwxyz'
b64='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
ciphertext='e6LJC+xnBq90daDNB+1TDrhG6aWG6vZ+QBsGi2sVgJdqhZXDZoMMomKGQjBdOhTt0xWGheKsi20mhZWVdlpN8r3TCqx+DYXZBr3UgG0fZoNZjLVoC+aJDbLJ86Vi86Vr873Lo6tHBcLnA7hRebaICmpR87i0973C4c3H8r1N8qaQdlpHBcDHC+4Go6tHBcLnA7hGebaICpVYA6tHC/LZBqVQ96i0A6xS7liM87X0973Fhe1hkG=='
for ch in ciphertext:
 if (ch in tab):
  s+=b64[string.find(tab,str(ch))]
 elif (ch=='='):
  s+='='
x = base64.standard_b64decode(s)
print x
结果如下


进程结束的时候会调用sub_401880函数,函数内部会构造一个/c del [] >nul作为ShellExecuteEx的参数,来删除程序

跟踪一下程序进入线程看一下他们的readfile和writefile都是对哪里操作

readfile是对A0也就是第一个管道的read,进行读操作


看到writefile是对句柄AC也就是第二个管道的write进行写操作


这是对我们之前静态分析的验证

还注意到如果从internetreadfile读取的是exit命令通信会结束.线程才会结束,程序才会结束进而删除自身,否则会一直等待远端的命令


lab14-03

静态分析,程序硬编码,





查看程序sub_401457函数是创建一个文件autobat.exe写入url,然后再读取出来,作为返回值传到参数szurl



然后看sub_4011F3函数

直接到internetreadfile,前面的不难理解

这里调用strstr,返回值是buffer字符串里面<no开始的字符串,


接着调用sub_401000,看参数


进入程序,看流程图,下面一串的比较,实际上是确定是不是<noscritp>

接着'/'分离url,去掉最后的start.htm,看最后的返回值被设为0,这时候var_cc里面是http://www.practicalmalwareanalysis.com


接着再read_buffer里面找http://www.practicalmalwareanalysis.com,返回值赋给var_4,这时候var_4是http://www.practicalmalwareanalysis.comxxxxx开始的一串字符串


接着再var_4里面http://www.practicalmalwareanalysis.com之后(这时候var_4已经变成com之后的地址也就是xxx96'xxx)查找96',找到之后截断96'后面字符串,得到xxx96'


接着被赋值第三个参数buffer也是sub_4011F3的第二个参数


因为实际运行不起来,那个网站读下来的数据没有<no所以只能静态分析,贼难受

最后调用


用/分割第一个参数,所以var_10是xxx,而var_c是/之后的xxx96'(xxx是未知)


看到下面是switch结果,并且关键参数就是取值自var_10,可以看到第一个是64也就是d,第二个是case10是n,case15是s case14是r


一个个分析

看d是下载文件并且运行他

n是返回了也就是结束程序

s是调用sleep

r是重新写autobat.exe文件

注意到这里面d和r都调用了sub_401147函数

没有动态分析,我只能粗略看一下作了什么,应该是用xxx96参数作为索引,来依照下图取值,到函数第二个参数


并且再d里面会作为一个url参数传递给URLDownloadToCacheFile

而再r里面,会被作为数据写到autobat.exe文件,来更新原先存储的url值

分析到此结束,至于说网络特征的构建还是看书好了,我也讲不清楚(求放过)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP