Lab 1-3
问题
1.将Lab01-03.exe文件上传….(略)
解答: 略
2.是否有这个文件被加壳或混淆的任何迹象?如果是这样,这些迹象是什么?如果改文件被加壳,请就行脱壳,如果可能的话。
解答: 这个还是要用老方法看看
这里没显示C++
或者C
什么的,虽然结果也没显示常见的UPX
壳,但是无疑这个加壳了的,壳的名称叫做FSG
然后我们用Dependency Walker
确认一下
可以看到很少的导入函数,可以确认这是加壳了的了
然后我们开始尝试脱壳,因为这不是UPX
的壳,所以我们就不能用UPX
的工具来做了
我这里用了一个万能脱壳的工具,不知道哪个大神写的,这个可以脱壳(书中是说等学到手动脱壳的时候,再来脱壳,我们现在能脱先脱了再说)
我们已经用这个工具脱壳完毕
有没有任何导入函数能够按时出这个程序的功能?如果是,是哪些导入函数,他们会告诉你什么?
解答: 这个我们还是按照老方法来
(因为书中并未脱壳,所以下面分析只是作者本人分析,有不正之处望指出)
第一个导入的库是MSVCRT.DLL
,这是一个提供基础函数的库
msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件(MicrosoftCRuntimeLibrary),其中提供了printf、malloc、strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能
放大之后,我们可以发现这些function基本都有点难懂的样子
__getmainargs 这个如果你有C语言的编程经验就好理解了,这是从stdin获取程序参数的函数,说明这个程序会从用户输入获得运行所必须的参数
_controlfp 这个函数从MSDN上的解释来说,是
Get and set the floating-point control word.
,翻译过来就是获取并设置浮点控制字,这个函数在MSDN中的定义是这样unsigned int _controlfp( unsigned int new , unsigned int mask );
,对这个函数具体做什么感兴趣的同学可以点这里 -> _controlfp_except_handler3 同样引用MSDN的说法,
内部 CRT 函数。 由框架用于查找相应的异常处理程序,以处理当前异常
,说明这个程序有一个自己的错误处理机制__set_app_type
设置当前应用类型。
,有这么几种方式,_UNKNOWN_APP 未知应用程序类型;_CONSOLE_APP 控制台 (命令行) 应用程序;_GUI_APP (GUI) Windows 应用程序。
__p_fmode
指向_fmode 全局变量的指针,它为文件 I/O 操作指定默认 文件提交模式。
,这个函数只供内部调用。__p_commande 这个函数MSDN里面没用文档化,根据上面那个的解释推理,这是指向commande全局变量的指针,也是只供内部调用(因为前面两个下划线)
_exit 这个就好理解了,是程序的退出函数的
_XcpFliter 这也是MSDN里面未文档化的函数,暂时用途不明
__p_initenv 这也是MSDN未文档化的函数,不过我们知道
initenv
函数是初始化环境变量的函数,那同理可得__p_initenv
是指向initenv变量的指针,也是只供内部调用_initterm
调用所有的静态构造的模块中是通过函数指针阵列枚举,依次调用每一个指针的一个简单的事情
,按照文档的解释,这个编译器会帮你完成__setusermatherr
指定用户提供的事务来处理算术错误,而不是_matherr事务。
_adjust_fdiv 这个也是未文档化的函数
上面的分析其实都是一些很少会用到的函数,这些带下划线的函数都是编译器自动生成的,但是在没有更多信息的时候,我们只能分析这些函数来了解程序想做什么
下面一个函数库是OLEAUT32.DLL
oleaut32.dll是对象链接与嵌入OLE相关文件,但是我们发现这个导入函数表函数名都是不明,然后这个就不分析了
下一个函数库是OLE32.DLL
ole.dll文件是链接和嵌入在应用程序中的对象的过程文件。它是用于编写和整合来自不同应用程序的数据在Windows作业系统的骨干部分。
这个函数不太懂,不分析了
4.哪些基于主机或基于网络的迹象可以被用来确定这个恶意代码所感染的机器?
解答: 先去看看String里面有什么内容
发现并无什么值得注意的信息,而且字符串都显示乱码,说明可能这个程序不止一次加壳,但是我们用PEiD
看的话会发现这个程序已经显示是C++
了
所以现在我们可以看到的也就这些信息
本文完