夜深了,写完要赶紧睡了!
题目:ISC2016训练赛——phrackCTF
拿到这个题目,打开PEid看看是否加了壳,观察发现是C#文件,呵!今天算是又抓了个典型,话不多说,赶紧找工具送进去反编译一波儿(哦,对了还是应该先运行一下,看看具体流程),找了个工具:dnsPy据说是神器!
dnSpy资源管理器一角有点懵,这都是什么奇奇怪怪的没被识别出来的字符,不过耐着性子熟悉了一下环境:和普通IDE差不多,至于那些图标可以提示这些代表什么:这些其实是些函数与变量的标识符
Step1:找入口点
前段时间Qt的经验暗示我具体逻辑在那个Wm函数中
Step2:找逻辑
看到了一些MessageBox这不是验证模块吗,再看下发现就是输入字符串text,经过一函数加工成text2后判断一个是否与另一个函数的结果相等,不等报错......
关键函数判断逻辑Step3:动态调试
动态跟下程序,发现其中有些量是不变的,并且那个加工函数其实是个加密函数,搜了一下,是AES加密方式,key也在调试过程中暴露出来了,因此解密即可。
AES加密的keyStep4:解密脚本
#-*-coding:utf8-*-
import base64
from Crypto.Cipher import AES
from binascii import b2a_hex,a2b_hex
key = 'pctf2016pctf2016pctf2016pctf2016'
result = 'x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk='
deb64 = base64.b64decode(result)
obj = AES.new(key, AES.MODE_ECB)
print(b2a_hex(obj.decrypt(deb64)))
转成字符串得flag
网友评论