很久以前分析的时候写的,最近开始学习分析bootkit类的病毒,记录下
bootcode代码
以WIN7为例(bootcode代码,win7到win10都一样),MBR大小为1个扇区,大小为512(0x200),
第一块选区0x000-0x162为MBR的可执行代码
第二块选区0x163-0x1b2为错误信息显示,查找分区表失败时会在系统显示这些字符
第三块选区0x1be-0x1fd为分区表。
分析VB样本的时候发现有几种混淆方式,记录下。
样本shah:a66f989e58ada2eff729ac2032ff71a159c521e7372373f4a1c1cf13f8ae2f0c
载入vb.idc脚本,脚本分析完后,查看event handle函数,
1 | .text:00463E14 _O_Pub_Obj_Inf1_Ctl_Inf0x3_0x7_lpForm_Load dd offset Hdr_Jmp_Addr_0x46549A ; Ptr to Form Load Event Code. |
_O_Pub_Obj_Inf1_Event0x2
就是处理Form_load的函数,一般malicious code都是在这里实现。
接着往下看。
这里计算处shellcode的地址。0x43AF4B=1526C77h/(sqr(25.0))
1 | .text:00465D83 mov [ebp+var_50], 1526C77h |
usercall不是标准的调用约定,但是用IDA反编译时经常能看到,应该是IDA特有的
1 | int __usercall sub_10017FF0@<eax>(int a1@<eax>, int a2@<ecx>, _BYTE *a3, _BYTE *a4) |
这样的函数声明,这个是IDA自己定义的,这种使用寄存器传参可能是编译时被编译器优化的结果。如上例子则表示参数a1使用eax传递,参数a2使用ecx传递的。a2和a4是压栈
要hook这类函数的时候,我们可以写一个stub函数将usercall转换成调用__cdecl修饰的函数.
1 | // |
在网上搜索调试的方法也很久了,也没有找到方法。无意中在auto_re插件中发现如下这段代码。
1 |
|
Malwar是一个使用了Cuckoo Sanbox的在线恶意软件分析系统,由于它提供一些病毒样本下载,就想能不能写个爬虫把样本下下来。顺便写篇博客记录下。
打开 https://malwr.com/analysis ,我们可以当前页看到有TimeStamp、md5、文件名、文件类型和杀软查杀数,下一页类似。
我写这个的爬虫的目的是下载样本,只关心样本的下载地址,并不关心其他的信息。现在我们可以理清下思路:
获取每一页的网页源码
解析当前页的每一个md5对应的详细信息链接
在详细信息页面解析下载地址。