使用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
课后练习
- Lucknum-攻防世界平台
- 逆向签到题-CTF.SHOW平台
- [SWPUCTF 2022 新生赛]base64-NSSCTF平台 (记得base64解码)
实验2 字符串相等
什么是字符串相等呢?
题目的一般形式是要求你输入一个字符串,然后会要求你输入的字符串经过处理后等于程序内存储的一段字符串。
或者是你输入的字符串等于程序内存储的一段字符串经过特殊处理后生成的新字符串。
学习目标:
- 熟悉使用Linux中的file指令查看程序位数
- 学会字符串相等问题解题思路
- 开始学习理解代码
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站配套视频
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
[外链图片转存中…(img-M4cRLa5J-1715483726000)]
[外链图片转存中…(img-PFyd0gHF-1715483726001)]
[外链图片转存中…(img-3ViGDBBa-1715483726001)]
[外链图片转存中…(img-EiIPv403-1715483726001)]
[外链图片转存中…(img-AmM84Zm5-1715483726002)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!