Garbage
题目来源于Flare-on2020,的garbage,题目和PE的文件结构息息相关,记录一下解题思路
garbage
修文件
根据给出的提示,知道这是一个破损的upx加壳的pe文件,首先想到用loadPE进行重建,失败。
查看文件的16进制,最下面可以看到:
这里感觉就是文件并没有写完,然后看到WP,用到一个强大的PEviewer:CFF
得知上图看到的是一个截断的 manifest 段
这个文件可以单独存在,也可以内嵌到PE文件中,默认就是内嵌到PE文件中。保存了程序集所依赖的所有程序集
upx只能用脚本脱壳,程序跑不起来,脚本脱壳报错
1 | upx: upxed.exe: OverlayException: invalid overlay size; file is possibly corrupt |
这里用CFF解析文件。文件里的manifest段错误,所以可以定位到程序的.rsrc
段,因为manifest在rsrc中。 (.rsrc节区可能会存放一个PE文件或者关键字符串)
看到这里的RAW Size和Raw Address,地址是从9E000开始的,大小是400h,再回到winHEX,程序的大小应该是在(9E00+0X400)大小,这样直接用0补全程序大小,然后upx可以顺利脱壳了。
脱壳之后,ida打开
看到这样的信息,没有成功的解析出函数,在之前遇到的一个病毒,在进行aspack脱壳之后也遇到了这样的问题。
没有函数,那就要去看一下她的IAT,ida找到import窗口,啥也没有,确定问题就出现在这里,回到CFF继续修题
看到名字这里是空的,点击这里,会看到:
这些函数,这些函数百度得知在kernel.dll文件里,这里将名称补全,下面哪一行也一样
这是再用ida打开程序,可以正常分析了
分析
看到WriteFile
,第二个参数是写进去的内容,直接分析上面那函数:
1 | _DWORD *__thiscall sub_401000(_DWORD *this, int a2, int a3, int v11, int a5) |
结合上面给出的字符串,进行 解密
1 | v10 = "nPTnaGLkIqdcQwvieFQKGcTGOTbfMjDNmvibfBDdFBhoPaBbtfQuuGWYomtqTFqvBSKdUMmciqKSGZaosWCSoZlcIlyQpOwkcAgw " |