首页
社区
课程
招聘
[原创]从2018强网杯hide题中学习手动脱壳与算法识别的思路
发表于: 2019-5-16 13:31 7314

[原创]从2018强网杯hide题中学习手动脱壳与算法识别的思路

2019-5-16 13:31
7314

系统 : Linux kali 4.15.0-kali2-amd64 \ win10 64bit
程序 : hide
要求 : 输入口令
使用工具 :ida

使用file命令拿信息:

没什么特殊的,接下来使用strings命令拿信息:

发现upx字样,所以这里应该是加了upx壳保护。

使用upx命令脱壳:

发现没有办法自动脱壳,所以这里只好采用手动脱壳的方式。具体做法是让程序先运行,然后等到数据自动解压/解密出来后,再dump内存组成elf文件进行分析:

hide_dump载入ida,按下Shift+F12查看字符串列表并搜索flag:

双击跟踪第二个字符串:

对敏感字符串aYouAreRight,查看其交叉参考:

先进入第一个函数看看:

进入sub_4009AE函数看看:

所以这就是那个误导人的分支啰?pass掉。

进入第二个地址,发现ida没有将其识别称为一个函数,这里,我们往上搜索,发现0x4C8EF4这个位置不错,将其设定为函数头。光标定位到0x4C8EF4,然后右击Create Functionsub_4C8EF4函数就出现了:

由伪代码可知,字符串格式为qwb{x*16},内容经过一系列的加密和异或,最终与str_y_4C8CB0对比,一致则成功。

首先进入sub_4C8CC0函数:

搜索算法常数key1、2、3、4没有发现有价值的线索,搜索0x676E696C也是如此。

出于对十六进制的敏感,试了一下算法常数的字符串形式是什么样子:

百度搜索ctf gnil,发现此人,也就是本题作者,应该是FlappyPig战队的成员。

根据结构可以知道,这是tea算法,但细节处也有很多不同。不妨搜索>> 11) & 3 tea加密这样由知名加密算法+特殊计算的关键词,很简单知道了这里利用的是xtea算法。

我们对比标准的xtea算法和程序中的算法可知有三点不同

关于第三点,我们在ida中双击v1查看函数栈视图:

v0 占了四个字节,v1占了八个字节,即 sum == HIDWORD(v1)

我们将程序中的xtea算法和异或算法还原出来,按照相反的顺序对给出的密文进行操作,就可以得到flag了。

按照以上推理,编写C++程序如下:

运行结果:

考虑到数据在内存中是以小尾方式存放的,我们使用python脚本转换一下:

运行结果如下:

使用得出的明文加上flag格式,作为给hide程序的输入,并且以Ctrl+D结束输入:

➜  playground file ./hide
./hide: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-5-16 13:35 被顾言庭编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (3)
雪    币: 12317
活跃值: (5073)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

多谢楼主分享哟
2019-5-16 14:02
1
雪    币: 26398
活跃值: (63257)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
3
感谢分享~
2019-5-16 18:06
0
雪    币: 3907
活跃值: (5817)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
4
大佬大佬
2019-6-4 19:19
0
游客
登录 | 注册 方可回帖
返回
//