-
-
[原创]伪随机数总结
-
发表于: 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
不让直接脱,也不是特征码的问题,那大概率就是手动脱壳
看上去像是程序入口,但实际不是
直接搜jmp
这样就算是脱壳完毕了,用syclla插件导出即可
最后于 2025-3-25 10:22
被j1ya编辑
,原因:
赞赏
他的文章
- [原创]伪随机数总结 5731
- [原创]ida数据修改总结 6423
- [求助]IDA脚本语言选不了python 6862
赞赏
雪币:
留言: