下载之后查看知道为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 得到数组;

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

  

 _cmp = [
1441465642,
251096121,
-870437532,
-944322827,
647240698,
638382323,
282381039,
-966334428,
-58112612,
605226810
]
_rand = [
0x684749,
0x673ce537,
0x7b4505e7,
0x70a0b262,
0x33d5253c,
0x515a7675,
0x596d7d5d,
0x7cd29049,
0x59e72db6,
0x4654600d
] _xor = [
0x42, 0x13, 0x27, 0x62, 0x41, 0x35, 0x6B, 0x0F, 0x7B, 0x46,
0x3C, 0x3E, 0x67, 0x0C, 0x08, 0x59, 0x44, 0x72, 0x36, 0x05,
0x0F, 0x15, 0x54, 0x43, 0x38, 0x17, 0x1D, 0x18, 0x08, 0x0E,
0x5C, 0x31, 0x21, 0x16, 0x02, 0x09, 0x18, 0x14, 0x54, 0x59
] p = 0
L = b'' for i in range(10):
tmp = hex(_cmp[i] + _rand[i])[2:]
# print(tmp)
while tmp:
L += bytes([int(tmp[:2], base=16) ^ _xor[p//4*4 + 3-p%4]])
tmp = tmp[2:]
p += 1 LL = b''
while L:
LL += L[:4][::-1]
L = L[4:]
print(LL)

  得到flag:ALEXCTF{1_t41d_y0u_y0u_ar3__gr34t__reverser__s33}

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

  1. 20155210 实验一 逆向与Bof基础

    20155210 实验一 逆向与Bof基础 实验内容 1.直接修改程序机器指令,改变程序执行流程 下载目标文件pwn1,反汇编 利用objdump -d pwn1对pwn1进行反汇编 得到: 8048 ...

  2. 20145237 实验一 逆向与Bof基础

    20145237 实验一 逆向与Bof基础 1.直接修改程序机器指令,改变程序执行流程 此次实验是下载老师传给我们的一个名为pwn1的文件. 首先,用 objdump -d pwn1 对pwn1进行反 ...

  3. 网络对抗实验一 逆向及Bof基础实践

    网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...

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

    20155201 李卓雯 <网络对抗技术>实验一 逆向及Bof基础 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,f ...

  5. 20155216 实验一 逆向与Bof基础

    实验一 逆向与Bof基础 一.直接修改程序机器指令,改变程序执行流程 使用 objdump -d pwn1 对pwn1文件进行反汇编. 可知main函数跳转至foo函数,先要使main函数跳转至get ...

  6. 20155222卢梓杰 实验一 逆向及Bof基础

    实验一 逆向及Bof基础 1.实验对象为32位可执行文件pwn1,这个程序主要有main.foo.getshell这三个函数,其中foo函数功能为输出输入的字符串,getshell函数功能为打开一个s ...

  7. # 20155207王雪纯 实验一 逆向与Bof基础

    20155207王雪纯 实验一 逆向与Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...

  8. 20155235 《网络攻防》 实验一 逆向及Bof基础实践说明

    20155235 <网络攻防> 实验一 逆向及Bof基础实践说明 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  9. 20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践

    20145314郑凯杰<网络对抗技术>实验1 逆向及Bof基础实践 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数 ...

随机推荐

  1. 51Nod-1006 最长公共子序列Lcs

    题目链接 Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca ...

  2. 呵呵,Python操作MSSQL的帮助类

    从网上找的,估计原文是:Python操作SQLServer示例 本文主要是Python操作SQLServer示例,包括执行查询及更新操作(写入中文). 需要注意的是:读取数据的时候需要decode(' ...

  3. 服务器Windows 2008R2 C盘清理

    今天因为连服务器的时间慢了很多,然后看了一下C盘的空间,OMG剩下222K.然后一直上网找解决方案. 按照惯例,应该开一个360看看,C盘清理啊,搬家什么的.360告知的竟然是没有可以搬移的,所以,这 ...

  4. 初探WebAssembly

    1.前言 参加完2018年上海的QCon大会,想到了会议中来自Microsoft的朱力旻大佬讲的WebAssembly,感触颇深. 我之前完全没有了解过WebAssembly,之前没有了解的原因也很简 ...

  5. 自己构建一个Spring自定义标签以及原理讲解

    平时不论是在Spring配置文件中引入其他中间件(比如dubbo),还是使用切面时,都会用到自定义标签.那么配置文件中的自定义标签是如何发挥作用的,或者说程序是如何通过你添加的自定义标签实现相应的功能 ...

  6. Oracle 查询结果集行数分析

    本人曾去某金融软件公司面试,交流中面试官问的一个问题是:"如果有 A.B 两张表,A 表中有 2 条数据,B 表中有 200 条数据,请问 SELECT * FROM A,B 能查出多少条数 ...

  7. leetcode — binary-tree-inorder-traversal

    import java.util.Arrays; import java.util.Stack; import java.util.TreeMap; /** * * Source : https:// ...

  8. 三种方法实现CSS三栏布局

    本文由云+社区发表 作者:前端林子 本文会分别介绍三种CSS实现三栏布局的方法,可在浏览器中打开查看效果 1.方法一:自身浮动的方法 实现方法:需要左栏向左浮动,右栏向右浮动,中间设左右margin来 ...

  9. JavaScriptCore全面解析

    本文由云+社区发表 作者:殷源,专注移动客户端开发,微软Imagine Cup中国区特等奖获得者 JavaScript越来越多地出现在我们客户端开发的视野中,从ReactNative到JSpatch, ...

  10. REST API设计指导——译自Microsoft REST API Guidelines(二)

    由于文章内容较长,只能拆开发布.翻译的不对之处,请多多指教. 另外:最近团队在做一些技术何架构的研究,视频教程只能争取周末多录制一点,同时预计在下周我们会展开一次直播活动,内容围绕容器技术这块. 所有 ...