【问题标题】:Python ctypes time(0) and C time(0)Python ctypes time(0) 和 C time(0)
【发布时间】:2022-01-14 21:59:45
【问题描述】:

所以我参加了 2019 picoCTF 二进制挑战种子-sPRiNG,我得到了这个write up 使用此代码:

#include <stdio.h> 
#include <time.h>
#include <stdlib.h> 
  
int main () 
{ 
    int i;
      
    srand(time(0)); 
    
    for (i = 0; i < 30; i++)
    {
        printf("%d\n", rand() & 0xf); 
    }
      
    return 0; 
} 

所以我想在 python 中实现相同的功能。起初我使用了 random 模块,但意识到 C rand 和 python 在它们的实现中相距甚远,所以我决定使用 ctypes:

#!/usr/bin/python3
from ctypes import CDLL

libc = CDLL("libc.so.6")

libc.srand(libc.time(0))


for i in range(30):
    print(libc.rand() % 0xf)

但是当我同时运行它们时我仍然得到不同的输出,我能解释一下为什么会这样

【问题讨论】:

  • 投票结束是一个错字。 &amp;%.

标签: python c binary ctypes ctf


【解决方案1】:

在您的 Python 版本中,您使用 0xf 修改而不是按位进行 &amp; 操作。换句话说,您将结果修改为 15 而不是 16。如果我将 Python 版本切换为使用 &amp; 而不是 %,我会在我的机器上得到相同的结果。

【讨论】:

    猜你喜欢
    • 2022-07-07
    • 1970-01-01
    • 2016-09-06
    • 2011-06-11
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多