re部分
0x01.Writeup-RE-CM_2
题目:
解题思路:
1.这个是经过xor的,王老师提示说用xortool,于是放进kali,装好之后执行
xortool CM_2.exe -b,
0.out变为PEexe,于是放进IDA32得到flag。
0x02.Writeup- RE-CM_3
解题思路:
1.拿道题之后直接丢进DIE扫一下,如图,可以看出是32位,于是用32位IDA打开。
2.shift+F12看字符串,看到敏感字符SYC{%s}于是点进去,于是知道关键函数是sub_45BFF0。
3.分析函数sub_45BFF0。
上面这张图是关键代码,不难发现,这是将byte_52E000数组里的元素转换位置。然后看到上有一串数字,如右图,这些数字是被当做byte_52E000数组的下标从而实现转换byte_52E000数组元素位置。
接下来需要知道byte_52E000数组里的元素,双击即可看到。
4.分析清楚后接下来写脚本,由于需要取数组下标,我用c写的脚本,如下
得到flag,大功告成!
0x03.Writeup- RE-APK_1
题目:
于是知道如果找到password就能过这题。
解题思路:
1.用Apktool打开,
2.
可以看到,username = ‘SycGeek2017’,
一开始以为Password就是username的base64编码“U3ljR2VlazIwMTc=”,交了一发不对。
然后仔细看了看,发现还有个re函数,可以很快的了解到re函数就是一个倒置字符串的函数,于是password = “=cTMwIzalV2Rjl3U”。
得flag:SYC{=cTMwIzalV2Rjl3U }
0x04.Writeup- RE-Linux_1
题目:
解题思路:
1.还是拿IDE扫一下,
gcc((Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609)[executable AMD64-64]
2.用IDA64位打开,shift+F12看字符串,如图
点进去,看到它所在函数为sub_4009AE,点进去,F5查看伪代码。
3.函数sub_4009AE
一开始看到这个函数有点懵逼,然后点了点里面跳转的函数,惊喜的看到一个非常“好看”的,如下图
根据这个函数把a1数组的每一个元素找到,即L1nux_1s_51mple,找到flag啦。
0x04.Writeup- RE-Convolution
题目:
解题思路:
1.丢进IDE看文件类型,如图
2.IDA32位打开,看字符串,如图
点进去,F5查看伪代码。
3.从后往前看。
首先,从下面这段代码可以看出,若v6==0,则输出Yes,那么
就是说v8要和unk_41E8B0这个数组完全匹配。
继续往上看v8是如何赋值的。
很容易看到,下图的代码为关键,它的作用是将v9与byte_41C658的元素异或之后再赋给v8,可以看到byte_41C658是已经有值的,
那么接下来看v9,如下图,知道v9是我们输入的字符串。
现在可以开始逆算法了,从上面的关键代码的图可以看出,
V8[i+j] =( v9[i] ^ byte[j] )求和。为了理清这个关系,我写了个脚本,结果如下图。
通过上图可以很快理清其中的关系,通过第一行我们可以直接得到v9[0],通过第二行可以借助第一行v9[0]算出v9[1],以此类推,v9的全部元素都可以得到。
写输出flag的脚本:
byte_41C658数组的元素如下图,别忘了第一个21h。
V8的元素由于过长不在这里显示。
关键代码如下图
得到flag
总结:这个题的难度主要在分析v8,v9,byte之间的关系,如果能理清这个的话相信得到flag是很容易的,还有就是在找v8和byte元素的时候不要忘了第一个!!!比如说下图
我就是一开始忘了byte数组的第一个导致脚本崩了。。。然后第三天重新看的时候才发现。。。
re部分还有两道题,比赛的时候没写出来。。。
作者: LB919
出处:http://www.cnblogs.com/L1B0/
该文章为LB919投入了时间和精力的原创;
如有转载,荣幸之至!请随手标明出处;
随机推荐
- Appium python自动化测试系列之Android知识讲解(三)
3.1 ADB工具讲解 3.1.1 什么是ADB呢? 我们不去解释官方语言的翻译,给大家说一个通熟易懂的说法,ADB我理解为他就是电脑和手机连接的桥梁.此连接不是充电的连接,大家不要混淆,说他是一个 ...
- SpringBoot01 InteliJ IDEA安装、Maven配置、创建SpringBoot项目、属性配置、多环境配置
1 InteliJ IDEA 安装 下载地址:点击前往 注意:需要下载专业版本的,注册码在网上随便搜一个就行啦 2 MAVEN工具的安装 2.1 获取安装包 下载地址:点击前往 2.2 安装过程 到官 ...
- 【前端】Require.js使用方法总结
一.为什么要使用require.js 首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长:其次,由于js文件之间存在依赖关系,因此必须严格保证加载 ...
- mysql必知必会系列(一)
mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...
- Java基础总结--方法(函数)
---函数的作用---实现特定功能的代码--是一种代码重用的方式---函数的格式---访问修饰符 返回值类型 函数名(参数列表){语句:} 参数列表包含参数的类型和参数名(参数列表要注意顺序)---关 ...
- Appium python自动化测试系列之等待函数如何进行实战(九)
9.1 等待函数的使用 9.1.1 为什么要使用等待函数 我们在做自动化的时候很多时候都不是很顺利,不是因为app的问题,我们的脚本也没问题,但是很多时候都会报错,比如一个页面本来就有id为1的这个 ...
- java时间格式
Calendar startdate = Calendar.getInstance(); startdate.setTime(new Date()); //当前时间 startdate.add(Cal ...
- Hql整理
一.实体类直接查询 hql语句:(没有select * 表示默认选择全部属性) public static String GET_ALLUSERINFO="from UserEntity&q ...
- Assignments
Assignments Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDFS的接口(命令行接口和Java接口)--笔记
HDFS 文件的系统访问的接口 1.Hadoop的shell命令脚本 hadoop fs -ls 列出某一个目录下的文件 hadoop fs -lsr 递归的方式列出所有文件 hadoop fs ...