本人也是全部AK了,只能说还是挺适合新生的很好的题目
WEEK1:
1.数字筑基
1.1 WEEK1的签到题IDA直接打开就有flag
2.代码金丹
2.1 也是签到题比较输入,IDA打开就有flag
3.网络元婴
3.1: 我们可以观察到这个scanf,IDA反编译出来只有一个参数,并没有结束输入的参数,这个其实就是一个可变参数的问题
3.2:我们点击scanf这个函数按住快捷键y,在第一个参数后面输入 三个点就好了
3.3其实就是让我们输入的数组和v6这个数组比较,没有任何加密我们只需要获取v6的值就ok了
3.4:我们只需要在赋值完成后打个断点,再去提取出v6数组里面的值就好了
3.5:由于v6是int类型的数组直接shift + e并不好提取,我们使用脚本提取数据
3.6:获得flag
4.虚拟化神
4.1:我们先观察正确的判断条件,这边也有可变参数按照上面的方法修改就好了,那v15和v10比较,如果相同输出正确信息
4.2:所以我们直接找v10就好了,在上面的代码发现,v10给了v3,然后对v10进行赋值密文数据,再对v3解密其实也就是v10解密
4.3:我们只需要等解密完dump出这个数据就好了,打断点运行程序到解密完后的代码处,在汇编层面打断点要不然可能断不住
4.4:双击v10变量就可以看见flag啦
5.赛博天尊
5.1:很明显考察Z3库的使用
5.2:使用z3库跑出flag
WEEK2:
1.符文解密师
1.1:C++编写的程序,打开就有flag
2.编译逆旅者
2.1:pyc文件
2.2:python反编译 - 在线工具 (tool.lu),在线网站反编译出源代码
2.3:hex值转为字符串得到flag
3.码海舵师
3.1:就是一个普通的base64加密再比较
3.2:工具解密一下下
4. 注册侦探
4.1:先分析上面的代码,记录了密文结束地址也就是v4,以及将Src赋值给v3,思路就是查看那些代码对v3操作了
4.2:在这里对v3的每一个字节进行异或的0x33解密
4.3:我们只需要在对Src赋值完后dump出他的值异或0x33就可以获取flag了
4.4:解密得到flag
5.壳艺大师
5.1:查壳发现UPX壳
5.2:我这边使用脱壳机脱壳
5.3:upx -d 加路径 左下角是一表示脱壳成功
5.4:shift + f12 发现一个类似于key的字符串
5.5:猜测是循环拿 key 和输入数据异或再比较
5.6:验证一下,发现确实结果是 0xG开头的
5.7:dump出密文数据 循环异或就可以了
WEEK3
1.代码启示录
1.1:jadx打开查看main函数发现flag
2.旋转密码城
2.1:jadx打开发现就是普通的偏移
2.2:直接脚本爆破就得出flag
3.数字幽灵城
3.1:通过base58.decode()解密这 R.string.encodedFlag,解密后和输入比较
3.2:双击追踪过去发现是在字符串资源文件里面的数据
3.3:使用apktool解包后,在res\ values \strings这个xml文件里面搜索encodedFlag
3.4:Base58解密,由于不是标准码表就写脚本解密
4.变量迷城
4.1:查看最下面的加密方法,其实就是加密数据和key异或,我们只需要获取这个key就可以,key是 javaClassVersion + systemVar的组合,看传参systemVar是0xGame javaClassVersion是上面传参过来的x,这个x貌似是一个方程里面的某个数,只需要求出这个x就可以
4.2:我们知道flag前几个字符是0xGame{也知道密文数据,我们可以直接推出这个x,根据异或的特性,推出x是114514
4.3:得出flag
5. 虚构核心
5.1:这边就是对文件解密的一个操作
5.2:和key异或解密得出一个文件这个文件是程序关键代码
5.3:使用jadx打开这个程序,这个代码就是说flag应该是0xGame{开头 }结尾,然后提取中-符号分割的中间部分,开头的字符串和结尾的字符串是 f5bf50a3 和 f3eddaccb39f,然后检查1- 3的字符串长度是不是4,然后md5加密和预定义的md5比较
5.4:因为知道字符串长度只有4完全可以爆破,md5在线解密破解,md5解密加密 (cmd5.com),爆破再组合一下就是flag
WEEK4:
1. 二进制学徒
1.1:pyc在线反编译就有flag
2.代码悟道者
2.1:base64换表加密
2.2:在线网站解密,在线自定义base64编解码、在线二进制转可打印字符、在线base2、base4、base8、base16、base32、base64--查错网 (chacuo.net)
3.指令神使
3.1:输入flag加密后和密文数据比较
3.2:sub_140001154函数分析,判断输入的前七个字节是0xGame 结尾是 }
3.3:sub_140001118函数分析,对小写字母凯撒 相当于 (a1 - 84) % 26 + 97
3.4:exp
4.算法祭祀
4.1:C#编写的程序,32位的程序
4.2:dnSpy打开程序,CBC模式的DES加密,调试发现key是520XGAME,iv是STV>!'+#
4.3:exp
5.内存星旅者
5.1:很明显我们的sub_140001510函数返回值要不是0,这个函数给v5赋值了
5.2: sub_140001600函数分析,生成一个路径使用v5的值和加密数据异或解密然后生成一个文件,最后再删除文件
5.3:分析v5的来源也就是sub_140001510函数,这里当v5的值为0x1CF410时程序会返回非0值,也就可以得到v5其实就是0x1CF410
5.4:由于这个函数的返回值是0,所有我们要修改这个函数的返回值让流程进入解密函数的分支里面,并且将v5在内存里面的值修改为0x1CF410,然后再程序删除文件前查看文件得到flag
1.先将rax寄存器的值改为1保证程序可以进入正确的流程
2.修改v5的值为0x1CF410
3.在删除文件前打断点运行程序到这里
4. v14是生成的文件路径
5.查看这个路径里面的flag文件得到flag