CTF-Reverse学习-为缺少指导的同学而生

更新日志:

2023-12-22 11:57 发布博客,创建工具列表,创建实验1

2023-12-23 16:46 实验1课后练习添加   “入门逆向-bugku”

Reverse是什么?

        CTF中Reverse题型通常会给你一些与程序相关的程序,往往是一些编译后的程序,然后通过反汇编的方式,窥探和猜测程序的逻辑,并分析程序逻辑,获取解题逻辑。利用解题逻辑,按固定条件执行尘效果或者编写逆向逻辑脚本的方式来获取flag。

        软件代码逆向主要指对软件的结构,流程,算法,代码等进行逆向拆解和分析。

        逆向逆向,逆向的是程序吗,nonono,逆向的是人心,编程人的心。程序是人写的,只要他在开发时走了下神,或者少考虑了一个细节,就会产生漏洞和BUG,绝大多数都会被修复,但完全没有错误的程序是不存在的。

解题步骤

  1. 获取题目附件
  2. 分析文件是程序从开发到编译到运行的哪个阶段的产物
  3. 通过反汇编,猜测源代码等一系列手段,逆向出源代码或者代码逻辑
  4. 分析源代码和逻辑,找到解题思路
  5. 利用解题思路,按顺序执行程序或者编写解题脚本来得到flag

本博客在B站有配套视频,随博客同步跟新,但博客内容的替换和更新会更加频繁。等博主社恐的毛病处理好,视频会重新录制,现在可能有些糟糕。还望大家见谅

Rotten战队-Reverse入门icon-default.png?t=N7T8https://www.bilibili.com/video/BV14g4y1Z7HR/?spm_id_from=333.999.0.0&vd_source=b0baa38241452f542afabdf70d10fca7

一、教学用的题库网址

 我会以NSSCTF,BUUCTF平台的题目做教学,后面也会加其他平台。

NSSCTF网址
NSSCTF平台

BUUCTF
BUUCTF平台
 

二、工具列表

IDA pro 7.7

反汇编工具

链接:https://pan.baidu.com/s/11YzTTBgDzlrg8a_k-raqqw?pwd=6666 
提取码:6666 

解压后

 执行,选择yes即可完成破解

温馨提示:安装目录请不要有中文路径。

jadx-gui 1.4.7

安卓反编译工具

exeinfope

查壳工具

FFI

脱壳工具

MUMU模拟器

安卓模拟器

MuMu模拟器官网_安卓12模拟器_网易手游模拟器

好用!

如果报错显卡问题,请先检查独立显卡的驱动更新,如果CPU带有核显,核显也需要更新

AndroidKiller

安卓反编译工具

kali虚拟机

三、刷题加学习

实验1 字符串泄露(1)

学习目标:
  1. 学会使用Linux中的file指令查看程序位数
  2. 学会使用IDA pro 查找字符串
  3. 学会使用jadx-gui查找安卓程序字符串
1.easyre

BUUCTF平台

题目附件拖入kali,使用file指令查看这个文件,可以看到有X86-64标记,为64位程序

使用64位的IDA打开,如果用32位可能会存在无法反编译等其他异常情况。

点击OK,如果发现缺少第一二行的选项,请检查是否安装错误(只是这道题目,别的题目可能真只有最后的选项)

一路YES,让你选文件夹的点取消

接下来使用shift+F12来查找字符串

有些同学电脑键盘上可能存在键位冲突,这样打开即可

 按CTRL+F执行搜索,输入flag或者{,或者flag{。

即可搜索到flag,如果想复制,请双击这个字符串,在这个页面复制

flag{this_Is_a_EaSyRe}

退出IDA时,勾选DON'T SAVE the database,删除缓存文件,如果你还要再次打开,可暂时保留

2.内涵的软件

BUUCTF平台

你可以看到一个名字很长的文件,建议是将其改成简短的名字,如1.exe,方便使用file指令

file指令看位数,这回带了个Intel 80386标记,是32位的程序

进入后,查找字符串,flag搜不出来

 换{

拿到flag

DBAPP{49d3c93df25caad81232130f3d2ebfad}

3.[BJDCTF2020]JustRE

BUUCTF平台

长度还行,就不改文件名了

 放入kali,file一下,32对吧

IDA 32位打开,{搜到l东西,但直接提交是错误的

双击进去,在这个字符串上按这个,跳转引用它的地方,看看它的伪代码

F5一下,看看伪代码 

 

C语言格式化字符串打印函数,那填个空就好,%d换成后面的数字

flag{1999902069a45792d233ac}

4.helloword

BUUCTF平台(安卓)

得到一个apk,安卓APP文件

模拟器打开

 真只有hello world。那么用jadx-gui反编译查看

 打开之后,文本搜索flag{

 点击进去看看,提交flag正确

B站配套视频

Reserve入门-字符串泄露(1)_哔哩哔哩_bilibili

课后练习
  1. Lucknum-攻防世界平台
  2. 逆向签到题-CTF.SHOW平台
  3. [SWPUCTF 2022 新生赛]base64-NSSCTF平台 (记得base64解码)

 实验2 字符串相等

什么是字符串相等呢?

题目的一般形式是要求你输入一个字符串,然后会要求你输入的字符串经过处理后等于程序内存储的一段字符串。

或者是你输入的字符串等于程序内存储的一段字符串经过特殊处理后生成的新字符串。

学习目标:
  1. 熟悉使用Linux中的file指令查看程序位数
  2. 学会字符串相等问题解题思路
  3. 开始学习理解代码

1.reverse1

BUUCTF平台

得到启动文件

file指令查看位数,为64位,IDA64位打开,shift+F12查找字符串flag,没有直接的flag

点击上图这个 this is the right flag!,然后下图右键,点击红色方框处,查看引用

会来到这个页面

按F5,反编译,看伪代码,分析代码吧少年

注释版本--核心部分:分析可以得出我们的输入要等于Str2将字符串中o换成0后的字符串

Str2字符串内容

也就是

{hell0_w0rld}

打包一下flag

flag{hell0_w0rld}

2.reverse2

BUUCTF平台

得到一个不知道是啥的文件

kali用file指令看一下文件信息

64位ELF文件,那就用64位的IDA,shift+F12查字符串先

一样的操作,查看引用

 

F5反编译,分析吧少年

注释代码,目测输入要和flag变量处理后的字符串相同

写个C语言函数(就是把伪代码转成可执行代码),看看怎么flag变量字符串变的,其实可以不写就是把i,r换成1(手动换也行)

#include <stdio.h>
#include <string.h>
int main(void){

  int n = strlen("hacking_for_fun}");
  printf("字符串长度:%d\n",n);

  //定义flag字符串数组
  char str[17] = "hacking_for_fun}";

  //这里就是上面那个循环
  for (int i = 0; i < 17; ++i) {
    if (str[i] == 'i' || str[i] == 'r')
      str[i] = '1';
  }

  printf("%s",str);
  return 1;
}

运行结果

套上外壳,即是flag

flag{hack1ng_fo1_fun}

3.reverse3

BUUCTF平台

得到的还是exe可执行文件

IDA 32位打开,shift+F12查字符串,发现点东西,base64,就要考虑和base64编码有关系了

定位关键函数,分析

  sub_41132F("please enter the flag:", v7);
  sub_411375("%20s", Str);
  v3 = j_strlen(Str);
  v4 = sub_4110BE(Str, v3, v14);                // 一系列看不懂的操作
  strncpy(Destination, v4, 0x28u);              // 把处理过后的用户输入传递给Destination
  v11 = j_strlen(Destination);
  for ( j = 0; j < v11; ++j )
    Destination[j] += j;
  v5 = j_strlen(Destination);
  if ( !strncmp(Destination, Str2, v5) )        // 和目标字符串Str2比较
    sub_41132F("rigth flag!\n", v8);
  else
    sub_41132F("wrong flag!\n", v8);
  return 0;

 str2 = "e3nifIH9b_C@n@dH"

先把这一步逆向,python脚本

# 目标字符串
s="e3nifIH9b_C@n@dH"

# flag
flag=""

# 源程序逻辑是 
for i in range(len(s)):
    flag+=chr(ord(s[i])-i)

# 输出flag
print(flag)

#e2lfbDB2ZV95b3V9

 然后仔细看那个看不懂的操作,网上搜了下,是base64加密一类的

那就解密一下

 python解法

import base64
# 目标字符串
s="e3nifIH9b_C@n@dH"

# flag
flag=""

# 源程序逻辑是 
for i in range(len(s)):
    flag+=chr(ord(s[i])-i)

# 输出flag
print(flag)

# 还有层base 64
print(base64.b64decode(flag))

#b'{i_l0ve_you}'

CyberChef在线工具解法  CyberChef

 B站配套视频

Reverse入门 字符串相等_哔哩哔哩_bilibili

课后练习

后方内容施工中》》》》》》》》》

  • 18
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
CTF逆向入门是指逆向工程的入门级别的题目,要求参赛选手具有较强的反汇编和反编译的能力,并且能够进行逆向分析。这类题目通常涉及到软件逆向和破解技术。通过解决这些题目,参赛选手可以提高他们的逆向分析能力。 在逆向入门的题目中,通常会给出一段代码或者一个文件,参赛选手需要根据给定的逻辑推导出正确的用户名和密码。例如,在引用中的代码中,通过逻辑判断和计算,可以得到正确的用户名和密码。 另外,在引用中的代码中,输入的字符会根据一定的规则进行转换,然后与给定的字符串进行比较,如果一致则认为成功。 总的来说,CTF逆向入门是一种通过解析逆向工程相关题目来提高逆向分析能力的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [CTF逆向reverse入门脑图](https://download.csdn.net/download/qq_32465127/10744933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Reverse入门[不断记录]](https://blog.csdn.net/weixin_53090346/article/details/129099449)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

予我心安A3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值