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

安卓反编译工具

CTF-Reverse学习-为缺少指导的同学而生_第1张图片

exeinfope

查壳工具

CTF-Reverse学习-为缺少指导的同学而生_第2张图片

FFI

脱壳工具

CTF-Reverse学习-为缺少指导的同学而生_第3张图片

CTF-Reverse学习-为缺少指导的同学而生_第4张图片

MUMU模拟器

安卓模拟器

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

好用!

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

CTF-Reverse学习-为缺少指导的同学而生_第5张图片

AndroidKiller

安卓反编译工具

CTF-Reverse学习-为缺少指导的同学而生_第6张图片

kali虚拟机

三、刷题加学习

实验1 字符串泄露(1)

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

BUUCTF平台

CTF-Reverse学习-为缺少指导的同学而生_第7张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第8张图片

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

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

CTF-Reverse学习-为缺少指导的同学而生_第9张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第10张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第11张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第12张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第13张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第14张图片

flag{this_Is_a_EaSyRe}

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

CTF-Reverse学习-为缺少指导的同学而生_第15张图片

2.内涵的软件

BUUCTF平台

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

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

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

CTF-Reverse学习-为缺少指导的同学而生_第16张图片

 换{

CTF-Reverse学习-为缺少指导的同学而生_第17张图片

拿到flag

DBAPP{49d3c93df25caad81232130f3d2ebfad}

3.[BJDCTF2020]JustRE

BUUCTF平台

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

 放入kali,file一下,32对吧

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

CTF-Reverse学习-为缺少指导的同学而生_第18张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第19张图片

F5一下,看看伪代码 

CTF-Reverse学习-为缺少指导的同学而生_第20张图片

 

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

flag{1999902069a45792d233ac}

4.helloword

BUUCTF平台(安卓)

得到一个apk,安卓APP文件

模拟器打开

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

CTF-Reverse学习-为缺少指导的同学而生_第21张图片

 打开之后,文本搜索flag{

CTF-Reverse学习-为缺少指导的同学而生_第22张图片

CTF-Reverse学习-为缺少指导的同学而生_第23张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第24张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第25张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第26张图片

会来到这个页面

CTF-Reverse学习-为缺少指导的同学而生_第27张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第28张图片

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

Str2字符串内容

CTF-Reverse学习-为缺少指导的同学而生_第29张图片

也就是

{hell0_w0rld}

打包一下flag

flag{hell0_w0rld}

2.reverse2

BUUCTF平台

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

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

CTF-Reverse学习-为缺少指导的同学而生_第30张图片

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

CTF-Reverse学习-为缺少指导的同学而生_第31张图片

一样的操作,查看引用

CTF-Reverse学习-为缺少指导的同学而生_第32张图片

 CTF-Reverse学习-为缺少指导的同学而生_第33张图片

F5反编译,分析吧少年

CTF-Reverse学习-为缺少指导的同学而生_第34张图片

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

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

#include 
#include 
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;
}

运行结果

CTF-Reverse学习-为缺少指导的同学而生_第35张图片

套上外壳,即是flag

flag{hack1ng_fo1_fun}

3.reverse3

BUUCTF平台

得到的还是exe可执行文件

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

CTF-Reverse学习-为缺少指导的同学而生_第36张图片

定位关键函数,分析

CTF-Reverse学习-为缺少指导的同学而生_第37张图片

  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加密一类的

CTF-Reverse学习-为缺少指导的同学而生_第38张图片

那就解密一下

 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}'

CTF-Reverse学习-为缺少指导的同学而生_第39张图片

CyberChef在线工具解法  CyberChef

CTF-Reverse学习-为缺少指导的同学而生_第40张图片

 B站配套视频

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

课后练习

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

CTF-Reverse学习-为缺少指导的同学而生_第41张图片

你可能感兴趣的:(CTF,学习,网络安全,CTF,逆向入门,Reverse入门,Reverse)