![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
恶意代码分析实战
文章平均质量分 91
《恶意代码分析实战》课后练习部分。
Day-3
与君共勉
展开
-
恶意代码分析实战 18 64位
当你运行这个程序却没带任何参数,它会立即退出。main函数有三个参数入栈,分别是一个整数和两个指针。main函数位于0x00000001400010C0处。你可以通过寻找接受一个整数与两个指针作为输入参数的函数调用定位main函数。字符串oc1.exe存储在栈中。这里对字符串进行了检查,如果在不改变二进制程序文件名的前提下,让这个程序运行。为了不修改可执行程序的文件名就能让这个程序运行有效载荷,你需要修补在0x0000000140001213处的jump指令,将其替换为NOP指令。原创 2023-01-25 18:05:39 · 797 阅读 · 0 评论 -
恶意代码分析实战 17 C++代码分析
首先,以①处的一个对new操作符的调用开始,这表明它正在创建一个对象。一个对象的引用会在EAX寄存器中返回最终存储在②处的var_8变量和③处的var_4变量中。var_4变量在④处被移到了ECX寄存器中,这预示着它将被作为函数调用的this指针传递进去。指向URL http://www.praticalmalwareanalysis.com/的一个指针,随后被存储在对象的开头位置,紧接着调用了sub_401040函数。原创 2023-01-25 18:05:16 · 794 阅读 · 0 评论 -
恶意代码分析实战 16 Shellcode分析
切换回来,208处pop指令会将栈顶也就是224这个地址赋给esi,之后push则是将其压栈,mov指令将esi赋给edi,lodsb指令在这里是将esi赋给eax,esi中的地址是224,该地址的值是多少呢?可以看到该地址的值是49h,也就是将49h赋给eax,之后al赋给dl,dl此时的值就是49h,dl减去41h,所得结果左移4位,然后esi自增,变成了225,同样定位225,按d键,结果如下。这个shellcode使用了一种字母编码的方式,攻击负载的一个字节存储在两个编码字节的低4比特位。原创 2023-01-25 18:05:09 · 1479 阅读 · 0 评论 -
恶意代码分析实战 15 加壳与脱壳
分析样本Lab18-01.exe到Lab18-05.exe。原创 2023-01-25 18:05:08 · 495 阅读 · 0 评论 -
恶意代码分析实战 14 反虚拟机技术
恶意代码用存在漏洞的x86指令来确定自己是否运行在虚拟机中。使用IDA载入脚本文件。给出了地址。第一处:这串字符串进行了修改。查看调用函数的位置。使用OD查看,EAX被赋值为了00DDCC000h,将会跳转,而不会创建线程。第二处:检测虚拟机特征。检测到之后,删除自身。第三处:检测到之后不会执行创建服务的操作。使用OD检查可知,所有的操作都会失效。可能与虚拟机的内核数量有关。sidt指令:多核机器上进行实验,ECX寄存器的值不是0xFF,所以失效。原创 2023-01-25 18:04:57 · 681 阅读 · 0 评论 -
恶意代码分析实战 13 反调试技术
首先,将可执行文件拖入IDA中。我们可以看到有三处都调用了sub_401000函数,并且代码都在哪里停止执行。由于没有一条线从这些方框中引出,这就意味着函数可能终止了程序。右侧每一个大框中都包含一个检查,这个检查决定是调用sub_401000函数,还是让恶意代码继续运行。函数sub_401000非常可疑,因为没有从它返回运行,所以进一步研究这个函数。函数sub_401000以一个_exit调用结束,终止了这个恶意代码。原创 2023-01-25 18:04:31 · 564 阅读 · 0 评论 -
恶意代码分析实战 12 对抗反汇编
首先,使用IDA载入该文件。我们可以看到这个程序在地址0040100E处存在一个对抗反汇编技术的痕迹。eax总是被置为零,jz跳转总是被执行。所以我们认为这一行是假冒的call指令,,将004010010置为数据。下面的几行再转换为代码。!这个程序使用一个永远为假的条件分支:xor eax,eax,随后是一个jz指令。这个程序欺骗反汇编器反汇编机器码xE8,它是ca11(占5个字节)指令的第一个字节,然后紧跟着的是一个z指令。永假的条件分支在这个程序中被使用了5次。原创 2023-01-25 18:04:35 · 698 阅读 · 0 评论 -
恶意代码分析实战 11 恶意代码的网络特征
使用WireShark进行动态分析。使用另外的机器进行分析对比可知,User-Agent不是硬编码。请求的URL值得注意。回答:使用了URLDownloadToCacheFileA函数,该函数使用了COM接口,当恶意代码使用COM接口时,HTTP请求中的大部分内容都来自Windows内部,无法有效地使用网络特征进行针对性的检测。可以通过该函数去寻找是什么构造了URL。通过交叉引用,我们发现了这样的一个函数。原创 2023-01-25 18:04:25 · 1160 阅读 · 0 评论 -
恶意代码分析实战 10 数据加密
使用WireShark进行动态分析。有一串字符看起来像是加密的。使用Strings分析一下。发现疑似Base64的存在痕迹。没有发现上面看到的疑似加密的字符串和网址。可能是加密了。使用IDA查找所有xor位置。这里面唯一看着像是加密的是这行命令。:::info:::对字符进行了xor的3Bh操作。交叉引用,进入函数调用处。对资源进行了很多操作。我们怀疑加密数据就在资源节中。使用ResourceHacker查看。使用WinHex进行修改。是一个网址。原创 2023-01-24 21:13:33 · 894 阅读 · 0 评论 -
恶意代码分析实战 9 隐蔽的恶意代码启动
查看程序的导入函数。通过这几个函数,可以推断出是远程线程注入。使用ProMon检测,并没有看到什么有用的信息。使用Proexproer检查。也没有什么有用的信息。拖入IDA中分析一下。将这几个字符串重命名,便于识别。该程序是一个对于PID的遍历。这个函数的作用是检查是否存在explorer.exe这个程序。Buffer表示的字符串是Lab12-01.dll.这段代码所表示的就是对explorer.exe程序进行注入。原创 2023-01-24 21:09:47 · 1594 阅读 · 0 评论 -
恶意代码分析实战 8 恶意代码行为
首先使用strings进行分析。Gina是在 msgina.dll中的。很多有关资源的函数。关于注册表的函数。使用ResourceHacker查看。发现是一个PE文件。保存为dll文件。启动Promon。进入注册表查看。向磁盘释放了一个msgina32.dll。使用WinMD5发现这个dll和我们在资源中提取出来的文件是同一个文件。代码将自己添加到注册表中,使得系统被重启后,msgina32.dll会被重新加载。非常多的以Wlx开头的函数名字,可以判断是gina。原创 2023-01-24 21:05:55 · 1635 阅读 · 0 评论 -
恶意代码分析实战 7 WinDbg
(好奇怪,没看到3)分析该Lab 10-01.sys文件,发现导入表只有三个函数,第一个函数是KeTickCount,剩下两个函数是RtlCreateRegistry和RtlWriteRegistryValue,这告诉我们驱动可能访问了注册表。通过IO通信给驱动发送了控制码0ABCDEF01h,接下来的几个函数初始化了COM对象,并在每30s执行一次某个函数,这个函数有一个参数是这个网址字符串,经过在虚拟机运行程序可知,这是每30s弹出一个广告网页。当打开驱动文件,移动到它的入口时,看到如下代码。原创 2023-01-24 21:00:14 · 1746 阅读 · 0 评论 -
恶意代码分析实战 6 OllyDbg
首先,进行静态分析,使用strings。HTTP/1.0GETSLEEPcmd.exe>> NUL这里有一些东西我们比较在意,我们可以看到该程序对注册表和环境变量进行了一些操作,并且具有网络特征;出现了cmd.exe可能具有远程shell的功能;创建了文件,可能下载了什么东西。接下来进行动态分析,将程序拖入IDA和OllyDbg中,在IDA中查找该函数的起点,然后在OllyDbg中定位到起点,进行分析。原创 2023-01-24 20:56:08 · 1825 阅读 · 0 评论 -
恶意代码分析实战 5 分析恶意Windows程序
本次实验分析lab07-01.exe,lab07-02.exe,先来看lab07-01.exe的问题首先,查看导入函数。OpenSCManagerA和CreateServiceA函数暗示着这个恶意代码可能创建一个服务,来保证它在系统被重启后运行,StartServiceCtrlDispatcherA导入函数提示了这个文件是一个服务。调用了StartServiceCtrlDispatcherA函数,这个函数被程序用来实现一个服务,并且它通常立立即被调用。原创 2023-01-24 20:50:58 · 1119 阅读 · 0 评论 -
恶意代码分析实战 4 识别汇编中的C代码结构
使用Strings进行查看,需要注意最后的这两个字符串,一个是“没有网”,另一个是“联网成功”。IDA 中查看图结构。明显是if-else结构。明显sub_401000函数决定了分界点,点进去看一看:这个函数最后返回的值就是该函数的值,似乎这个if-else 中的内容并没有影响他的返回值,在这这两个流程中都有字符串,可以大致猜测出应该是打印字符串的功能,而sub_40105F函数恰好有两个参数,而字符串恰好是第一个参数,该函数应该就是printf。该程序检查是否有一个可用的Internet连接。原创 2023-01-24 20:48:29 · 735 阅读 · 0 评论 -
恶意代码分析实战 3 IDA Pro
双击进入sub_100038EE函数查看,发现其调用了了malloc函数创建了内存空间,然后又调用了send函数,最后调用了free函数释放内存空间,所以猜测可能是对注册表SOFTWARE\Microsoft\Windows\CurrentVersion进行了修改或查询操作,然后再将结构发送出去。该函数调用了GetSystemDefaultLangID和send,该信息告诉我们,该函数可能通过socket发送语音标志,因此,右击函数名,给他一个更有意义的名字,例如send_languageID。原创 2023-01-24 20:46:32 · 1232 阅读 · 0 评论 -
恶意代码分析实战 2 动态分析基础技术
使用动态分析基础技术来分析在Lab03-01.exe文件中发现的恶意代码。问题ws2_32cks=uadvapi32ntdlluser32StubPathadminWinVMX32-AppData网址是需要注意的,注册表的这个目录也需要注意,CurrentVersion经常用于恶意软件的自启动。拖入PEiD,查看一下是否有壳。由于加了壳,只能看到一个函数表。原创 2023-01-24 20:44:10 · 1805 阅读 · 3 评论 -
恶意代码分析实战 1 静态分析基础技术
对Lab01-01.exe和Lab01-01.dll进行分析首先查看Lab-01-01.exe。然后查看Lab01-01.dll。这两个文件应该都是恶意文件。查看PE文件的结构:通过PE Tools查看文件头:Lab-01-01.exe 编译时间是2010年12月19日 16:16:19.Lab-01-01.dll 编译时间是2010年12月19日 16:16:38.这两个文件编译的时间非常接近,极有可能就是同时编译的。两个文件都没有加壳迹象。原创 2023-01-24 20:39:49 · 1534 阅读 · 0 评论