执行完0040175E处的call命令返回值便会存储在lpBuffer对应的缓冲区内,此处即ebp+Buffer所指的空间内。之后调用printf函数,进行格式化输出,其中同样涉及到esp+4,原因也是因为需要将GetComputerNameA获取到的计算机名先入栈,再将“computer name is %s \r\n”入栈。如果你熟悉格式化字符串漏洞的话,你会有一种很熟悉的感觉,当然如果你已经掌握了这里的知识,可以深入去了解格式化字符串漏洞的相关内容。
获取用户名的逆向分析过程与获取计算机名的过程类似,此处不过多介绍了。
然后调用GetVersionEXA函数,返回值将会放置在结构体中。之后将该结构体中的dwMajorVersion成员变量与6对比,dwMinorVersion与1对比,之后使用jnz命令来决定是否跳转,之前的文章将提及过,该命令是jump not zero的缩写,当不等于0时跳转。如果此处不是很熟悉,建议查阅之前的文章,掌握cmp和jnz以及zf标志寄存器的相关知识。再之后便使用puts输出字符串。