您的位置:首页 > 编程语言

恶意代码分析实战 Lab 6-4 习题笔记

2017-09-20 12:48 375 查看

Lab 6-4

问题

1.在实验6-3和6-4的main函数中的调用之间的关系的区别是什么?

解答: 和以前一样,先按照书中的步骤走一遍

先是静态分析



导入的函数都和
Lab 6-3
一样

字符串的话

也基本差不多,都和上一个程序一样,除了这点之外



然后这里会出现一个格式输出符
%d


这是上一个程序里没有的



然后会发现这个代码的结构和上三个都不一样



我们从开始,这里和原来一样,调用
sub_401000
sub_401000
返回的是此时网络连接的状态,如果是不可用的状态,就返回
0
,反之返回
1


然后下面比较返回值和
0
的关系,如果返回值不等于
0
,则
ZF=0
,然后
jnz
跳转

跳转之后就继续执行其他的函数,反之如果返回值等于
0
,那程序就跳转结束了,并且返回
0


如果连接可用的话,继续查看这个代码就



这里程序将一个值
0
赋给了
var_C


然后无条件跳转到这里



var_c
5A0h
比较,再根据比较结果跳转,
jge
是有符号大于跳转,现在
var_C
0
,所以这个跳转是不会实现的,那我们继续看,他不跳转之后会执行什么



函数不跳转之后,来到了这里,把
var_C
压入了栈中,然后调用了
sub_401040
这个函数

这个函数是调用
InternetOpenA
来初始话一个网路连接,然后调用
InternetReadFile
来从网络获取文件,最后比较获得文件的头四个数是不是
<!--


最后返回第五个字符



我们可以将这个函数重命名为
GetCommand
之类的

最后获得返回值之后,
test
一下是不是为
0
,如果是,则跳转结束,如果不是,继续执行



var_8
是程序从网页中获得的命令,压栈
var_8
和一个字符串,之后调用
sub_401285
,这个函数打开我们可以发现就是
printf
函数,之后又压栈了一些参数,再调用
sub_401150
,这个函数我们分析过,其实就是那个
switch
语句,如果参数等于
a
,
b
,
c
,
d
,
e
之类的,会执行不同的操作,我们可以将这个函数命名为
CommandSwitch
之类的

然后函数睡眠
60
s,再跳到
loc_401251
的位置执行



这个代码是将刚刚被push进去栈中的数据赋值给
eax
,然后将
eax
增加
1
,然后又把这个值返回栈中,有点像C语言的
i+=1


然后便是函数又跳回到这个程序开始的地方



不过这时候
var_C
已经变成
1


关系就是这么个关系

2.什么新的代码结构已经被添加到main中

解答: 新的代码结构我们刚刚已经说了其实,如果对C语言很熟的同学马上就会看出来,这其实就是个
for
循环



3.这个实验的解析HTML的函数和前面实验中的那些有什么区别

解答: 书中的说法是

会调用
sprintf
函数来对输出进行格式化

也就是会改变
User-Agent
的值



arg_0
是函数最后push进栈的参数



也就是
var_C
的值,
var_C
的值代表了函数
已经
循环的次数,这里并不是函数已经运行的分钟数(书中解答有点潦误)

4.这个程序会运行多久?(假设它已经连接到互联网。)

解答: 因为这个
for
循环是这样的

for(int var_C = 0; var_C <= 5A0h; i++)


这里要注意
i++
++i
的区别,
i++
是在函数的最后执行完了之后才
+1
,而
++i
是立马就把
1
加上了,
IDA
中显示
+1
是在最后,所以我们这里用
i++


5A0h
翻译过来就是
1440d
,然后这样算过了,这个函数会执行
1440
次,一次会休眠
60
s也就是一分钟,除去运行程序本身的时间,这个函数会运行
1440
m,也就是
24
h,也就是
1
day

5.在这个恶意代码中有什么新的基于网络的迹象吗?

解答: 新的基于网络的迹象就是这个程序运行次数会写在
User-Agent
里面,我们可以通过这个来确定这个程序已经运行了多少分钟多少次了

6.这个恶意代码的目的是什么?

解答: 和上一题一样,只是加入了
for
循环

本文完
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  代码分析 病毒