运行程序后隔了半秒才出现输入flag的提示,且用IDA搜索字符串搜索不到出现过的字符串,函数窗口中没有发现标准输出函数,猜测逻辑可能并非在C代码中
用OD附加后F9,直接退出,索性慢慢单步跟,一直到跟入sub_404920函数中
发现与文件读写有关,继续OD跟踪,一直到标黄处
可以在栈窗口中看到被写入的文件的路径
程序被断在了这里,文件应该不可能被清理,资源管理器打开看看
直接在src目录里有一个Checkin.rb源代码
require 'openssl'
require 'base64'
def aes_encrypt(key,encrypted_string)
aes = OpenSSL::Cipher.new("AES-128-ECB")
aes.encrypt
aes.key = key
cipher = aes.update(encrypted_string) << aes.final
return Base64.encode64(cipher)
end
print "Enter flag: "
flag = gets.chomp
key = "Welcome_To_GACTF"
cipher = "4KeC/Oj1McI4TDIM2c9Y6ahahc6uhpPbpSgPWktXFLM=\n"
text = aes_encrypt(key,flag)
if cipher == text
puts "good!"
else
puts "no!"
end
直接能读出来加密算法、key、密文,随便找个网站解密即可
GACTF{Have_a_wonderful_time!}