实验吧逆向catalyst-system Writeup

  下载之后查看知道为ELF文件,linux中执行之后发现很慢;

  拖入ida中查看发现有循环调用 sleep 函数:

  

  这是已经改过了,edit -> patch program -> change byte 修改一下比较参数可以去除等待时间,总共去除两处;

  运行之后发现是输入 username 和 passsword 的方式;

  那么问题就在两者上面了。

  反编译之后查看源码,v8对应username, v7为password.

  

  点进第一个函数,在 return 中是对用户名的判断,易推断出用户名为 12 位长度( 0b1100 );

  再看第二个函数,也是对用户名进行判断:

  

  

  

    关于v4, v3, v2 的赋值,切到对应汇编代码处看出以4个子节为一个 Int 进行赋值;之后就是一个三元一次方程,可以得到用户名;

    要注意用户名的顺序因为文件是小端序的,所以为 "catalyst_ceo";

  第三个函数也是验证用户名正确性;

  第四个函数,是对密码的验证,由此可以反推出密码;

  

    srand((unsigned int) seed)是C语言中的一个随机数发生器初始化函数,而种子则为用户名所对应的三个 int 值之和,因为种子为定值,所以rand()产生的随机数序列是不变的;之后写CPP文件得出随机值,linux中运行得到10个随机序列(Linux中返回最大32位随机值,而 Windows 最大为16位),还要注意右边比较值有正负之分,得到总共10个与密码相关的数字,这时再注意到每一个 vx 值都为 Int 型,相当于 4 个char型;

  在这里由用户名和密码就可以获得 flag 了,密码每四个逆序排列;

    Welcome to Catalyst systems
    Loading.
    Username: catalyst_ceo
    Password: sLSVpQ4vK3cGWyW86AiZhggwLHBjmx9CRspVGggj
    Logging in.
    your flag is: ALEXCTF{1_t41d_y0u_y0u_ar3__gr34t__reverser__s33}

  最后一个函数是flag生成:

  

    s为密码串,总共为10*4 = 40 个字符;

    双击byte_6020A0 数据处,刚好40个字符与得到的字符进行异或;

  

    选中数据,edit  -> extractdata 得到数组;

    注意因为程序为小端序,所以最后每四个字符逆序异或;

  

 1 _cmp = [
 2     1441465642,
 3     251096121,
 4     -870437532,
 5     -944322827,
 6     647240698,
 7     638382323,
 8     282381039,
 9     -966334428,
10     -58112612,
11     605226810
12 ]
13 _rand = [
14     0x684749,
15     0x673ce537,
16     0x7b4505e7,
17     0x70a0b262,
18     0x33d5253c,
19     0x515a7675,
20     0x596d7d5d,
21     0x7cd29049,
22     0x59e72db6,
23     0x4654600d
24 ]
25
26 _xor = [
27     0x42, 0x13, 0x27, 0x62, 0x41, 0x35, 0x6B, 0x0F, 0x7B, 0x46,
28     0x3C, 0x3E, 0x67, 0x0C, 0x08, 0x59, 0x44, 0x72, 0x36, 0x05,
29     0x0F, 0x15, 0x54, 0x43, 0x38, 0x17, 0x1D, 0x18, 0x08, 0x0E,
30     0x5C, 0x31, 0x21, 0x16, 0x02, 0x09, 0x18, 0x14, 0x54, 0x59
31 ]
32
33 p = 0
34 L = b‘‘
35
36 for i in range(10):
37     tmp = hex(_cmp[i] + _rand[i])[2:]
38     # print(tmp)
39     while tmp:
40         L += bytes([int(tmp[:2], base=16) ^ _xor[p//4*4 + 3-p%4]])
41         tmp = tmp[2:]
42         p += 1
43
44 LL = b‘‘
45 while L:
46     LL += L[:4][::-1]
47     L = L[4:]
48 print(LL)

  得到flag:ALEXCTF{1_t41d_y0u_y0u_ar3__gr34t__reverser__s33}

原文地址:https://www.cnblogs.com/zUotTe0/p/9535556.html

时间: 2024-07-29 05:52:32

实验吧逆向catalyst-system Writeup的相关文章

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

20155201 李卓雯 <网络对抗技术>实验一 逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode. 三个实践内容如下: 手工修改可执行文

20155210 实验一 逆向与Bof基础

20155210 实验一 逆向与Bof基础 实验内容 1.直接修改程序机器指令,改变程序执行流程 下载目标文件pwn1,反汇编 利用objdump -d pwn1对pwn1进行反汇编 得到: 80484b5: e8 d7 ff ff ff call 8048491 <foo> 是说这条指令将调用位于地址8048491处的foo函数: 其对应机器指令为"e8 d7ffffff",e8即跳转之意. 本来正常流程,此时此刻EIP的值应该是下条指令的地址,即80484ba,但如一解

CTF实验吧让我进去writeup

初探题目 两个表单,我们用burp抓包试试 这时候我们发现Cookie值里有个很奇怪的值是source,这个单词有起源的意思,我们就可以猜测这个是判断权限的依据,让我们来修改其值为1,发送得到如下显示: 代码审计 发现爆出了源代码,让我们来审计一下 $flag = "XXXXXXXXXXXXXXXXXXXXXXX"; $secret = "XXXXXXXXXXXXXXX"; // This secret is 15 characters long for secur

10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析

4. Reader线程_使用EventHub读取事件 使用inotify监测/dev/input下文件的创建和删除 使用epoll监测有无数据上报 细节: a.fd1 = inotify_init("/dev/input") b.假设input下已经有了event0和event1 fd2 = open("/dev/input/event0") fd3= open("/dev/input/event1") c.使用epoll_wait监测fd1.f

好几年才收集到的软件,分享给大家。。。

QQ:365543212Email:[email protected]请按Clrt+F查找,输入软件关键字查询(不要输入版本号),如果找不到,您可以咨询客服.................FD......................12D MODEL 7.0 规划设计232Analyzer v4.1 高级串口分析监测3D Home Architect Design Suite Deluxe 8.0 室内装潢3D Profiler Tools 11.2 For Archicad 113D R

引出泛型,在程序中的使用和作用。

/** *    泛型的概述 *[目标:泛型的由来和基本使用] 1,因为集合可以存储的对象类型是任意的,在取出进行向下转型时,容易发生ClassCastException. 所以JDK1.5以后就有了解决这个问题的技术:泛型. 2,泛型的原理:其实就是在操作的元素类型不确定时,通过传递参数的形式来明确类型. 3,泛型的体现就是 <参数类型变量>用于接收具体的实际元素类型. 4,泛型技术在集合框架中应用非常广泛,只要记住:在使用类或者接口时,如果接口上有明确<>泛型. 在使用时,就传

【BBED】bbed常用命令

[BBED]bbed常用命令         一.1  相关知识点扫盲 BBED(Oracle Block Browerand EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用.该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接.   一.1.1  我的编译代码 ls -l  $ORACLE_HOME/rdbms/lib/*sbbd* ls -l 

C#第一节课作业,HelloWorld

通过第一节课的学习,我们掌握了一些C#的基本知识.无论是C#的名字的由来还是有关Hello World和Console都让我受益匪浅. 回到家后,我首先实验了一下最简单的Hello World▼ 成功了√ 然后,我实验了一下省去System的写法▼ 成功了√ 这之后我又试了一下同文件中的调用▼ 成功了√ 之后是调节字和背景的颜色▼ 成功了√ 之后我尝试了不同文件的调用▼ 成功了√ 然后我试了下分步执行▼ 成功了√ 然后我设置了变量▼ 成功了√ 最后我试验了一下ResetColor的用法▼ 成功了

斯坦福大学操作系统

Pintos-斯坦福大学操作系统Project详解-Project1 前言:  本实验来自斯坦福大学cs140课程,只限于教学用途,以下是他们对于Pintos系统的介绍:  Pintos is a simple operating system framework for the 80x86 architecture. It supports kernel threads, loading and running user programs, and a file system, but it