ctf加群题

来源:互联网 发布:手机数据网速慢怎么办 编辑:程序博客网 时间:2024/06/04 21:46

精灵大佬新放出来的加群题, 难度可以去感受一下  ctf学习与交流

反正我等渣滓 都是成这样了  


感谢 p 大佬在群里 放出 tips 

接下来让我去攻略 一下 。。。


2017.3.5


=========================================================================


这一攻略就是。。。一天   。。。都没 解出来 (省略一万字复杂心情)

说说我的解题过程 与 总结

解题过程

首先 在28号的时候拿到题目,当时看了下也就根据提示 rfc4042 解出一层加密,


再看一下 解出第二层


(这里有点小惭愧,群里有人提示了下才看出来,

当时思维应该多发散一下,解出之后真觉得自己比榆木脑袋还笨),


再看 flag.py  哇这么长一串是什么鬼东西。。 搜索相关函数 原来是可执行二进制文件 

开始以为要汇编。。。然后用 ida pro 打开 懵逼 然后搜 汇编相关 逆向  二进制相关 

游离了很久  暂时放在一边

-----------------------------------------------------------

一个星期后 pcat 大佬在群里 给出了tips  然后知道了  pyc 文件这么个东西 

然后搜索  这就需要 了解 python  运行机制了,  然后又折腾了 一下午 把 pyc 还原出来 

(这里 很迷, 中午的时候 就是用的那段代码  一直到下午才有用 =_= ,之后没去追究了,原理清楚就行)

晚上又把解密函数写出来 发现 flag 不对 然后就崩了。。。 开始各种调试,确定不是逻辑问题

那就只有一个问题了,key 不正确,这很伤, key 是通过解密之后 取得的,不确定解密过程是否正确。

-----------------------

第二天  先试一下 各种编码   binary octal hex base64 然后 猜测了下 怕是位数的问题? 就一直试 爆破 

跑了十几分钟后 觉得 这样 不妥(跑一年都不一定跑完) 就改了下  试了 二层解密 key 的后7位数字 (跑完大概一两个小时)

全都不对 除了几条之外全都包含 ascii127 以上的 字符(就是显示乱码的样子。。)没什么思路了。。。。。。。


最后 , 在 p 大佬的耐心 指导下 解出了flag ,上午11 点的时候 知道 key 值不对,解到下午 5点。。 我都 骂我这榆木脑袋了 。。。 

然而大佬非常耐心 一点一点给出提示 (最后就差 直接 把代码打出来了,详细步骤都说出来了。。。)

非常感谢 p 大佬 ( 向 p 神 致敬!) 感谢 !


总结

做完这道题 (我都不好意思说做完。。全程靠提示。。) 发现,要真正独立完全的解析出一道题 需要 涉及 多方面 知识与经验

rfc4020 就不说了(其实根本看不懂=_=),只说 python 相关的 

首先 要还原 pyc 你得 懂 python 运行机制吧  ,

其实 .pyc 文件 就是 python 源码编译后的 PyCodeObject 序列化后的文件 ,

可直接执行, .pyc 的文件 文件头信息 用来检测 python 程序版本 与 文件创建时间,

详细的请戳  http://blog.csdn.net/ncafei/article/details/60466080 里 的那个详细 的链接 


Python  chr( i )  -> character

return a string of one character with ordinal;  0 < i < 256 

unichr(i) -> unicode  character

return a unicode string of one character with ordinal ; 0 <= i <= 0x10ffff

ord(c) -> int 

return the integer ordinal of a one-character  string                  python chr() 和 ord()


最关键的是 key  , 加密函数是给出的,写出解密函数并不难 但是如果 key值不正确  就得不到 设定的  flag 

字符转换 在 加密解密中是一种常见的 手法  

比如  flag 转成 16进制的ascii 码值 ->  666c6167 

变换 可以不止一次 再继续 通过 进制转换成十进制 -> 1718378855 

就这么一串数字 (如果脑子跟我一样不开窍的话 想一天你也想不出来。。)


在python中,使用unicode类型作为编码的基础类型。即

     decode              encode

str ---------> unicode --------->str

python encode() 和 decode() 解码是子编码转 unicode 编码是unicode 转子编码




最后,多思考 多关联想法 多假设 (虽然很多假设会把你带的很偏。。。这个根据经验来。。)




2017.3.8

0 0
原创粉丝点击