[ctf.show.reverse] re2
签到完了就一个小题,本身不繁杂但是有点长。
先是要求输入一个串然后逐位与0x1f异或后检查密钥是否正确
char __cdecl sub_401A70(char *Str, char *Str1)
{char v3; // [esp+0h] [ebp-E4h]signed int i; // [esp+D0h] [ebp-14h]signed int v5; // [esp+DCh] [ebp-8h]__CheckForDebuggerJustMyCode(&unk_40B027);v5 = strlen(Str);for ( i = 0; i < v5; ++i )Str1[i] += Str[i] ^ 0x1F;if ( !strcmp(Str1, "DH~mqqvqxB^||zll@Jq~jkwpmvez{") )c_printf("充值成功.\n", v3);elsec_printf("Error!\n", v3);return *Str1;
}
然后开始处理这个密钥:
先循环密钥到256位长
int __cdecl sub_401800(int a1, int a2, int a3)
{int result; // eaxint j; // [esp+D0h] [ebp-14h]int i; // [esp+DCh] [ebp-8h]result = __CheckForDebuggerJustMyCode(&unk_40B027);if ( a3 <= 256 ){for ( i = 0; i < 256; ++i ){*(_BYTE *)(i + a1) = *(_BYTE *)(a2 + i % a3);result = i + 1;}}if ( a3 > 256 ) //后边没用,不够256{for ( j = 0; j < 256; ++j ){*(_BYTE *)(j + a1) = *(_BYTE *)(j + a2);result = j + 1;}}return result;
}
再生成第2个密钥(值为0-255)
int __cdecl sub_401780(int a1)
{int result; // eaxint i; // [esp+D0h] [ebp-8h]result = __CheckForDebuggerJustMyCode(&unk_40B027);for ( i = 0; i < 256; ++i ){*(_BYTE *)(i + a1) = i;result = i + 1;}return result;
}
根据第1个密钥将第2个密钥位置交换后作为解密密钥
int __cdecl sub_4018E0(int a1, int a2)
{int result; // eaxint i; // [esp+D0h] [ebp-2Ch]char v4; // [esp+EBh] [ebp-11h]int v5; // [esp+F4h] [ebp-8h]result = __CheckForDebuggerJustMyCode(&unk_40B027);v5 = 0;for ( i = 0; i < 256; ++i ){v5 = (*(unsigned __int8 *)(i + a2) + v5 + *(unsigned __int8 *)(i + a1)) % 256;v4 = *(_BYTE *)(i + a1);*(_BYTE *)(i + a1) = *(_BYTE *)(v5 + a1);*(_BYTE *)(v5 + a1) = v4;result = i + 1;}return result;
}
最后次读入的flag用密钥加密后存入enflag.txt文件。由于这里只对处理后的密钥与flag作异或运算,所以加密与解密相同,可直接用来解密
int __cdecl sub_4015E0(int a1, FILE *in_file, FILE *out_file)
{int result; // eaxchar v4; // [esp+103h] [ebp-35h]char i; // [esp+11Bh] [ebp-1Dh]int v6; // [esp+124h] [ebp-14h]int v7; // [esp+130h] [ebp-8h]__CheckForDebuggerJustMyCode(&unk_40B027);v7 = 0;v6 = 0;for ( i = fgetc(in_file); ; i = fgetc(in_file) ){result = i;if ( i == -1 )break;v7 = (v7 + 1) % 256;v6 = (v6 + *(unsigned __int8 *)(v7 + a1)) % 256;v4 = *(_BYTE *)(v7 + a1);*(_BYTE *)(v7 + a1) = *(_BYTE *)(v6 + a1);*(_BYTE *)(v6 + a1) = v4;fputc(*(_BYTE *)((*(unsigned __int8 *)(v6 + a1) + *(unsigned __int8 *)(v7 + a1)) % 256 + a1) ^ i, out_file);}return result;
}
先求出密钥:
str1 = b"DH~mqqvqxB^||zll@Jq~jkwpmvez{"
str0 = b''
for i in str1:str0 +=bytes([i^0x1f])
print(str0)
再将enflag.txt文件更名为flag.txt后运行一次程序即可。
做出你的选择:
1.充钱
2.退出
1请输入您的密钥:[Warnning]Access_Unauthorized
充值成功.加密成功!
您的充值金额不足。C:\ctf.show.reverse\re2>type enflag.txt
flag{RC4&->ENc0d3F1le}
生成的enflag.txt文件即为flag
或者用自己重写一遍程序。
[ctf.show.reverse] re2相关推荐
- [ctf.show.reverse] 红包六
下来是个压缩包,解开后一个原码,解码后是notflag,发现压缩包有5k大而解出的java文件只有1k,显然包里还有内容未解出 用010打开包发现有两个EzJar.class文件,手工切出解压 imp ...
- [ctf.show.reverse] 吃鸡杯 ezmore,有手就行,EzAutoRe
ezmore 动调的题,跟进去在4019d6下断点看比较情况得到neft输入后得到flag组成提示 有手就行 一上来就猜入口是_main然后解到一个fake s2 = [99,23,113,2,106 ...
- [ctf.show.reverse] 月饼杯 re1_西北望乡、re2_归心、re3_若无月
re1_西北望乡 主程序很容易看明白,格式是flag{....}长45,然后把3,6,13,36拿出来作为系数,这些字符每5个一组分别乘系数后的和给定了.然后就是怎么解了. if ( strlen(f ...
- [ctf.show.reverse] 来一个派森,好好学习天天向上
来一个派森 根据名字来看是一个编译成exe的python程序, 用py \tools\pyinstxtractor.py checkme.exe 将其解包, 然后将struct文件头部E3前的部分插入 ...
- XCTF-攻防世界CTF平台-Reverse逆向类——52、handcrafted-pyc(Python的pyc文件逆向)
下载题目附件之后,查看附件52: 发现它就是一个Python代码文件 #!/usr/bin/env python # -*- coding: utf-8 -*-import marshal, zlib ...
- [ctf.show.reverse] 吃瓜杯 签层饼,Tea_tube_pot
签层饼 真有一千层函数呀,沿着输入存入的两个变量找,找到3个函数: 主函数给出了flag的组织方式, check1说number2<882408, check2说number1 = number ...
- [ctf.show.reverse] re3
逻辑很简单,但用python写的话由于python没有长度限制,直接用会有些问题需要解决.所以用gdb跟一下. v7 = 0x50;v8 = 0xFAE3;v9 = 0xD7D3F7B;v10 = 0 ...
- XCTF-攻防世界CTF平台-Reverse逆向类——56、tar-tar-binks(Mac平台下的64位动态链接共享库.dylib逆向)
目录标题 一.解压缩 二.查看文件 三.分析程序 四.程序主要逻辑: 五.逆向思路: 步骤一: 步骤二: 六.解密代码: 题目提供了两个文件flag.tar和libarchive.dylib 一.解压 ...
- XCTF-攻防世界CTF平台-Reverse逆向类——57、re5-packed-movement(linux32位ELF文件、movfuscator代码混淆)
目录标题 方法一:搜索字节序列 方法二:IDC脚本 方法三:Python脚本: 方法四:bgrep工具 先查看文件信息: 是linux下的32位ELF文件,且被加了UPX的壳 下载最新版的UP ...
最新文章
- Git使用汇总之暂存区工作区撤销和删除
- java accessablity_java连接access数据库----简单demo
- word2007导出pdf带书签
- 软件工程:可行性研究
- 聚类分析软件测试,基于复杂网络的软件测试路径聚类分析-计算机工程与应用.PDF...
- 骁龙855音频解码芯片_小米10、小10 Pro详细对比:骁龙865最强悍5G旗舰手机
- Android-深色模式篇
- 为什么计算机网络使用数字信号,计算机网络数字电子技术的作用
- Anybackup-7.0.8.0系统配置-授权管理
- 洛谷 P1008三连击 C语言
- 微信图片去除马赛克_照片怎么去水印,去除图片水印的简朴方式,微信公众号引流的21种方法...
- Adam优化算法中的指数移动平均
- 《程序员十二时辰》,居然是这样的!内容过于真实 ...
- 服务器装系统提示获取分区失败,u盘装系统时获取硬盘分区失败怎么办
- 美服测试服无法连接验证服务器,美服1.10 test服务器开了,我的一些测试心得
- 《腾讯数字生活报告2019》发布,互联网时代新马斯洛需求金字塔预示什么?
- Java学习:IT行业是否已经开始饱和或者过剩?
- Android 10.0 自定义开机向导app
- direct wifi 投屏_direct wifi 投屏_告别Wifi直接投 AOC无线投屏显示器轻松用
- 【c#系列】PDF进行操作-浏览、分割、合并、插入、删除(2)