[NPUCTF2020]你好sao啊
文章目录
- 拖进ida
- RxEncode(&s, 33)
- strcmp
- 分析过程
- 脚本
拖进ida
找到关键函数RxEncode(&s, 33)
RxEncode(&s, 33)
void *__fastcall RxEncode(const char *a1, int a2)
{void *result; // raxint v3; // [rsp+18h] [rbp-38h]signed int v4; // [rsp+1Ch] [rbp-34h]int v5; // [rsp+20h] [rbp-30h]signed int v6; // [rsp+24h] [rbp-2Ch]int v7; // [rsp+28h] [rbp-28h]int v8; // [rsp+28h] [rbp-28h]signed int i; // [rsp+2Ch] [rbp-24h]_BYTE *v10; // [rsp+30h] [rbp-20h]void *s; // [rsp+38h] [rbp-18h]v3 = 3 * (a2 / 4);v4 = 0;v5 = 0;if ( a1[a2 - 1] == '=' )v4 = 1;if ( a1[a2 - 2] == '=' )++v4;if ( a1[a2 - 3] == '=' )++v4;if ( v4 == 3 ){v3 += 2;}else if ( v4 <= 3 ){if ( v4 == 2 ){v3 += 3;}else if ( v4 <= 2 ){if ( v4 ){if ( v4 == 1 )v3 += 4;}else{v3 += 4;}}}s = malloc(v3);if ( s ){memset(s, 0, v3);v10 = s;while ( v5 < a2 - v4 ){v6 = 0;v7 = 0;while ( v6 <= 3 && v5 < a2 - v4 ){v7 = (v7 << 6) | (char)find_pos(a1[v5]);++v6;++v5;}v8 = v7 << 6 * (4 - v6);for ( i = 0; i <= 2 && i != v6; ++i )*v10++ = v8 >> 8 * (2 - i);}*v10 = 0;result = s;}else{puts("No enough memory.");result = 0LL;}return result;
}
看到了find_pos
函数
strcmp
strcmp(s1, s2)
unsigned char s2[] =
{0x9E, 0x9B, 0x9C, 0xB5, 0xFE, 0x70, 0xD3, 0x0F, 0xB2, 0xD1, 0x4F, 0x9C, 0x02, 0x7F, 0xAB, 0xDE, 0x59, 0x65, 0x63, 0xE7, 0x40, 0x9D, 0xCD, 0xFA
};
分析过程
一眼看上去,有点像关于base64的一些操作,仔细一看不是(以为又可以动用工具进行一系列操作。。)然后看了一下大佬的wp,他们直接玩爆破。。。。。
脚本
table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234{}789+/="
c="9E9B9C B5FE70 D30FB2 D14F9C 027FAB DE5965 63E740 9DCDFA"
c=c.split()
for i in range(len(c)):c[i]=eval("0x"+c[i])print(c)
for x in c:t=0for i in range(len(table)):for j in range(len(table)):for k in range(len(table)):for l in range(len(table)):t=(0<<6)|it=(t<<6)|jt=(t<<6)|kt=(t<<6)|lif(t==x):print(table[i]+table[j]+table[k]+table[l])
把带有=的删掉,剩下的拼接起来就是flag
npuctf{w0w+y0U+cAn+r3lllY+dAnc3}
[NPUCTF2020]你好sao啊相关推荐
- REVERSE-PRACTICE-BUUCTF-30
REVERSE-PRACTICE-BUUCTF-30 [RCTF2019]DontEatMe [b01lers2020]little_engine [NPUCTF2020]你好sao啊 [MRCTF2 ...
- BUUCTF reverse题解汇总
本文是BUUCTF平台reverse题解的汇总 题解均来自本人博客 目录 Page1 Page2 Page3 Page4 Page1 easyre reverse1 reverse2 内涵的软件 新年 ...
- 安卓Android 直播点赞爱心特效,计时器
点赞特效,上图: 首先忽略这画质和抠脚的交互效果,首先需求就是 实现类似抖音的点赞效果 飘小心心的效果,UI的方案是做成了gif图,但是这种东西做成gif太low了,于是就有了想法,这边记录一下: 首 ...
- 再见,区块链 Rio会议和以太坊Sao Paolo活动。 你好,闪光时刻
区块链操作系统再次回来了.Cartesi 在全世界各地的论坛活动中与开发人员和Web3社区建立了联系,名单上的第一名是Blockchain Rio,这是拉丁美洲最大的区块链活动之一,为了阐明区块链的未 ...
- cmd怎么实现Java你好_java环境配置以及如何在cmd窗口运行java代码
对于初学java的人来说,电脑的环境配置也许会让你头疼,但只要你认真一些学习,相信对你来说都是OK的啦~ 首先回到桌面,选择我的电脑,单击右键属性,进入高级系统设置,点击环境变量设置.用户变量选择Te ...
- HarmonyOS开发工具DevEcoStudio 的下载以及运行(包含下载开发工具,sdk,模拟机,以及运行第一个应用你好,世界)
开发工具下载 首先打开HarmonyOS 官网 地址链接 向下滑动一下就能看到开发工具DevEcoStudio 了,点击下载 下载之后是一个压缩包(我这里下载的windos版本的) 解压之后有一个.e ...
- JAVA求是否为闰年,for-while循环,输出你好
第一次写Java程序有点小紧张,如果我没猜错的话,你现在应该在3楼的某个教室里慌的不行吧? 哈哈哈 疯狂建议写成三个类,打上注释 直接上代码 package com.classOne;//自己定义的p ...
- 小程序json字符串转 json对象 { name :你好} 转成 { name :你好}
解决后端接口返回 var obj ="{ name :"你好"}" 类似这样的数据,对象或者数组外面包了一层引号, 把这种数据转成 var obj = { na ...
- 用数据分析《你好,李焕英》“斐妈”爆红的真相
作者 | 俊欣 来源 | 数据分析与篮球 头图 | 下载于视觉中国 <你好,李焕英>成为了春节档最热门最火爆的电影之一.截止目前,根据猫眼电影专业版的数据显示,该影片的票房已经突破了43亿 ...
最新文章
- 自定义Chrome浏览器
- python 读取文件读出来是什么格式-深入学习python解析并读取PDF文件内容的方法...
- zzuli 2525: 咕咕的搜索序列
- 如何在腾讯云上安装Cloud Foundry
- rsyslog syslog详解
- 淮阴工学院计算机答辩,淮阴工学院关于做好2014级研究生学位论文答辩工作的通知...
- Spring Boot统一异常处理实践
- QQ域名拦截检测工具(含源码)
- 常见视频编码比较大全 常见视频解码技术资料1
- Jquery取得iframe下内容的方法
- android pm命令用法
- 【每周CV论文推荐】GAN在医学图像生成与增强中的典型应用
- fly.js 的二次封装
- 《软件架构评估》学习笔记
- 如何抓取BT天堂电影数据
- 计算机毕业设计JavaVue.js音乐播放器设计与实现(源码+系统+mysql数据库+lw文档)
- android dss 流媒体开发,DSS流媒体服务器搭建
- MySQL数据库编程01
- 【科创人南京行】西祠胡同创始人“响马”刘琥:一生寻找精神绿林,减区块链也许是正确方向...
- JOBDU-OJ 1456 胜利大逃亡
热门文章
- 在java中重写方法应遵循规则的包括_Java面试题集合篇二
- Py之pycocotools:pycocotools库的简介、安装、使用方法之详细攻略
- DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练、预测
- JAVA_OA(八):springMVC对JDBC的操作小项目a
- Windows Phone 7.1 Sensor プログラミング基礎
- Ubuntu出现卡logo、卡住、黑屏无法正常启动、屏幕和键盘背光无法调节等一系列问题?可能是NVIDIA显卡驱动没装好...
- http和https的一种能力?
- Python 的列表的一些方法
- Big-Endian和Little-Endian
- 【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)