刚学逆向很多都不懂,本题也是在看了

http://countersite.org/articles/reverse_engineering/136-revers-s-alexctf-2017.html上的writeup

后才有点明白,但还有一些不明白的地方,写这个writeup一方面记录自己的思考过程,一方面给别人一点思路。

首先将题目给的可执行文件拖到IDA中,左侧函数栏找到main函数,F5键可以看到反编译的伪代码:

从上面的变量定义初步判断v7和v8是字符串或是数组之类的变量。

从上面的伪代码,一般系统中输入用户名和密码就会显示登录,我们可以猜测v8是指username,v7是指pasdword,或者相反。

五个关键函数:

sub_400C9A()

可以知道sub_400C9A(v8)返回sub_400C41(i)的返回值,sub_400C9A(i)访问v8的值,当v8中没有值时,记下i,并返回sub_400C41(i),可以判断,i就是v8数组大小而且不会超过49,通过修改sub_400C41(i)如下,可知长度是8或12。

sub_400CDD(v8):

这是对v8的检测,很明显只要解出如下方程就可算出v8.

利用Matlab解方程:

得到

V4 = 1635017059

V3 = 1953724780

V2 = 1868915551

转十六进制,再转ASCII码,V8为:catalyst_ceo,应该是用户名,这里需要把字符串反转,可能是因为存储方式的原因,具体不太明,代码如下:

Sub_4008F7是规定字符范围,没什么用,过

Sub400977(v8,v7)

上面已经计算出v8数组,可以计算srand(a1[1] + *a1 + a1[2])

再看

由此可计算a2,即v7,密码,用到srand和rand都是在C环境下,需在C中计算。

转ascii码(我不会再C中转无符号整型为ASCII码,因此在python中转):

得到密码为:sLSVpQ4vK3cGWyW86AiZhggwLHBjmx9CRspVGggj

最后,在linux中执行catalyst这个可执行文件,由于中间用了sleep函数,会较长时间出现填写用户名和密码的提示,然后输入用户名和密码即可。

也可以用最后一个flag生成函数生成flag,sub_400876(),但是这里的问题是s字符串的问题,双击byte_6020A0,会有发现,s的长度为40,具体为啥他是s,我也不太明白,明白的人可以告诉我。

Flag:ALEXCTF{1_t41d_y0u_y0u_ar3__gr34t__reverser__s33}

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

  1. 第6章 进程控制(3)_wait、exec和system函数

    5. 等待函数 (1)wait和waitpid 头文件 #include <sys/types.h> #include <sys/wait.h> 函数 pid_t wait(i ...

  2. java基础之——类的初始化顺序

    由浅入深,首先,我们来看一下,一个类初始化有关的都有些啥米: 静态成员变量.静态代码块.普通成员变量.普通代码块.构造器.(成员方法?貌似跟初始化没有啥关系) 现在我们来看看她们的初始化顺序, 从性质 ...

  3. Amoeba搞定mysql主从读写分离

    前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...

  4. OCA读书笔记(17) - 移动数据

    Sql*load 1. sql*loader的文件有哪些? 日志文件:概述了作业的成功与失败以及所有相关错误的细节 错误文件(bad file):从输入文件中抽取的行可能会被sqlldr丢弃(原因可能 ...

  5. Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总

    引言:大家都知道“效率”是数据库中非常重要的一个指标,如何提高效率大家可能都会想起索引,但索引又这么多种,什么场合应该使用什么索引呢?哪种索引可以提高我们的效率,哪种索引可以让我们的效率大大降低(有时 ...

  6. Oracle dblink的连接模式的关系测试总结

    这篇主要介绍一下database link由于连接数据库的方式不同遇到的一些问题,我们知道连接ORACLE服务器的模式一般有两种方式:专用服务器连接(dedicated server)和共享服务器连接 ...

  7. 通过锁字符串达到控制并发的效果C#

    lock锁的是地址 而.net有内部机制使得相同的字符串内存地址是相同的(new string)除外 下面上实验代码 using System; using System.Collections.Ge ...

  8. 在android下使用i2c tools

    在android使用i2c tools访问i2c,很方便,可以在https://launchpad.net/ubuntu/+source/i2c-tools 下载最新的i2c tools. 把i2c- ...

  9. 02 SQL 执行

    sql 被保存在 share pool 后, 开始解析, 解析包括语句的语法, 检验及对象, 以确认该用于是否有该对象的权限, 如果这些都通过了, 接下来就要看这个语句之前是否被执行过, 如果是, o ...

  10. explain解析

    MySQL执行计划调用方式执行计划包含的信息执行计划显示内容解读MySQL执行计划的局限MySQL5.6支持OPTIMIZER_TRACE 1.什么是归并排序?将已有序的子序列合并,得到完全有序的序列 ...

随机推荐

  1. bzoj 1753: [Usaco2005 qua]Who's in the Middle【排序】

    --这可能是早年Pascal盛行的时候考排序的吧居然还是Glod-- #include<iostream> #include<cstdio> #include<algor ...

  2. 基于Hexo且在GitHub上搭建博客

    title: 基于Hexo且在GitHub上搭建博客 Welcome to Fofade's Blog! 搭建初衷 大大小小,大学两年,玩了很多,也学了很多. 回首望之,曾经不知道的,现在是知道了,但 ...

  3. 使用Redis存储Nginx+Tomcat负载均衡集群的Session

    配置Tomcat的session共享可以有三种解决方案: 第一种是以负载均衡服务器本身提供的session共享策略,每种服务期的配置是不一样的并且nginx本身是没有的. 第二种是利用web容器本身的 ...

  4. C语言小项目-基于TCP协议和SOCKET编程的网络通信系统

    1.1 功能结构图   网络通信系统一共由4个模块组成,分别是点对点客户端.点对点服务端.服务器中转服务端.服务器中转客户端.这4个模块是成对使用的,点对点客户端和点对点服务端一起使用,服务器中转服务 ...

  5. [Usaco2013 Nov]No Change

    Description Farmer John is at the market to purchase supplies for his farm. He has in his pocket K c ...

  6. C#上机作业及代码Question1

    第一题创建控制台应用程序,利用下面的公式计算 q 的近似值,并运行出 k=10 时 q 的值. 本着开源的精神,献给各位,题目简单,随便写写,功能都实现了,不过现在先上传简单题,有一些难度的题目我先留 ...

  7. Spring抽象JDBC,使用JdbcTemplate

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  8. spring简介及常用术语

    1.引入 在开发应用时常会遇到如下问题: 1)代码耦合性高: 2)对象之间依赖关系处理繁琐: 3)事务控制繁琐: 2.Spring简介 1)Spring概述 什么是Spring: ①Spring是一个 ...

  9. 295 Find Median from Data Stream 数据流的中位数

    中位数是排序后列表的中间值.如果列表的大小是偶数,则没有中间值,此时中位数是中间两个数的平均值.示例:[2,3,4] , 中位数是 3[2,3], 中位数是 (2 + 3) / 2 = 2.5设计一个 ...

  10. C++帮助文档(自己写的)

    以下所有记录几乎都是摘抄自<C++ primer 5th 中文> auto   类型说明符   P61 特点: 1.     定义的变量必须有初始值 2.     通过初始值来推算变量的类 ...