网络安全

48.实验吧——你没有见过的加密(详解)

2018-08-29  本文已影响0人  扶桑啊啊

题目:http://www.shiyanbar.com/ctf/2039

MDEzMjE5MDAyMTg0MTUzMjQwMTQ0MDc3MjUzMDk2MTc1MTUzMTE4MTg4MDEwMDA2MTg4MDA0MjM4MDI1MTA3MTU4MTc5MTM4

请喜欢linux的你,自己动手写出解密代码吧

格式:flag{ }

解题链接: http://ctf5.shiyanbar.com/misc/LoveLinux/test.rar

从解题链接下载,是一段php代码

博客——你没有见过的加密,给出了解密代码

他给出的代码没有直接输出解密的结果,添加一句

echo decrypt("MDEzMjE5MDAyMTg0MTUzMjQwMTQ0MDc3MjUzMDk2MTc1MTUzMTE4MTg4MDEwMDA2MTg4MDA0MjM4MDI1MTA3MTU4

在linux下运行得到flag

flag{you_are_successful}


代码解析:

一、srand函数(srand(函数360百科))

在线程序解释器

当srand函数不使用时,rand函数虽然生成了10个随机数,但多次运行的结果都是一样的。

只有在srand函数生效时,才能实现真正的随机。

ps:time(NULL)返回当前系统时间


二、分析源程序test.php

设输入为a,即用test.php程序对字符a进行加密,逐行解析,得到a的加密结果

加密过程:

1.依次取字符串的每一位

2.将1的各位转成ASCII码值

3.将2的值与生成的随机数进行异或

4.将3的值进行拼接

5.将4的值进行base64加密(base64位加密,将三个字节加密为4个6位的单元)

可以看到对a进行加密为MJE0。


三、分析解密源代码

根据加密过程解密

解密过程应为:

1.对密码进行base64位解密(一串数字,每三位为一个字节)

2.将数字进行分解,每三位合一,组成数组

3.遍历数组,将每位与随机数异或

4.3异或得到的值为字符的ASCII码,将其转化为字符,组成字符串

5.解密成功

上一篇下一篇

猜你喜欢

热点阅读