国赛write_up

东大装逼,国赛懵逼。
这就是CTF吧。。。
re只写出来俩道。。。为什么要对大一萌新这样。。。

easyGo

一开始我是完全不知道这是Go语言,第一反应是某种混淆导致这种奇葩场面发生(ida反汇编出来一堆shit)
太菜了啊。。。
可惜还是在20分钟内写出来了
主要是黑盒。。。还有几分的运气。。。
1
首先从start开始啊
因为函数太多而且找不到main。。。
慢慢跟,中间貌似有检查内存断点的。。。反调试。。。
断点稍微注意一下下鸭
然后可以找到入口
2
还能找到一串诡异的字符串,还有一个码表一样的东西
3
这个时候就能猜他是base64了
直接猜一下解一下出答案
4
但是仔细看看这个。。。其实这是个解码base64的函数。。。
就是帮你把那串诡异的字符串解码的。。。
call完后去内存一看就能发现
5
难怪这题目才五分钟就被人拿下了。。。
tql

bbvvmm

这题我灵机一动写出来了
窝的写法肯定是最快滴~~~
//其实是刷了小聪明
首先看看id

id

6
先看看整体逻辑啊
7
其实id么最难的是在那个sm4
没看出来sm4咋办?
放心,当时窝也没看出来,完全不知道sm4是什么加密。
先把base64的码表改好
解出他在sm4后应该等于的值
很简单嘛,这边不上脚本
就是EF468DBAF985B2509C9E200CF3525AB6
然后看这个sm4
其实呢仔细看看可以看出部分对称的性质
我那个时候就直接把EF468DBAF985B2509C9E200CF3525AB6输进去
然后把密钥倒着输入
他出来的就是明文的16进制了
8
因为密钥是通过r8寄存器来传的,记录下每个key
然后倒着改就ok
解出来是badrer12

pwd

这个密码我当时是直接patch源文件
因为你想呀,这是个vm,vm很花费时间//其实是我不会
但是符号执行什么的对这种看上去恶心的东西效果贼棒
所以为什么不用angr呢?
但是angr有缺陷,稍微复杂一些的加密
甚至是一个base//比如这边转16进制就是base16
就解不出
所以要patch
9
patch的要彻底
完事后再检查一下,输入6个1和在源文件中输入6个1,返回的是否一样
然后就可以angr了
跑了8分钟,出答案
xyz{|}
这边我把patch的文件也给下吧
111
但是提交的时候又有问题了。。。
不能直接提交。。。
还要用send来。。。
烦死。。。
自闭。。。

some conclusions

其实呢
我感觉第一题easyGo出的特别好
因为现在国内有大部分的水题,如我们南邮的第一题
都是打开搜索字符串一下子就出flag的
这题就不一样了
虽然说性质还是一样,就是明文比较
但是
1.利用go语言编写,go语言字符串结尾没有0,导致ida弄出一大串字符串
这就防止了直接搜索字符串看到flag或者定位关键函数//但还是可以通过搜text或者16进制匹配搜到
2.flag是魔改base加密后放在内存中的,程序运行后才进行解密,然后与你的输入直接进行比较
这更让你不好看出
可以说出题人很猛。。。
题目很适合入门。
希望以后我也能做一个这么优秀的出题人吧。

还有一个是bbvvmm
一个sm4窝这种萌新是真没看出来,但是凭着对称的感觉写出来了。
vm也很猛。。。
这次是窝运气好吧,如果vm稍微复杂些,那angr就凉了。。。
迟早窝会填上vm这个巨坑的。。。

另外几题比较不常见。。。萌新很蒙蔽。。。但确实能张张见识
坐等dalaos的wp

文章目录
  1. 1. easyGo
  2. 2. bbvvmm
    1. 2.1. id
    2. 2.2. pwd
  3. 3. some conclusions
|