window下的随机数与随机数种子——[MTCTF 2021]Random

news/2025/1/20 5:49:25/文章来源:https://www.cnblogs.com/demo41/p/18239045

题目

 Die 

 IDA 

main函数

 dword_1B336C 与 v7 ,是两个记录循环次数的计数器

红框:加密逻辑,很简单

绿框:成功条件,需要满足两个,第一个是 dword_1B336C == 43 ,当 dword_1B336C 不等于43的时候进入else,然后需要满足条件 input[v9] == key[v8] 与 v7 == 42 

 

key

  0x3E, 0xCD, 0xAA, 0x8E, 0x96, 0x1F, 0x89, 0xCD, 0xDB, 0xF1, 0x70, 0xF2, 0xA9, 0x9C, 0xC2, 0x8B, 0xF2, 0xFE, 0xAD, 0x8B, 0x58, 0x7C, 0x2F, 0x03, 0x4A, 0x65, 0x31, 0x89, 0x76, 0x57, 0x88, 0xDF, 0xB8, 0xE9, 0x01, 0xE9, 0xDE, 0xE5, 0x86, 0x68, 0x8F, 0x24, 0xD3, 0x5A

 

第一种解题方法

编写逆向脚本时,需要注意下面的代码

在满足第一个条件的循环中,里面又调用了mian函数

 这里通过动调给大家看看顺序

做好断点标记

第一轮运行main

第一次进行rand(),及srand()

 第一轮main中调用mian

 F7,进去第二轮main

在进行第二次异或操作前,进行了第二次rand(),及srand()

综上,在两次异或操作之间,夹着两组and(),及srand(),使用第二个随机数设置种子并生成第三个随机数,用于第二轮异或操作

EXP1

#include<stdio.h>
#include<stdlib.h>
void main() {unsigned int  v4, v6;unsigned char v5;unsigned char ida_chars[] ={0x3E, 0xCD, 0xAA, 0x8E, 0x96, 0x1F, 0x89, 0xCD, 0xDB, 0xF1,0x70, 0xF2, 0xA9, 0x9C, 0xC2, 0x8B, 0xF2, 0xFE, 0xAD, 0x8B,0x58, 0x7C, 0x2F, 0x03, 0x4A, 0x65, 0x31, 0x89, 0x76, 0x57,0x88, 0xDF, 0xB8, 0xE9, 0x01, 0xE9, 0xDE, 0xE5, 0x86, 0x68,0x8F, 0x24, 0xD3, 0x5A};for (int i = 0; i < 44; i++) {v4 = rand();     // 生成第一个随机数srand(v4);       // 使用第一个随机数设置种子v4 = rand();     // 生成第二个随机数srand(v4);       // 使用第二个随机数设置种子v4 = rand();     // 生成第三个随机数v5 = ida_chars[i] ^ v4; // 进行异或操作printf("%c", v5); // 输出结果字符
    }
}

 

第二种解题方法

如果你实在是摸不清到底有几组rand于srand,可以试试这个手搓方法

加密操作重点是与随机数异或,那如果我们能得到每次进行随机数呢?

在关键代码上断点

 随机输入一串

第一次异或

随机数存放在 al 里,查看eax最后两位的值: 0x58 

 第二次异或: 0xA1 

第三次异或: 0xCB 

 以此类推,得到43个随机数

0x58,0xa1,0xCB,0xE9,0xED,0x2C,0xEC,0xFB,0xE9,0xC4,0x16,0x97,0x99,0xb1,0xa4,0xe9,0xc3,0xc6,0x80,0xBF,0x3e,0x44,0x18,0x2e,0x73,0x56,0x52,0xB8,0x5B,0x66,0xED,0xBC,0x8a,0xd8,0x36,0x8f,0xe6,0xd3,0xb1,0x51,0xb9,0x59,0xd3,0x5a

EXP2

rand_num = [0x58,0xa1,0xCB,0xE9,0xED,0x2C,0xEC,0xFB,0xE9,0xC4,0x16,0x97,0x99,0xb1,0xa4,0xe9,0xc3,0xc6,0x80,0xBF,0x3e,0x44,0x18,0x2e,0x73,0x56,0x52,0xB8,0x5B,0x66,0xED,0xBC,0x8a,0xd8,0x36,0x8f,0xe6,0xd3,0xb1,0x51,0xb9,0x59,0xd3,0x5a]
key=[0x3E, 0xCD, 0xAA, 0x8E, 0x96, 0x1F, 0x89, 0xCD, 0xDB, 0xF1, 0x70, 0xF2, 0xA9, 0x9C, 0xC2,
0x8B, 0xF2, 0xFE, 0xAD, 0x8B, 0x58, 0x7C, 0x2F, 0x03, 0x4A, 0x65, 0x31, 0x89, 0x76, 0x57, 0x88,
0xDF, 0xB8, 0xE9, 0x01, 0xE9, 0xDE, 0xE5, 0x86, 0x68, 0x8F, 0x24, 0xD3]
flag = ""
for i in range(len(key)):flag += chr(key[i] ^ rand_num[i])
print(flag)

flag

flag{3e625fe0-fb18-4f87-93c1-1ec217f86796}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/722022.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NAS】绿联NAS UGOS PRO 使用natfrp(Sakura Frp)内网穿透访问Docker应用

配置加速 https://registry.cn-hongkong.aliyuncs.com 下载镜像 创建容器 【容器】-【创建】-【手动创建】- 选择你下载的镜像即可在日志中查看密码访问容器 以HTTPS方式访问容器输入从日志中得到的密码。 然后去官网查看访问密钥(不知道官网的就去看截图上的URL)将得到的密钥…

靶机练习:born2root

信息收集 扫描全端口以发现服务发现端口80端口信息: Secretes Company / robots.txt / Wordpress-blog 访问80端口web服务About Us的用户名可以记录下来:Martin Hadi Jimmy robots.txt 有两个路径: /wordpress-blog /files 分别访问一下好像暂时没什么东西,拿用户名可以先爆破…

【进程间通信】——共享内存

目录共享内存 (Shared Memory)前言虚拟内存驻留内存System V 共享内存函数及其用途 Unix系统的System-V版本中就引入了三种进程间通信方式,分别是消息队列、共享内存、信号量集。这三种通信方式也被称为System-V IPC对象。 共享内存 (Shared Memory) 前言 ​ 在下文或接下来的…

对题目集4~6的总结

1.前言答题判题程序-4是前几次题目迭代,在前几次的基础上新增加了选择、填空题,按照之前的思路拓展即可。 家居强电电路模拟程序-1、2总体难度适中,不过与普通的信息处理相比,分配电压要考虑更多情况。2.设计与分析答题判题程序-4点击查看题目 设计实现答题程序,模拟一个小…

Linux之系统故障汇总

一、系统可能会出现的故障 1、管理员密码忘记 2、系统无法正常启动grub损坏(MBR损坏、grub配置文件丢失) 系统初始化故障(某文件系统无法正常挂载、驱动不兼容) 服务故障 用户无法登录系统(bash程序故障)3、命令无法运行 4、编译过程无法继续(开发环境缺少基本组件) 二、单用户…

Microsoft 收集分享

链接:https://pan.baidu.com/s/13Lw4B6Qxq5Y65sAXwWOXYA?pwd=l9wj Windows Server 2022SW_DVD9_Win_Server_STD_CORE_2022_2108.33_64Bit_English_DC_STD_MLF_X23-75607.ISO SHA256:5B4721A21DF2E2D7C20803BB9D64C2B5BF6ED72E612480CF9298969001B65CE8 updated May 2024SW_DV…

一文搞懂 ARM 64 系列: 寄存器

一文搞懂 ARM 64 系列: 寄存器ARM 64中包含多种寄存器,下面介绍一些常见的寄存器。 1 通用寄存器 ARM 64包含31个64bit寄存器,记为X0~X30。 每一个通用寄存器,它的低32bit都可以被访问,记为W0~W30。在这31个通用寄存器中,有2个寄存器比较特殊。 X29寄存器被作为栈帧寄存器…

Vue第三方库与插件实战手册

这篇文章介绍了如何在Vue框架中实现数据的高效验证与处理,以及如何集成ECharts、D3.js、Chart.js等图表库优化数据可视化效果。同时,探讨了Progressive Web App(PWA)的接入与优化策略,以提升Web应用的用户体验与加载速度。title: Vue第三方库与插件实战手册 date: 2024/6/8 …

JPG的解码流程

JPG的解码流程创建解码对象,并且对解码对象进行初始化,创建错误处理对象,并和解码对象进行关联。打开待解码的jpg图片,以二进制方式打开文件读取待解码的jpg图像信息设置解码参数(可选) 开始解码循环读取解码对象中的颜色分量(以行扫描)解码完成,释放解码

C语言实验六

#include <stdio.h> #include <string.h> #define N 3 // 运行程序输入测试时,可以把这个数组改小一些输入测试 typedef struct student {int id; // 学号 char name[20]; // 姓名 char subject[20]; // 考试科目double perf; …

oracle 表管理

主键自增策略 参考: Oracle实现主键自增有4种方式 Oracle 自增长主键 三种方式 Oracle中sequence(序列)详解 mybatis+oracle数据库新增数据,返回主键,主键回显 oracle 数据类型 Oracle中的数据类型详解 创建表 create table sys_dict_type( id number(20) primary key, nam…