cnss_re
CNSS新生赛的逆向题题解
Reverse Guideline
教程,直接拿到flag
Welcome to Reverse World!
用ida打开即可看到flag
Find me
用ida看伪代码,介绍从三个方向去找flag:string、function和xref
shift-f12查看字符串找到第一部分
左侧函数框最上方看到第二部分
选中函数按x查看交叉引用
按r把数字变成字符
最后拼接flag
maware
查看代码逻辑,先对输入异或,encode函数里是每四字节输入把bit置换,结果要求等于一个给定数组(shift+e导出数据)
写一个逆脚本即可
1 |
|
encode
代码逻辑是输入一个字符串,经过encode函数后要求等于一个给定的字符串
encode函数是每三个字符进行处理,一开始没看懂,把61那里变成字符('=')后大概猜到了是base64,里面的alpha数组确实是个表,但是和标准的表不一样,写个脚本就可解密
You've got a flag!
考点是patch程序
流程是要求让coin小于0,每轮coin会自减去1/4,但是小于一个值的时候就会加上1
查看指令后是用addsd实现的,那么很显然就会想到把它改成subsd即可
在option-general可以选择查看字节码,再在网上搜对应subsd的字节码即可
1 | def modify_machine_code(filename, original_code, new_code): |
diannaobaozhale
考点是看汇编指令
其实整个流程就是把flag输出了,照着走一遍即可,坑的话可能就是jle这个指令的意思是Jump if Less than or Equal,所以程序一共要循环10次而不是9次
Pyfuck
考点算是变量混淆?把值变成了这个fuck的表示,打印一遍就知道是啥了,再异或回去即可
CNSS Rev Challenge
c#写的一个小游戏,最后要把让看板娘跑到语句后面。
逆了半天也没发现怎么改配置文件,最后在hurrison的提示下,了解到可以在程序运行到那个阶段的时候查看内存,搜索字符串就能拿到flag了
用ida或cheat engine都可以
EzArm
考点是arm逆向,出题人手写的arm汇编指令,太牛了
先装个qemu环境,用gdb调试程序,发现程序从最开始跳到了10000的地方,那么程序起始的地址应该是10000,然后就可以在ida中看到伪代码了,整个流程不难,经过某些运算后要等于一个数组,有个关键数组是动态生成的,所以ida里直接找不到,根据地址在gdb里查看即可
最后的exp如下:
1 | secret = [0x6E, 0x6D, 0x79, 0x7E, 0x82, 0x53, 0x3D, 0x84, 0x55, 0x5F, |
Brainfuck++
不会
Eazy Blockchain
evm逆向,给了bytecode和check函数
运行后90w行的调试信息,看关键逻辑,一共分为两部分。
这个地方是对输入的bytes进行判断,如果长度不是0x20就revert了,所以可以得知flag是32字节的.
后面就是漫长的审代码,这里把calldata存到栈里:
接下来是一个字节一个字节的加密操作,第一步的加密是用8字节的key对输入进行异或操作,把几个key找到后就可恢复这一部分。
第二部分和第一部分类似,但我实在是累的一,这已经到90多万行,不想再一个个调,发现逻辑也是异或后,直接写了个shell脚本进行字节翻转,但没有完全自动化,最后还是手调的flag。
1 | !/bin/sh |
最后到return就代表跑通了