2018-04-21 RE第二记

夜深了,写完要赶紧睡了!

题目:ISC2016训练赛——phrackCTF

    拿到这个题目,打开PEid看看是否加了壳,观察发现是C#文件,呵!今天算是又抓了个典型,话不多说,赶紧找工具送进去反编译一波儿(哦,对了还是应该先运行一下,看看具体流程),找了个工具:dnsPy据说是神器!


dnSpy资源管理器一角

有点懵,这都是什么奇奇怪怪的没被识别出来的字符,不过耐着性子熟悉了一下环境:和普通IDE差不多,至于那些图标可以提示这些代表什么:这些其实是些函数与变量的标识符

Step1:找入口点


入口点处函数

前段时间Qt的经验暗示我具体逻辑在那个Wm函数中

Step2:找逻辑

看到了一些MessageBox这不是验证模块吗,再看下发现就是输入字符串text,经过一函数加工成text2后判断一个是否与另一个函数的结果相等,不等报错......


关键函数判断逻辑

Step3:动态调试

动态跟下程序,发现其中有些量是不变的,并且那个加工函数其实是个加密函数,搜了一下,是AES加密方式,key也在调试过程中暴露出来了,因此解密即可。


AES加密的key


flag加密后的数据

Step4:解密脚本

#-*-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

你可能感兴趣的:(2018-04-21 RE第二记)