首页
社区
课程
招聘
[原创]看雪.Wifi万能钥匙 CTF 2017 第15题Writeup
发表于: 2017-6-30 19:16 3723

[原创]看雪.Wifi万能钥匙 CTF 2017 第15题Writeup

2017-6-30 19:16
3723

此题壳及混淆比较麻烦,没搞定,但是可以dump绕过壳,主要算法在luajit虚拟机内,整体算法比较简单,就是两个异或。所以完全可以不用理会混淆。下面说下过程。

拖进ida,发现有壳,其中还有混淆,有大量跳转。于是动态了下,由于真实指令在就混淆跳转中,没找到入口,放弃此办法。

直接运行程序,查看了进程,只有一个进程,直接dump。原文件大小是999kb,dump出来的有3M之多。

将dump出来的文件直接拖进ida,查看字串,发现多处含有lua字样的字串,包括LuaJIT 2.1.0-beta3Lua 5.1,估计是lua的虚拟机了。继续翻看,发现了程序的输入提示Pls Input Serial Number:,其上下还有mainWrong!\r\nCongratulations!\r\n,查看其引用,只有main找到了显式引用,位置在4021EC,大致看了下,此位置代码很可疑,而且main这个词也很敏感啊,很有可以就是lua脚本的主函数名。

代码比较长,我就不全部上了。此函数或过程的入口应该在401000401005,一波跳转后,过两条nop,来到40103D40103D4021C0为向栈区写数据,这么大段的基本是硬编码的数据很可能是lua的脚本相关数据。

之后就是调用了几个函数,在402210处有个根据函数返回的条件跳转。如果不跳,则返回0。

再看跳转目标处loc_40222C的代码。先是12个sub_412CE0调用,再接着是12个比较,如果不相同则返回0。 根据此处代码,我们可以推测,输入可能是12个,输出肯定是12个,12个比较是最终的校验。 动态验证下,运行程序,od附加,在40103D下断并运行,程序中随便输入回车。成功断下。最后获得栈区的写入数据(前面似乎是luajit的头,也加上了)。

继续往下走,最后到了校验的地方,全部改标志位通过,最后程序打印出成功信息。看来推测是正确的。

更新了下luajit,使用luajit-decomp反解数据,竟然解不出。 我想想觉得luajit太明显了,是不是坑,毕竟函数都没跟,不知道发生了什么,有可能只是luac的脚本。于是更改脚本数据,用luadec解,也是解不出。

后来得到高人指点:应该是luajit,看看版本对不对。我边看边想:不应该啊,我刚更新的,然后就傻眼了:版本不对。我又上了luajit的官网下载页,原来第一个并不是最新版本,只是稳定版本,当时着急没看版本号,就直接下了第一个。

重新下载编译,用luajit-decomp反解,得到:


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

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//