更新日志:
2023-12-22 11:57 发布博客,创建工具列表,创建实验1
2023-12-23 16:46 实验1课后练习添加 “入门逆向-bugku”
Reverse是什么?
CTF中Reverse题型通常会给你一些与程序相关的程序,往往是一些编译后的程序,然后通过反汇编的方式,窥探和猜测程序的逻辑,并分析程序逻辑,获取解题逻辑。利用解题逻辑,按固定条件执行尘效果或者编写逆向逻辑脚本的方式来获取flag。
软件代码逆向主要指对软件的结构,流程,算法,代码等进行逆向拆解和分析。
逆向逆向,逆向的是程序吗,nonono,逆向的是人心,编程人的心。程序是人写的,只要他在开发时走了下神,或者少考虑了一个细节,就会产生漏洞和BUG,绝大多数都会被修复,但完全没有错误的程序是不存在的。
解题步骤
本博客在B站有配套视频,随博客同步跟新,但博客内容的替换和更新会更加频繁。等博主社恐的毛病处理好,视频会重新录制,现在可能有些糟糕。还望大家见谅
Rotten战队-Reverse入门https://www.bilibili.com/video/BV14g4y1Z7HR/?spm_id_from=333.999.0.0&vd_source=b0baa38241452f542afabdf70d10fca7
我会以NSSCTF,BUUCTF平台的题目做教学,后面也会加其他平台。
NSSCTF网址
NSSCTF平台
BUUCTF
BUUCTF平台
反汇编工具
链接:https://pan.baidu.com/s/11YzTTBgDzlrg8a_k-raqqw?pwd=6666
提取码:6666
解压后
执行,选择yes即可完成破解
温馨提示:安装目录请不要有中文路径。
安卓反编译工具
查壳工具
脱壳工具
安卓模拟器
MuMu模拟器官网_安卓12模拟器_网易手游模拟器
好用!
如果报错显卡问题,请先检查独立显卡的驱动更新,如果CPU带有核显,核显也需要更新
安卓反编译工具
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,删除缓存文件,如果你还要再次打开,可暂时保留
BUUCTF平台
你可以看到一个名字很长的文件,建议是将其改成简短的名字,如1.exe,方便使用file指令
file指令看位数,这回带了个Intel 80386标记,是32位的程序
进入后,查找字符串,flag搜不出来
换{
拿到flag
DBAPP{49d3c93df25caad81232130f3d2ebfad}
BUUCTF平台
长度还行,就不改文件名了
放入kali,file一下,32对吧
IDA 32位打开,{搜到l东西,但直接提交是错误的
双击进去,在这个字符串上按这个,跳转引用它的地方,看看它的伪代码
F5一下,看看伪代码
C语言格式化字符串打印函数,那填个空就好,%d换成后面的数字
flag{1999902069a45792d233ac}
BUUCTF平台(安卓)
得到一个apk,安卓APP文件
模拟器打开
真只有hello world。那么用jadx-gui反编译查看
打开之后,文本搜索flag{
点击进去看看,提交flag正确
Reserve入门-字符串泄露(1)_哔哩哔哩_bilibili
[SWPUCTF 2022 新生赛]base64-NSSCTF平台 (记得base64解码)
什么是字符串相等呢?
题目的一般形式是要求你输入一个字符串,然后会要求你输入的字符串经过处理后等于程序内存储的一段字符串。
或者是你输入的字符串等于程序内存储的一段字符串经过特殊处理后生成的新字符串。
BUUCTF平台
得到启动文件
file指令查看位数,为64位,IDA64位打开,shift+F12查找字符串flag,没有直接的flag
点击上图这个 this is the right flag!,然后下图右键,点击红色方框处,查看引用
会来到这个页面
按F5,反编译,看伪代码,分析代码吧少年
注释版本--核心部分:分析可以得出我们的输入要等于Str2将字符串中o换成0后的字符串
Str2字符串内容
也就是
{hell0_w0rld}
打包一下flag
flag{hell0_w0rld}
BUUCTF平台
得到一个不知道是啥的文件
kali用file指令看一下文件信息
64位ELF文件,那就用64位的IDA,shift+F12查字符串先
一样的操作,查看引用
F5反编译,分析吧少年
注释代码,目测输入要和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;
}
运行结果
套上外壳,即是flag
flag{hack1ng_fo1_fun}
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
Reverse入门 字符串相等_哔哩哔哩_bilibili
后方内容施工中》》》》》》》》》