【2019看雪CTF】Q3赛季 第五题:魅影舞姬 WP
2019-09-25 11:41:15 Author: bbs.pediy.com(查看原文) 阅读量:187 收藏

[原创]【2019看雪CTF】Q3赛季 第五题:魅影舞姬 WP

20小时前 15

[原创]【2019看雪CTF】Q3赛季 第五题:魅影舞姬 WP

#【2019看雪CTF】Q3赛季 第五题:魅影舞姬 WP
程序开始先check了输入sn第一字节,使用算法有tea和md5。这个用意不明。(让人多花点时间?)
然后将输入sn的前36字节进行base64解码,再进行以6、6、6、8字节长度进行分组,记为deb。
接着以sn的前24字节为key,对deb[3]进行3des解密并替换。
再对解密后的deb进行check,check函数为sub_403832,其中共进行4次校验,成功次数记录在全局变量中,地址0x4AC048。
最后进行sn的md5 hash校验和0x4AC048处全局变量的校验。到这里,基本可以确定输入长度为36字节,最后的md5 hash校验是为了保证不多解,即36字节后没有输入数据。
函数sub_403832里的校验其实就是走迷宫,对deb的里的4组数据进行校验,以2个bit位的0-3表示上下左右。迷宫及走法如下:

w   s   a   d
0   1   2   3
00  01  10  11

group1
*************
*@***********
*-***********
*--**----****
*-***-**-****
*-***#**-****
*--*****-****
**-*****-****
**-------****
**-*-----****
**---**-*****
**-****--****
*************
sssssdssddddddwwwwwaaass

group2
*************
*@***********
*-***********
*-***-**-****
*--**----****
*-***#**-****
*--*****-****
**-*****-****
**-*-----****
**---**-*****
**-------****
**-****--****
*************
sssssdsssddwddddwwwwaaas

group3
*************
*@***********
*-***********
*-***-**-****
*--*****-****
*-***#**-****
*--**----****
**-*****-****
**-****--****
**---**-*****
**-*-----****
**-------****
*************
sssssdsssddsdddwwdwwaaaw

group4
*************
**-------****
*--*****-****
*-***-**-****
*--*****-****
*-***#**-****
*-***-**-****
*-***-**-****
*--**----****
**---**-*****
*--*****-****
*@***********
*************

wdwwawwwwwwdwddddddsssssssaaawww

走法转换成输入的hex值:

def trans(s):
  t = {'w':'00','s':'01','a':'10','d':'11'}
  out = ''
  for i in s:
    out += t[i]
  out = hex(int(out,2))[2:].replace('L','').decode('hex')
  return out

def main():
  a = trans('sssssdssddddddwwwwwaaass')
  print a.encode('hex')
  a = trans('sssssdsssddwddddwwwwaaas')
  print a.encode('hex')
  a = trans('sssssdsssddsdddwwdwwaaaw')
  print a.encode('hex')
  a = trans('wdwwawwwwwwdwddddddsssssssaaawww')
  print a.encode('hex')
  print 'end.'

if __name__ == '__main__':
  main()

得到5575fff002a555757cff00a955757dfc30a83080033ffd555a80
'5575fff002a555757cff00a955757dfc30a8'.decode('hex').encode('base64')就得到前24字节的sn。
到目前得到了3des的key和明文,加密再base64编码即得到输入的后12字节:geWKJMtrmeY=
所以flag为:VXX/8AKlVXV8/wCpVXV9/DCogeWKJMtrmeY=

[培训]《安卓高级研修班》彻底搞定函数抽取型壳!现在报名得源码和安卓8.1脱壳机!10月20日深圳专场不见不散!

最后于 13小时前 被poyoten编辑 ,原因:


文章来源: https://bbs.pediy.com/thread-254654.htm
如有侵权请联系:admin#unsafe.sh