2020 GKCTF
- 还是太菜了……..
- 这周看看把其他题也复现了
Ez Machine
先理解一下每个function, 对其重命名
然后对这里直接下断, 获取每次的运行的函数
接着可以理解一下流程并调试可知
虚拟机对输入的字符进行了3个判断, 小写字母, 大写字母和其他字符。小写字母异或0x47 + 1, 大写字母异或0x4b - 1。然后所有字符都会去除16求商求余 |
接着进行求解:
s = [ 0x02, 0x02, 0x0C, 0x02, 0x07, 0x02, 0x01, 0x02, 0x0B, 0x07, 0x01, 0x03, 0x02, 0x03, 0x03, 0x03, 0x04, 0x03, 0x05, 0x03, 0x06, 0x03, 0x07, 0x03, 0x08, 0x03, 0x09, 0x03, 0x01, 0x03, 0x02, 0x03, 0x0D, 0x07, 0x07, 0x0D, 0x00, 0x05, 0x01, 0x0C, 0x01, 0x00, 0x00, 0x0D, 0x05, 0x0F, 0x00, 0x09, 0x05, 0x0F, 0x03, 0x00, 0x02, 0x05, 0x03, 0x03, 0x01, 0x07, 0x07, 0x0B, 0x02, 0x01, 0x02, 0x07, 0x02, 0x0C, 0x02, 0x02] |
- 其中s在动态运行的过程中直接dump
Check_1n
开机密码HelloWorld
if ( a1 == 3 && dword_1B6CC08 == 1 && !dword_1C7672C ) |
在字符串中获得提示Base64解密得去玩打砖游戏, 直接死亡就能看到flag
了(主要是一开始不知道怎么操作…..然后就死了
BabyDriver
主逻辑在0x0000000140001380
, 很明显是个迷宫题, 迷宫大小为16 * 14
, 然而在这里卡了很久, 因为不知道驱动获得的是键盘扫描码
所以卡住了……..
迷宫:
**************** |
键盘扫描码对应:
其实就是WASD
控制上下左右
然后直接走迷宫就完事儿了, 解密脚本如下:
import hashlib |
Chellys_identity
首先是输入, 然后检查输入长度是否为16, 然后对字符串进行操作, 然后进行校验
重点在字符串操作那块
首先是取值i, i的范围是0-v8, v8一开始是0, 通过下面的v9语句进行自增, 也就是说这个i 的范围是从数组的v12从0开始到判断条件结束的值
而sub_41325
函数主要是返回数组的内容
而判断条件*i < *v11
, 也就是说, 把v12数组中小于v11地址处的值的值取出来, 累加到v9, 然后和v11异或保存。而v11就是我们输入的字符串。
接着来看v12数组的值是这么来的
memset_v12
函数当然是将v12数组置零
重点看看get_v12
函数:
判断一个条件, 然后把这个数存入v12数组, 接下来看看check_if
函数
如果是质数, 那么保存。如此一来我们就可以知道, 整个算法是将1-128的质数保存在数组, 然后依次遍历每个flag的字符, 将比字符小的质数累加的和与该字符异或, 最后对比
v11[0] = 438; |
解密脚本:
res = [0x000001B6, 0x00000498, 0x00000441, 0x00000179, 0x00000179, 0x00000640, 0x0000039C, 0x00000179, 0x0000064A, 0x0000039C, 0x0000027D, 0x0000027F, 0x00000178, 0x00000236, 0x00000344, 0x0000033E] |
flag:Che11y_1s_EG0IST
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lantern's 小站!
评论