逆向入门分析实战(三)
逆向入门分析实战(三)
本文首发于“合天智汇”公众号 作者:xiaoyuer 前情提要:逆向入门分析实战(一):https://www.toutiao.com/i6805482528477020684/
逆向入门分析实战(二):https://www.toutiao.com/i6806187940901814792/
通过之前两篇文章,针对恶意代码为了确保自身只有一个实例在运行进行了正向开发和逆向分析。这种现象在恶意代码中非常常见,现在对上次的内容进行一个简要的回顾和扩展: 使用ida pro对恶意代码进行反汇编时会发现如下特征: 1、可以找到使用了windows的api函数 CreateMutex,该函数其中一个参数为互斥变量名。 2、在调用CreateMutex函数之后,通常会调用GetLastError函数,返回值与ERROR_ALREADY_EXISTS相同,即会使用cmp指令对返回值eax和ERROR_ALREADY_EXISTS对应的常量(16进制的B7,10进制的183)进行对比。 当然,本篇文章不是为了继续讲这个,现在我们应该更加深入的分析其他恶意代码常见的手法,这次分析恶意代码常见的获取计算机基本信息的函数,同样是先通过正向开发,然后进行逆向分析。 通常,恶意代码比较关注的计算机基本信息包括计算机名,计算机用户名,计算机的版本。下面我们就以获取这三个基本信息为例,进行正向开发和逆向分析。 一 正向开发,获取计算机基本信息 首先,我们需要掌握几个知识点: 1、GetComputerName函数,该函数有两个参数,第一个参数是一个缓冲区,用来接收计算机名。第二个参数指定该缓冲区的大小。对于经常使用Python进行编程的人来说,可能觉得有点奇怪,因为以Python语言的风格可能会是这样的: computerName=GetComputerName() 函数无需传递参数,返回值即为计算机名。但是对于windows api很多函数来说,都会是这种风格,用某一个参数用来接收返回值,习惯就好。 2、GetUserName与GetComputerName函数用法十分类似。 3、GetVersionEx是用来获取计算机版本的函数,该函数只有一个参数,我乍一看觉得这个函数还挺简单,肯定和上面两个函数一样直接把返回值即计算机的版本返回到这个参数里了,当我仔细去看MSDN文档时发现,呵,参数居然是lpVersionInfo,这是什么破东西?经过仔细调研发现,这是一个指向OSVERSIONINFO结构体的指针,好吧,当初学C语言的时候就觉得指针这玩意贼烦,现在又来了。那就好好再学习一下指针吧!这个指针指向OSVERSIONINFO结构体,而这个结构体就是用来承载返回值系统版本的。也就是我们先创建一个OSVERSIONINFO结构体,之后把结构体的指针作为参数传入GetVersionEx函数即可,然后再从OSVERSIONINFO结构体中读取相应的系统版本。 接下来看代码:










逆向游乐园第一关
https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182016031811584100001
(通过该实验了解调试工具和反编译工具的使用方法,能够通过分析样本中的详细信息,进行程序的爆破或者算法的还原突破程序的限制。)
声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!