题目虽然是签到题。但是我刚开始不知道该如何入手。
- 查看字符串,没有发现有用的内容。
- 有人会习惯性查看import table 应该学习。
- 除了有详细的地方需要动态调试之外,当静态看不出什么时,应该先动态调试起来。
- 动态调试时f8开始走,跑飞时f7进入。抽丝剥茧。不是无脑f8 f7。要注意使用的api 函数等等。
- GetCommandLineA :检索当前进程的命令行字符串(即获取内容的api)
- CreateProcessA:创建新进程
Ruby打包exe工具ocra
特点:exe会对脚本和ruby程序进行释放,然后调用ruby.exe去执行脚本。而脚本本身在被释放时是以源码形式存放着的,可直接打开。即该工具并不会保护脚本。
因此,打包的程序通过动态调试,发现释放的位置,就可以找到源程序了。但这可能只是该工具如此,其他ruby打包工具不一定如此。
解题过程:
在我OD载入并运行时出现了这情况。在ocr88A.tmp\src文件夹下看到了checkin.rb
别人是在动态调试时发现了路径
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
AES加密:密文 密钥 加密模式都给了。