REVERSE-PRACTICE-BUUCTF-6
- rsa
- CrackRTF
- [2019红帽杯]easyRE
- [ACTF新生赛2020]easyre
rsa
解压出来是.enc和.key两个文件,.enc是密文,.key存放着公钥信息
使用在线网站或者openssl解析.key文件中存放着的公钥信息
可获知rsa需要的模数n和公钥e
使用在线网站或者yafu分解n,结果为两个大素数
写脚本即可得到flag
CrackRTF
exe程序,运行后提示输入密码,输入错误直接退出,无壳,ida分析
main函数中,要求输入两次密码,先看第一个密码
第一个密码的部分逻辑清晰,重点是sub_40100A这个函数
sub_40100A函数点进去,发现有个CryptCreateHash函数
CryptCreateHash函数详解
重要的是这个函数的第二个参数,决定了要使用的哈希算法
这里0x8004u使用的是sha(sha1)算法
写脚本爆破,得到第一个密码
然后是第二个密码,和第一个密码的逻辑差不多,不过用的是md5散列,但是没有对第二个密码的6个字符做任何限制,爆破不可取,往下走,发现拼接后的input_2作为参数传入了sub_40100F函数
sub_40100F函数的主要逻辑用红框标出,即exe程序带有的资源“AAA”和拼接后的input_2进行异或运算,结果写到程序创建的名为“dbapp.rtf”文件中
使用工具Resource Hacker可以获取资源“AAA”的数据
sub_401005函数就是进行异或运算
程序要创建并填充一个完整的rtf文件,rtf文件的文件头必不可少,搜索或自建一个空的rtf文件用010editor打开,可以得知rtf文件的文件头
由于第二个密码拼接时放在input_2的前面,也就是说第二个密码和资源“AAA”的数据异或后的结果正是rtf文件的文件头
写脚本得到第二个密码,第二个密码的长度为6,故资源“AAA”和rtf文件头都取前6个字节异或即可得到第二个密码,注意“\r”在python中的转义语义,再加一个“\”
再次运行exe程序,输入正确的第一个和第二个密码,在当前目录下生成一个“dbapp.rtf”文件,内容即为flag
[2019红帽杯]easyRE
elf文件,无壳,ida分析
左侧函数窗找不到主逻辑函数,shift+F12打开字符串窗口
发现一长段很像base64的字符串和base64字符表
一路交叉引用base64字符串,来到sub_4009C6函数
先看该函数中用到base64字符串的片段
逻辑是v56经过10次base64变换,结果为已知的那个base64字符串
写脚本得到v56,结果为一个url,打开没发现和flag相关的内容,应该是误导选手了
继续看sub_4009C6函数的其他内容,该函数一开始给一堆变量赋值,然后有一个异或后比较的运算,用红框标出来了
写脚本,提示说前四个字符为“flag”,也没有对flag具体内容的提示
sub_4009C6函数分析完后,并没有对flag具体内容的判断
于是再次去字符串窗口找找有没有其他提示的内容
在那串base64字符串下面,有一段没有在sub_4009C6函数中用到的数据
交叉引用来到sub_400D35函数
v5和v8相同,v8和byte_6CC0A0数组前4个字符异或的结果为“flag”,前面也提示到前4个字符为“flag”
然后v8再和byte_6CC0A0数组的全部元素异或
写脚本,先解出v8,再循环异或得到flag
[ACTF新生赛2020]easyre
exe程序,运行后提示输入,输入错误直接退出,有upx壳,脱壳后ida分析
main函数逻辑清晰,flag的内容减1后作为下标,从_data_start_这个数组中取值,与v4到v15比较,验证flag的内容
写逆脚本即可得到flag