De1CTF 2020 推文

好吧有点破事水……想了想还是把标题改了

ERQKGDWRP3SBHQQ3MTGBIYAZE4KJG5M3HCKRERQCIYWRP2KBHTGBGDMZE4KBH5M3GDABERQJIBWRP2IBH%D3%D3%D3YXNDBDJDATRYMHYUYC6VYDOGNDRVUSIYBDQ3YXNFMDJDAENYMC6WVDOGNDMRESIYVDM3YXNZNDJDATNQM3%D3%D3%D

大佬

5Yir6Zeu5oiRIOiHquW3seeci+WbvueJhw==

XCTF小秘

简单签到MISC,随便写了一个:

import com.google.common.io.BaseEncoding
import org.apache.commons.text.StringEscapeUtils
import java.net.URLDecoder
import java.nio.charset.StandardCharsets

fun main() {
    val str1First = "ERQKGDWRP3SBHQQ3MTGBIYAZE4KJG5M3HCKRERQCIYWRP2KBHTGBGDMZE4KBH5M3GDABERQJIBWRP2IBH%D3%D3%D3"
    val str1Second = "YXNDBDJDATRYMHYUYC6VYDOGNDRVUSIYBDQ3YXNFMDJDAENYMC6WVDOGNDMRESIYVDM3YXNZNDJDATNQM3%D3%D3%D"
    val str1 = buildString {
        str1First.zip(str1Second).forEach { (first, second) ->
            append(first).append(second)
        }
    }
    val str1UrlDecoded = URLDecoder.decode(str1, "UTF-8")
    println("Step1: $str1UrlDecoded")
    val str1Base32Decoded = String(BaseEncoding.base32().decode(str1UrlDecoded), StandardCharsets.UTF_8)
    println("Step2: $str1Base32Decoded")
    val str1UnicodeUnescaped = StringEscapeUtils.unescapeHtml4(str1Base32Decoded)
    println("Step3: $str1UnicodeUnescaped")
    val str2 = "5Yir6Zeu5oiRIOiHquW3seeci+WbvueJhw=="
    println(String(BaseEncoding.base64().decode(str2), StandardCharsets.UTF_8))
}

为了混合两个字符串,Kotlin标准库的zip还是挺有意思的。

关于Unicode编码,找到了这个:Unicode Escape Formats,所以形如�的转为字符串就直接StringEscapeUtils.unescapeHtml4()处理。

引用:
arraylist – Merge two strings in kotlin – Stack Overflow

Windows下利用WSL使用pwntools

(以下是小学生日记式开头)

今天我们来讨论一下在Windows上使用pwntools的姿势。

WSL到现在也有一段时间了,现在你也可以选择玩WSL 2。PyCharm支持它挺久了,下面就来简单废话一下。

如果你不打算用IDE…

那似乎并不需要看我下面在废话什么了…你只需要:

  1. 控制面板->程序->启用或关闭Windows功能里选上适用于Linux的Windows子系统,或是直接打开PowerShell:
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  2. 可以到Microsoft Store搜索WSL,然后下载安装一个适合你的Linux发行版。
  3. 在WSL中安装你所需要的工具,例如python、nano,当然还有pwntools。

然后你就可以愉快地开始撸题了。

准备好WSL和IDE

好了我们来进入正题。这里我就假设你已经根据上面的几句简短的描述安装好了WSL(滑稽.jpg)。现在,你可以选择JetBrains PyCharm,对于学生来说,可以申请教育授权来免费使用Professional版本。

另外,如果你已经拥有了JetBrains IntelliJ IDEA Ultimate,并且不希望再安装一个IDE,你可以安装Python插件来实现。

配置一下

如果你不想看我废话,你可以出门拐弯到这里

不论是PyCharm还是IntelliJ IDEA,新建Project的时候应该都会提示指定Python解释器。选择WSL就可以开始了。

如果已经新建好了一个Project,这个时候你可以在右上角或Settings中找到Project Structure (Ctrl+Alt+Shift+S),找不到的话就两下Shift来Search Everywhere吧。然后选中左侧栏的Platform Settings->SDKs,点击加号并选中Python SDK,就像这样:

PWNTOOLS-1.png
Project Structure->SDKs->Add New SDK

附:当写这篇文章的时候,IntelliJ IDEA还是2019.1,某个小版本里,这里没有WSL选项,当时用SSH Interpreter先顶一下。

Unresolved reference ‘pwn’

确定正确的SDK之后,如果IDE建立索引后,代码中的from pwn import *仍然提示错误:Unresolved reference ‘pwn’,可能可以通过Invalidate Caches来解决。

PWNTOOLS-5.png
Invalidate Caches and Restart

重启后应该就没有问题了。

PWNTOOLS-6.png

引用:
Why PyCharm can’t resolve reference for a remote Docker interpreter?