一、简单的PRNG算法简介

先简单的介绍一下PRNG伪随机数生成算法,网上的教程好多都好复杂,其实对于我们做这道题来讲用不到那么多,只讲最核心的就行:

原理公式:注意那个,这个其实表示上一次生成的随机数会作用到下一次的随机数生成过程中。

写一段很简单的python代码:

seed=*****     #初始随机数种子
Randrom_Num=[]  #生成的所有随机数
for i in range(0,n):   #表示生成n个随机数seed = (seed * a + b) % n   #这个新的seed计算后就是生成的随机数Randr_Num.append(seed)

这就给了我们破解这类题的思路。见下面。

Crypto题目如下。

from Crypto.Util.number import bytes_to_long, getPrime
from flag import flag
a = getPrime(400)
b = getPrime(400)
n = getPrime(400)
flag = bytes_to_long(flag)
seed = flag
result = []
for i in range(3):seed = (seed * a + b) % nresult.append(seed)
print(result)
print(n)
"""
[1633086272556604467630727869278140040711140555507257984778706962389364338237377391272504059109316040445365656669071569236, 1206389051656797336925675372412697477889689141174380289961348552709531162180853687116202278892215286522581909284859193494, 664238088423928246579566483655935746695807924062694495126404306361290788561253706421181510449476188038387172722467882193]
2482696698513566590184292572066254640333143735400366745928208268241117181592178071999744746850718587310205478604372055081"""

二、解密过程

想要解密的话必须有连续生成的三个随机数和模数才可以。

三个随机数分别是lcd0,lcd1,lcd2。然后根据生成算法可得下面的一个方程组。

lcg1=(a*lcg0+c)%m

lcg2=(a*lcg1+c)%m

两式相减

左边为:lcg2-lcg1   右边为:(a*lcg1+c)-(a*lcg0+c)

化简为: [lcg2-lcg1=a*(lcg1-lcg0) ] %m

根据求余运算规则可知
[a=(lcg2-lcg1)*gmpy2.invert(lcg1-lcg0,m)]%m
此时代入lcg0,lcg1,lcg2之后可求得a

代入lcg1=(a*lcg0+c)%m,把c当作未知数放到等式左边后,式子为:
c=[lcg1-(a*lcg0)]%m

#如果怕自己解到的a,c是错的话可以带入第三个式子去试试。
# 类推lcg3_guess=(a*lcg2+c)%m
# 将求得地lcg3_guess与lcg3比较,如果相等,证明求得的a,c,m为正确值
# 否则,m=m+1,继续验证

而一般情况下会把flag当作lcd0输入,所以还需要我们解一元同余式来求最后的flag。

求解一元同余式的方法:照着公式编程就行。下面找的是一次同余式的通解,但是在ctf比赛中实际上只有一个flag,所以只有一个解,因此(a,m)就是1,这样编程的时候公式可以简略好多。

三.写出解密脚本

import gmpy2
from Crypto.Util.number import bytes_to_long, getPrime, long_to_bytesn=2482696698513566590184292572066254640333143735400366745928208268241117181592178071999744746850718587310205478604372055081
result=[1633086272556604467630727869278140040711140555507257984778706962389364338237377391272504059109316040445365656669071569236, 1206389051656797336925675372412697477889689141174380289961348552709531162180853687116202278892215286522581909284859193494, 664238088423928246579566483655935746695807924062694495126404306361290788561253706421181510449476188038387172722467882193]a=((result[2]-result[1])*gmpy2.invert(result[1]-result[0],n))%n
b=(result[1]-(a*result[0]))%n#求解一元同余式得到flag
flag=(((result[0]-b))*gmpy2.invert(a,n)+n)%nprint(long_to_bytes(flag))

PRNG伪随机数的破解方法相关推荐

  1. (MyEclipse) MyEclipse完美破解方法(图)

    http://photo.blog.sina.com.cn/list/blogpic.php?pid=53358777td408badc4071&bid=533587770101dd03&am ...

  2. WinRAR最新版V3.93 破解方法

    WinRAR最新版V3.93 破解方法电脑技术 2010-06-13 13:50:56 阅读2913 评论1 字号:大中小 订阅 修改安装目录下的注册信息.实际上对所有winrar的版本通用.先去官网 ...

  3. Myeclipse 2015 stable 2.0 完美破解方法

    以前写了一篇<Myeclipse 2015 stable 1.0 完美破解方法>,现在跟新一下Myeclipse 2015 stable 2.0 破解方法,此方法来源于贴吧的一篇文章:ht ...

  4. WebStorm 2018版本破解方法

    WebStorm 2018版本破解方法 转载于:https://www.cnblogs.com/yingzi1028/p/9429168.html

  5. Flash Builder4.7极其简单破解方法-三步搞定(亲测)

    资讯类型: 转载 来源页面: http://weibo.com/2101024913/yvmR0D9Df 资讯原标题: 资讯原作者: 丿卓越丶星辰 翻译词数: 词 我的评论: 对这篇文你有啥看法,跟贴 ...

  6. 免费指纹浏览器破解方法之开源代码

    大家做跨境电商肯定都在找指纹浏览器,那么有没有免费的指纹浏览器呢?要想找到靠谱的指纹浏览器,大家可以自己从技术角度去操作.比如说免费指纹浏览器破解方法之开源代码. 通过欺骗您的插件,语言和用户代{过} ...

  7. 解决电信网通封锁路由以及上网机器台数的破解方法

    最新解决电信网通封锁路由以及上网机器台数的破解方法 最近在网通以及电信全部加上了上网机器台数限制,看了很多人用了很多方法!都不是很理想!! 那么我来教大家一个简单的方法!不用软件用硬件来实现两步搞定! ...

  8. VISUAL STUDIO 2008 破解方法

    注册或是破解很简单,有两种方法: 1. 安装完90天试用版后,在"添加或删除应用程序",删除vs 2008,点击"卸载",在卸载里有让输入序列号的地方,把正式版 ...

  9. IntelliJ - idea15.0.2 破解方法

    本文转自:IntelliJ - idea15.0.2 破解方法 资源链接:IntelliJ IDEA 注册码 由于idea 15版本更换了注册方式,只能通过联网激活,所以现在不能通过简单的通用注册码进 ...

最新文章

  1. 读书笔记6pandas简单使用
  2. win32线程学习总结(临界区,互斥体,事件,信号量)
  3. matlab 第二类边界条件,第二类边界条件.ppt
  4. java处理url中的特殊字符%等
  5. 一步步编写操作系统 48 加载内核1
  6. MySQL小问题:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents...
  7. phpcmsV9文章页时间 - 踩坑篇
  8. 聚簇索引和非聚簇索引的区别_学习索引的一些总结
  9. DotNetOpenAuth实践之Webform资源服务器配置
  10. Pytorch——3.1. 热身:Pytorch基础
  11. 马尔科夫链(Markov Chain),机器学习和人工智能的基石
  12. 新媒体运营工具大盘点,收藏方便不备之需!
  13. 【R】ggplot2_堆积图
  14. 微信小黄鸡php,微信表情包小黄鸡含义
  15. 网络在线播放ASF格式流媒体文件的制作(转)
  16. 喉咙肿痛症状似流感 常州一男子延误治疗险送命
  17. 摄像头采集图像本地HDMI输出延迟测试
  18. wpf listview透明但字不要透明_早春松树松针上出现透明液体,不要不在意,可能是松大蚜在危害...
  19. 1. Pandas 导入导出数据
  20. 解决python版本和Windows版本不兼容的问题

热门文章

  1. flink1.12 process方法报错 overloaded method value process with alternatives
  2. h5标签上实现文字空格
  3. 如何启动和退出w8ndows,如何开启/关闭系统休眠功能方法?电脑休眠是什么意思 电脑维修技术网...
  4. GoLang之标准库strings包
  5. 沟通的艺术III:看人之间 之倾听
  6. 图案设计灵感怎么写_设计理念怎么写(室内设计个人设计理念)
  7. 语音识别技术有哪些应用
  8. Failed to receive SOCKS4 connect request ack. 解决方法
  9. 小程序跳转H5页面没有返回按钮解决方案
  10. latex 1图加标题_LaTeX的下载与安装教程