首页
社区
课程
招聘
[原创]伪随机数总结
发表于: 2025-3-25 10:20 5730

[原创]伪随机数总结

2025-3-25 10:20
5730

windows与linux下的随机数机制是不一样的,如果给的是elf文件要求随机序列,需要在linux下编译

一般先设置种子srand(0),然后调用rand

前后两次调用rand生成的随机数不同

去除花指令,感觉还是有点恶心,先往下做

尝试提取出前几个随机数0x1b,0x13,0x13,0x41

用c跑随机数发现和调试的不太一样

往后调试发现伪随机数相关的值和明文异或

且加密过程只有一步异或

伪随机数只取高位

xor rand->交换下标->xor rand->xor string


按理seed生成的伪随机数会很大,与调试结果不符,这也就是题目要求我们调试的原因

一种思路是输入一个flag,得到密文之后xor得到rand1,rand3和ptr,当然可以一位位提取数据

看汇编去找把rax作为地址的内存,记住开始位置后直接跳出循环,全部提取,这题神奇的点在双击数组进去看不到密文

而需要在调试时看看寄存器的值找内存

最后一位爆破即可:flag{78bace5989660ee38f1fd980a4b4fbcd}


还有一种是直接用时间戳,注意要在linux下运行

个人比赛的时候就用了这种,但是rand2的生成循环写反了,以及rand1和rand3的位置没考虑

山东省赛的一道题可以参考:https://mp.weixin.qq.com/s/3PZK2O2PftCqr2mS7vn5wA


upx2023_0.zip

不让直接脱,也不是特征码的问题,那大概率就是手动脱壳

看上去像是程序入口,但实际不是

直接搜jmp

这样就算是脱壳完毕了,用syclla插件导出即可


[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2025-3-25 10:22 被j1ya编辑 ,原因:
收藏
免费
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册