DawgCTF wp(re和crypto)

简单写写思路,想看详解的。。我脚本有些丢失了。。师傅请移步。
挂了个vpn,算正式打这种国际赛,全是英文。上去打了两天,昨晚晚上划水了一晚上补作业。。。,re那时候写出来三道,Potentially Eazzzy这题是真的坑,不知道是不是我环境问题,本地都过了,服务器死活过不去。。。白给了250分。第三题,讲道理很懵逼,动态进去,不知道里面函数是干啥的。。看了一下午汇编,没结果。。刚刚看了大佬的wp,发现根本没加密,要不就是一堆花指令,直接把明文,输入服务器就出来了,等下还得问问。。。,现在286名,很水,没写的题,下个星期争取搞懂,再写点难的题,打点比赛认识差距,下星期打一波基础
在这里插入图片描述
在这里插入图片描述

re:
1.
在这里插入图片描述
直接ida打开后,发现有一堆汇编指令是mov指令,按R,转换下,发现了flag,直接交了。
2.在这里插入图片描述
这题整体逻辑挺简单了,也没花里胡哨的,直接逆着写回去,感觉之前有些逆向的算法写不出来,是我自己想的过于复杂,实际上爆破就完事了,还挺快乐.

arr=[0x41, 0xF5, 0x51, 0xD1, 0x4D, 0x61, 0xD5, 0xE9, 0x69, 0x89, 0x19, 0xDD, 0x09, 0x11, 0x89, 0xCB, 0x9D, 0xC9, 0x69, 0xF1, 0x6D, 0xD1, 0x7D, 0x89, 0xD9, 0xB5, 0x59, 0x91, 0x59, 0xB1, 0x31, 0x59, 0x6D, 0xD1, 0x8B, 0x21, 0x9D, 0xD5, 0x3D, 0x19, 0x11, 0x79, 0xDD]
i=0
j=len(arr)-1
while i<j:
  arr[i],arr[j]=arr[j],arr[i]
  i+=1
  j-=1
v2=0
flag=[]
for i in range(43):
  for z in range(256):
    v2=0
    for j in range(8):
      if z&(1<<j):
        v2|=1<<(8-j-1)
      if v2==arr[i]:
        flag.append(z)
print(flag)
w=""
for i in range(len(flag)):
  w+=chr((~flag[i]&0xff))
print(w)

在这里插入图片描述
这题感觉也算白给的,一个一个的去找等式,一开始方向错了,以为要用z3,后面意识到是根据自己的邮箱来求key,就变得挺清晰的了,最后两个字母我是直接爆破了,因为逆向推出去,那两个字母只要满足了,就可以过,所以就写脚本。。脚本被我删了,因为当时本地过了,服务器过不去,M大说可能是环境问题,我就放弃了,理解题目意思还算简单的。
第一次遇到这种提交是nc连接的,后面才理解这种程序一般跑完会生成flag的文件,如果在本地就可以得出flag意味着,可以通过爆破,patch下,得到那个flag,我就这么干了,后面想了想,确实。

crypto:
1.
在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created for Spring 2020 CTF
Cryptography 0
10 Points
Welcome to my sanity check.  You'll find this to be fairly easy.  
The oracle is found at umbccd.io:13370, and your methods are:
    flg - returns the flag
    tst - returns the message after the : in "tst:..."
    
@author: pleoxconfusa
"""

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_address = ('crypto.ctf.umbccd.io', 13370)
sock.connect(server_address)

#available methods: flg, tst.


msg = 'tst:hello'


sock.sendall(msg.encode())
data = sock.recv(1024)
print(data.decode())
    
sock.close()

看懂英文就知道了,这种和平常那种校赛不是一个东西,加密和解密的,方法就给你封装好了,理解思想就可以得到flag,还是挺友好的。
flg是返回flag的值,把程序照着样子改一下,跑就出来。
2.剩下三题,我有点忘记了,反正算简单了,看的懂英文就出来了。第4题算是学到一个AES-CBC模式,这加密是将原文分成几个块,有个初始向量,第一块和初始向量异或,再用密钥加密,第二块和第一块密文异或,再用密钥加密。
以此类推。

posted @ 2020-04-12 20:01  YenKoc  阅读(244)  评论(0编辑  收藏  举报