吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 31897|回复: 148
收起左侧

[CTF] 2019春节红包 四题Writeup

    [复制链接]
XhyEax 发表于 2019-2-20 00:00
本帖最后由 XhyEax 于 2019-2-20 14:09 编辑

解题方法并不唯一,仅供参考。

题目打包下载地址

https://down.52pojie.cn/Challenge/Happy_New_Year_2019_Challenge.rar

第一题 签到题

关注“吾爱破解论坛”公众号,回复指定字符串即可获得本题正确口令和第二题题目下载地址。

第二题 CrackMe

(本题我做的时候是无壳的,因为碰巧发现了内测时的题。公测时加了个upx的壳,故需要先脱壳,esp定律即可)
(这题用OD其实更方便些,个人习惯用IDA)
脱壳后IDA打开,Shift+F12查看字符串,找到关键字符串正确!!!回复你输入的内容到吾爱破解论坛公众号
按X查看引用,定位到判断代码

按F5查看伪代码

上面有个长度判断,输入字符串长度为16
然后下面有个strcmp判断,相等则返回0,不过加了个!就变成相等返回真了

所以在strcmp下个断点查看寄存器(v2)即可得到密码

第三题 逆向题

(用OD也不是不行,可以用IDA导出符号给OD调试)
IDA打开,搜索main,找到程序主入口,定位到关键代码(前面还有个sha1算法的,应该和AES的key有关)

逻辑是base64解码,然后再用aes解密,跟HappyNewYearFrom52PoJie.Cn比对,相同则通过校验
而aes的key应该跟输入的uid有关,虽然不知道他怎么生成,但是可以在使用它的时候断下,直接提取
所以点开main_AesDecrypt,给NewCipher下断点(查看go语言源码可知,传入参数的是key)

在IDA中运行程序,输入uid,然后口令输入一个base64Encode过的字符串(比如MQ==),通过第一个解码校验
然后会在解码时断下,查看传入的第一个参数(其实是key的指针)

在Hex View中按G定位,输入12858120,找到对应的值,提取之(key是十六位的,所以提取前十六位即可)

得到EF2D8BFA0C30AB270B92CC73A563AFA3
其实这一串数据就是我的uid对应的sha1散列值(ef2d8bfa0c30ab270b92cc73a563afa3b04faa75)的字节数组形式,取前16位
AES加密方式为CBC(main_AesDecrypt函数中可以直接看出),补码方式为PKCS5Padding(AES解密错误时,会退出程序,但是有异常信息一闪而过,给报错函数下断点即可查看异常信息)
所以把EF2D8BFA0C30AB270B92CC73A563AFA3转化成字节数组,使用AES/CBC/PKCS5Padding方式,
加密HappyNewYearFrom52PoJie.Cn,再进行base64Encode就可以得到口令了
(至此,程序逻辑完全清晰了)

go语言代码

之前为了验证golang生成的exe程序结构,从网上抄了个aes加解密的go语言的代码,改一改正好用的上(现学现用)

package main

import (
    "fmt"
    "bytes"
    "crypto/cipher"
    "crypto/sha1"
    "crypto/aes"
    "encoding/base64"
)

func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
    padding := blockSize - len(ciphertext)%blockSize
    padtext := bytes.Repeat([]byte{byte(padding)}, padding)
    return append(ciphertext, padtext...)
}

func PKCS5UnPadding(origData []byte) []byte {
    length := len(origData)
    unpadding := int(origData[length-1])
    return origData[:(length - unpadding)]
}

func AesEncrypt(origData, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    blockSize := block.BlockSize()
    origData = PKCS5Padding(origData, blockSize)
    blockMode := cipher.NewCBCEncrypter(block, key[:blockSize])
    crypted := make([]byte, len(origData))
    blockMode.CryptBlocks(crypted, origData)
    return crypted, nil
}

func AesDecrypt(crypted, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    blockSize := block.BlockSize()
    blockMode := cipher.NewCBCDecrypter(block, key[:blockSize])
    origData := make([]byte, len(crypted))
    blockMode.CryptBlocks(origData, crypted)
    origData = PKCS5UnPadding(origData)
    return origData, nil
}

func main() {
    uid := "351649"
    h := sha1.New()
    h.Write([]byte(uid))
    bs := h.Sum(nil)
    var aeskey = bs[0:16]
    pass := []byte("HappyNewYearFrom52PoJie.Cn")
    xpass, err := AesEncrypt(pass, aeskey)
    if err != nil {
        fmt.Println(err)
        return
    }
    pass64 := base64.StdEncoding.EncodeToString(xpass)
    fmt.Printf("加密后:%v\n",pass64)
    bytesPass, err := base64.StdEncoding.DecodeString(pass64)
    if err != nil {
        fmt.Println(err)
        return
    }
    tpass, err := AesDecrypt(bytesPass, aeskey)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("解密后:%s\n", tpass)
}

第四题 RCNB

解压得到RCNB.md,内容如下

# ȐĆŅƃȓƇńƃȒċƝTɌÇńßɌĉŇƅŕƇŃbȒȼȵßȒĆȵƁȓĉnƁɌćǸß

ƦćƝƁȓĉnƅȓčƞTɌćÑbȒČŃbȒċÑbŕƇŃtȒČNƃȒĈÑƄȓĊÑƄŕƇņTȓčƞTɌćÑbȒċƝTŘcǸTȐĆŅBƦĊȵtřÇȵƅȐċŇbɌcńtȓČŇƁŕƇNƀȒČŃBɌćÑBɌċnƄȓĈƝbŗƇƞTŗčnBŕƇntȒȻŃBȓĉnƅȒČNƅȒƈŇtŕčȠßŕƇŃƃřčȠbřċȵƀ

ȐčNƄŕƇņƃɌcŅƄɌċntŕƇŇƁȓƇńƁŕƇńtɌcńƄŕƇńtɌCňƀƦȻƝƃŕƇńtɌCňƀȐĉņtŗcŅƅȒĈÑƄȓĊǸƅȓĈȵtɌćƞßŕƇņTȒȻŃtɌCňƀɌćǸbȒȼǹßȓĈƝB

[ƦĉņƃŖċŅtŕƇŅƀȒCŅƀȒƈŇtɌcŅƄɌĉŇßŕƇņTȓčƞTȒƈňtŕƇńtȓĉntȓČŇBŗcŅƅɌćƞƁȓćŅƁŕƇņTȒȻŃtɌCňƁ](//rcnb.xyz)

řĊÑbȒĉȠƀɌćÑbȒċƝTȓćŅƁɌƈȠƃŕƇŃtȒȻŃtȒĈƞTȑÇǹƄɌCȠƄƦȻŇƅɌćƞBȐčnTŗÇÑBřĊÑbɌĆntŗÇǹb

ȐȼŃßɌćÑbŕƇņTȒȻŃƄŕƇņTɌcńtȒCŅbŕȻ

ŘĈÑƀƝƄŘȻŖĊǸƀrcnƃňßɍĉƞƀRČņbRÇrcnbrcnbrcnbŖĊƝƃrcnbrcnbrcnbrČNtȓĉƞƁnƅŔƇńTrćǹƁȓĆÑƅŔȼŕÇƞƅƞßȐCŅƁȐƇŖĆňƁɌƇȵƃȑĈȠƃNƃƦčƝƄȓĉŕČňƃŇbȐĆȑćnƅŘȼȵßƞßRĆǸƄɌCƞBȑĊŅTŗĊɌȼŃßŇƁŔcŔƈǹTȠƁɌĆńƅɍĉƝTŖÇɌcŇƅŖĆntńƁȓČňƄŘȻȓȻnƃǸƁɌCȒćȵƁȵƄɌCŅƅȐčŃƀřCřƇŇƁǸtřÇƞbƦČnbRCƝßȐćǹƁŔȻřȻņBǹBȑċŗÇƞƃȠBɌĆÑƃŕčņƃȓƇńbŖčÑbɌĊŗƈÑBRcƞƁȑƇńTƦČǹƀǸƀŘcŘȻnƅRCņƃŅƄȐĉNTŘĈÑƄŕčȐćǹbŇTȓćǹßɌĈŔȻňƀƝbȐÇrCǹTȓȻŃBńƄɍċńbɌČŗƇnƅȵƀŗċņßRCŇbřČřćÑƀȐĊŃbǸƅɍcȑCȵbǸßȑƇȑCǹƅŘȻŃƃřċŃtnƄRċǹBrƇńƃŖĈȑĉņbƞƅƦĆrCƝTƦĆÑBņƄrćȑƇÑƅńƄƦƇŗĆnƀŔĆȠƄȐćNƀÑƅƦȼȓĉŇƄȵßȑCǹƄȐȼŗćȠƃŅBȓCȠƁŔċƝßřcŘčŅbƦĊƝƃɌċƞƀnƁŘȻÑbŖčŗCntȒȻÑƅNtřȼrƈNƁŕĆƝBȐÇňƅȐCŃßŅƄrćƞƀȓĊńƃŖƇǸƁřċŘćŃƁŘȼÑƅȑċȵƀŃtrƇŃßŕĉrćNtȒȻƝƁɌƈȠbƦĊNƅŔCƝßȓČńTƦċŇbŖƈņƃŖĉȵtnƃɍĉɌƈňTřčǹBȠbŕĉřċńtņƄȑÇƞƁȒcŘĉǸƅňƃȒcŔĈńßǹƁƦćȓȼǹƁÑƁƦCȑċŇƄȓƈnƄȵƄrcŘčnƃȵßRčȑcNƁrĊNƅȐÇŇƁņƁȒčnƀɌČňbɌĆrȼƞTŇƃɌCřÇntňƅȒȼƝBȑcȐȻnBňƁȑċȓcȠbǹtȑƇǹƁrĈŖƈňƁŗcȵbňtřȼƦĈŃƅňßŗcŃƀƦĊŔcńTŖĉȠƅŃƁȑĊȐÇȠtƞTɌƇȵƅȐȼɍĉÑBrƇŇƅŔčƞßnƅŗĈɍĆȵƅŖČņbŖĆȠTȒċÑƃŗċNƃŕȻŃTNTŔčŕĆƞƃNƃRČȐĆņƁŃƀřċŃbȓčƝƃȑcŔĆNtȑčȠbŗĆNtŇƁȓčrčŃƄȑĉntŅtȓȻřcÑƄŖƇÑßȐĆńbŅbŕĊŃßŕČŇTȒcÑƁȑĆŘÇńƃRƈǸƅŕcȠbņTȑċRƈŇƀȐcňtńTƦĈɍCȠƀÑBRĉǸƁŗȼȑƇnƁȵßŕƇŖċƞƅřƇǹtŇƄŖÇȠƃRĈǸƅŕƇņtŔĊřƈňbƝßrƈŕÇǸtŃTȐĆnbȑĉȑȻǸƃǹƀRƇrƈNbnƄrċrĉŅBƦcňtRċňƁnBŗȼÑƁŕċƞßɍĈŗćņƀǹƁȑĈŅtŔƇňƅŗƇrĊǹƄǸßȒƈǹßŕȻȠBŔćƝtŔȻÑBȓĆǸTȑċŕĉŃtŃƀŘcřȻÑBŅƀɌƈńƄŔĊÑTƦĈƞƃȓȼņƁŘȻnƄŔćŖċǸƄŅBŖÇȓĉŅBňƄȐȼŖÇņbǹƅrȻÑTŔČŅßŔĊNtɌƇȠTRĉntřčŕċNtȠtƦȼȠƅRĆÑƄŗćŘčŃƄŖÇÑƄǹbȑĆŖÇǹtƞƄȓcƞƁRCǸƄɍćȒČNƅȓȻňTņBRĆƞbřƇŖcȠbřȻńƄŗĆŃTŃBƦĉŗĊNtřĊņßȒĆȠƁȑĊŅBȐƈȵBǹƁřcrĉƞbnƀƦċŘȼÑƀȒÇńƁŗCȠƁƝßrĊǹtŗȻŃƀȒȻɍċNßŖĉǸßŃTrƇȒȼȠƃřƇŃƃNbŘċƦČňƅŔČnBŗČƞbƞßŔȼŔĊȠƀnƅŖċŕčŇƄǹBŔCřċǹƅȐČňƀƝƀřĈŖČȵßńTɌCǹƃŔćȓċÑtŕȼƝƄȒcńbǹbȓƈƝƅɌĆȠƄŖćǹBŖƈŘÇƝƅƦĉŃƁŃßŖĉNƃŔĉÑƄŖĈƞtȑČȑČnBŃƁŔČnƃȒĈȓĈNBǸßȐCȠßȐčŅbɍĉƞtƦĉrȻŅBŇßȒȻǸƁŘȼŘċńBňbŘčnƄŘÇȒƈŇƅǹTřćȐćŅTƦċŇƄŇbɌƇƦƇńƀňƁrČRČņbȑÇŅßȵƅřȼŖĆǸƀŔCƝƀņTȓƇrĊŇtňbŕÇŃƄŔƈńTŘČȐĊƝbřȻǹƃɌČȠBńƄȒƇNtřĊɌćņBŕȼȠƃŖƇňtÑßȓȼȑČÑƅnƄɍĉnTŗcŘƈňßȓĉȵƄȑcNbȠßƦÇŅƃɍĈƦĊnƁŖÇŅBŔcŃƁńƁɌċňTŕĉƦCņƅƦȻȵƅȓÇǹƃȓĆȠƃRȻňƃřćǸƀŗƈǹßřĉňbȐČńƁɍĈŇTÑTŘćŗÇNbŗȻÑTRƈǸƃǹƀŕȻRĉƞBńtŘȻŔĆƝƁņBŕȻNBRĉņƃȓČƝƁȐċÑƀRČŕƈňƀrčŇƅȐĊŅTƦȼǹƁňƃȓĊntřĈŘCntȠƀȒcƞƃɌćɌĊȵƅŕƇňƃnƄŔčńTRČřȼńbŇßŕĊňtŘCǹbŔĈnbŕĊńtȑcŃƄŔĈŔčńbȐčȠBřĉŅƃņƃŘƈɌÇÑTŇƄȓĉɍċňƅńtŗCřČƝƄRCņTƝƁŔĈRȼNƅȒCnƃɌƇǹßńTŕƈŇBŘCŕȼÑBȒÇŃTǸƁȓȼŕČȠtȵƁȑƈńƀŔcȑƇÑßrƈǸTrcŃTŇƅȓćɌćńƀɍćňƀȠƅŘȼǸƁɍĊřčƞTņƃrĊǸƀŗcȓƈńƀŇƀȐcrĊŅBȓĈȠƁɍćnƁnTɌƇÑƃȐȼƞßŔCɍćƞbƝBȒcņƁrċnBŗƈȓȻńƃɌCÑBƞƀȒČňßŔƇřƇǹbŖcņƃŕĆňtŕČņƅȒĉŇƅȐĈŇƁȠƃRĉŔƇǸtŘĊȵßŔȼńbȑƈȠBǹBɌčȵƃrčǹƄŔȻƞƅŗȼȒĆƞƀŖĉȵbŕcƝTȒȼńBrċǸƅŘcȠTȐčƝbȓĊŅbŘCȠƀɍĆȠƅŕĉNƀȠTŖćřċńƁńtȓĉȠƁƦȻnƀȓÇɍĈŅƅǸƀȓčȒȻņƀǹTɍcȑĆȵƃrȻƝƀɌCŃtɍĈȵtŖČņßňƅŗĉÑTŕƈȑcŃƁǸßȒƇȐÇƞßńbŕƈȵBŕƇnƄȓċȑȼȠBɍċŅTŗċŅƃƦčńƄňTRÇrcŅƄȐÇȠTřčȠTƞBɌȼɍĈŇtɍĉÑƅǸBrĆňƃŖȻŕčȵbņßŘĊƞƀȐƈntŘčȓȻÑTŕcńtņbŔȼɌČÑBɌčȵbȑĈŅBŕĉƞƄÑtȒÇȓȻNƀÑßŘĈÑƀȐȼƝBŔĈȵtɍĊÑßŕĉȒȼntŕÇņbńtɍĆŅTŗĊŃƃRċņƅŘcNtȑĆŅƁrƈǸƄȒCƝtŖȻrÇŇbřĊŅƅȑƈŃBƦċnßňƅƦĉÑtȓĈřȼŃƀɍcŃƄȵtɌCřĆNƄǹƄƦȻŔčŅƃnƅrċrCǸƄȓƈŃƀrÇnƁrCÑƅrCȵƀrƈǹßrƈȵƁRĆƞƁrÇŇTȵßƦČȑȼǸƁǹBȑcɌƈƝTȒĆŅTrĆňƃRćŇƁȠƅȓcrc

有一个明显的网址rcnb.xyz,浏览器打开发现,所谓RC就是一个自定义的编码方式(因为开头有R结尾有C?),将内容解码得到

# Prove your Niubility

Hello there, Welcome to the 52PoJiE Spring Festival 2019 Challenge - RCNB.

To prove you are as NB as RC, complete this trial!

[It's dangerous to go alone, take this!](//rcnb.xyz)

And the key: Which_is_N0t_Th3_Answ3r

With the trial:

后面的解出来是个7z的文件,但是由于转化成了字符串,所以很多字节丢失了,解码出来变成了问号。所以需要修改js代码,让它返回16进制字符串,方便直接转化成文件

修改js代码

定位到editor.js代码的rc2str函数,将它修改为

    function rc2str(str) {
        if (str === '') return '';
        var res = rcnb.decode(str.trim())
        return Bytes2Str(res);
    }

Bytes2Str函数是直接网上找的

function Bytes2Str(arr)
{
    var str = "";
    for(var i=0; i<arr.length; i++)
    {
       var tmp = arr[i].toString(16);
       if(tmp.length == 1)
       {
           tmp = "0" + tmp;
       }
       str += tmp;
    }
    return str;
}

然后就可以得到一串16进制字符串,转化为文件保存即可。
压缩包的密码就是之前得到的Which_is_N0t_Th3_Answ3r
得到一个nb文件,直接记事本打开,得到

ȐȼŃƁȓĉnƅŕƇŅƀȓƇŃƅȒċƝtŕƇNƄɌćŃTɌCȵBȒČNƄɌCňƀɌćÑbȒCŅTŕƇŇƁȓƇńƁŕƇŅƅȒCņbȒċƝTȒƈƝƀȒČnƁɌćŃTȓƈȠƅȓƇNtɌcńBȓĊǸƁȒȼȵbȒƈnbɌCȵßȒȼȠTȓĉNƁŗćƝƅRćŇbƞƅRȻÑßŘȻŇƁrĊńßŕčȠtRĉNƁƦĈņBƦcǹTƦćŃbƦĈNƁƦĈȒćƝTnƅŔĆņTrȼȒćƝtǸßRĊńtrȻNtrČńßŕčǸTRĊȵTrȼȵbŕƇŇTrĊnTŔĆnBŘÇƝƃrĉǹtƦćņƅƦcȵƀƦćņBƦcǹTƦćŃbƦĈNƁƦĈȒćƝTnƃŔĆǸtRĊƝƃrĉňTƦĉřƇƞtȵƅrȼņbrCnƃŔĆņßRćńßrȻńßŕčŃBRĊƞƅřȻƞƀřƇǹtƦćȵTřƈƞtřȻŅtƦcǸƁřȻņƄƦcƞTřȻŇbřƇǹTƦćNtƦĈƞƄřȻņƀƦcǸƁřȻņƄƦcƞßřȻņƁƦcǹtƦćņƄƦcƞƄřȻņBƦcǹTƦćŃbƦĈȵƀƦćȒćƝTŃƄŔCƞTřȻŅtƦcňTƦĉřƇƞtȵƅrȼņbrCŃƄŔCƞßřȻŅTƦcǹTƦćȵƄřƈȵƀƦćŅTƦcňTƦĉȵƁřƈŅßřƇȒćƝtŃBRĊƞßřȻņƀƦcňTƦĉȵƄřƈƞTřȻņƀƦcǹTƦćNtƦĈƞƅřȻņƀƦcňTƦĉȵƄřƈƞtřȻŇbřƇǸƁřȻņƄƦcƞTřȻŇbřƇǹTƦćNtƦĈƞƄřȻņƀƦcǸƁřȻņƄƦcƞƄřȻȒćƝTnƃŔĆǸtRĊŇƅrĊŃBrČŃƃŔċńtrȻŅbrċǹTƦćȵTřƈȓčnTnƅrćǸƃŔćÑtŘȻȠBŘĊȵƅŕċRćņßƝƃŔƇȵƅrƇŅTƦcǹTƦćȵƁřƈȓčnƄNtřĆŃƃŔċÑƀrÇƞƀřƇǹtƦćņƄƦcƞƅřȻņƁƦcňTƦĉņƄƦcňßƦcņƀƦcǸßřȻȵƃřƈňßƦcŇBřƇǸƄřȻņƄƦcȵƀƦćȒćƝTǸbŔćňTRČNƅŘCǹTƦćŃbƦĈňTƦcƞƀřƇǸƄřȻȒĉŅBǹTrčȠbrčŅTŔcÑƃRCȵbŕƇnƅrćŃƄŔCƞßřȻŅTƦcňTƦĉȵƁřƈƞƄřȻŇbřƇňTƦĉȵƁřƈŅßřƇŇBřƇǸƁřȻņƄƦcƞßřȻƞƀřƇǹtƦćȵTřƈÑbřȻřČȵßǸTRĊǸtRĊǹTrčȠbrčǸbŔćņtRćȠƃŘĊŃƄrČŃBRĊƞƅřȻņƀƦcǸƁřȻņƄƦcƞƅřȻƞƀřƇǹTƦćȵƀřƈNƁƦĈƞƀřƇňTƦĉȵƄřƈƞtřȻŇbřƇǸƁřȻņƄƦcƞƄřȻņBƦcǸßřȻȵtřƈȵƀƦćȒćƝƄȵƅŔȻNƅRĉǸƅŘCņbrCȠBŔĆŅßřƇřČȵƁȵƅŔȻńtrȻƝƃrĉǸƃřȻȵTřƈNƁƦĈņBƦcňTƦĉȵƁřƈŇbƦĆŅTƦcǹtƦćņƅƦcȵƀƦćŇBřƇǸƅřȻȵtřƈƞßřȻņƀƦcǸƄřȻȵƄřƈȵƀƦćņƀƦcǹTƦćŃbƦĈNƁƦĈņƁƦcǹTƦćNtƦĈƞßřȻřČȵƅnƃŔĆƝƃrƈǹƀŕĉŇTrĊnƃŔĆȵƁrȼņbŔcŃƃrČǸbŔćņßRćÑƀrƇǸßřȻņƄƦcƦȼŇƅnßrćǹbRĊŅbrȻǹTŕĊňTƦĉřƇÑbǸtŕĉńƅŕčƞƀRȻÑBRCƝBrƈŃbřĆŃTŖĊnƀŘÇǹƀŕĉŇƄrĊƝƃŔƇȵƄrȼŃƀrČņBrCȠtRĉňßƦcřċÑƅRĆŇtŖƇŃTǹƅƦćȒĉŅBȵƁrȼňßŕċȠßŔčƞßřȻņƁƦcǹTƦćřƇƞtǹTrčņbrCnƃŔĆÑƃRCȵbŕƇņbrCnTŔĆnBŘÇŇƅrĊŃƄrČŃBRĊƞƅřȻņƀƦcǸƃřȻȵßřƈƞßřȻƞƀřƇǸƁřȻņƄƦcƞTřȻŇbřƇǹTƦćNtƦĈƞƄřȻņƀƦcǸƁřȻņƄƦcƞßřȻƞƀřƇǹTƦćȵTřƈƞƄřȻŇBřƇǸƅřȻȵtřƈƞƅřȻȒćƝƅŃTŖĊnBŘÇŅbrȻȠBrčǸTRĊǸßRĊŅßŔcŃƁřĆǹbRĊȵßrȼƞbŘČŇtrĊǸTRĊÑBRCǹƄrčńƅŕčŃƄŔCƞßřȻņƁƦcǹTƦćȵTřƈȓČŃƅƝƅƦcNtƦĈňßƦcņBƦcǹßƦćńßřƇňßƦcņƀƦcǸƅřȻřčȠbŅtƦcǹƅƦćȵƄřƈƞTřȻƞƀřƇ

拿去网站解码(不需要16进制了,所以用原本的js即可)
得到

Well done! It seems that you have great programming skills.

ȐȼŃßɌCȵƃȒȼȵbȒƈnbɌÇńßɌĈȠƃȒȻŃBȓƈȠƃȒȼȵbȒČŃBɌCňƀȒĊŇßɌcńtȓČŇƁŕƇņTȒȻŃƄŕƇŅƅȓƇŃƃȒȼȠbȒCņƁɌCňƀȒCŅƀȒĉȠƀɌćÑbɌcŅƄɌĉņƄȒȻńƄɌĉŇTŕƇņTȒȻŃƄŕƇŃbȒČŃƄŕƇńBȒČnƁȓȼǸß

ŗĆnƀȒćntŕƇntȓƇńƅɌƇƝƄřĈƝßŗƇȠbȓčȵbȒȼƞtŗcŅƅȑĉȠƁȒCŅƀɌćŃTɌćÑßŕƇŅtȓČňBɌČŅƅȓĊǸƄɌcńƄŕƇńtȒĆȵtɌĉŇTŕƇŃƃřčȠbřċȵƀȓCÑBřćŃBŖČȵƃɌćǸƀȓƈȠßŘčŅƄŗĉȠƄȒȼȵƅȒȻŅBȒĆƝƃȒĈÑƄȓĊņBřƇNƁɌƇƞbɌCƝßȐĉņtƦȻƝƃŗĈńƀɌCƝB

;) ȐcňTŗcŅƅȒCŅƀȒĉȠƀȒȻŃƄɌcńƄŖċŅtŕƇņTȒȻŃƄŕƇŅtȒČŃßŘčńbƦȻŇƅɌČÑtɌƈǹƃɌĉŅßȒCŅƅȒČnBƦȻƝƃȑÇƝƄŘCNƁȐĉņt

继续解码就可以得到key了

----简单的分割线----

迟来的元宵快乐!

PS: 活动规则所限,活动结束之后才能发布解题方法

免费评分

参与人数 62吾爱币 +78 热心值 +59 收起 理由
blue16深蓝梦境 + 1 + 1 用心讨论,共获提升!
今生缘丶 + 1 + 1 谢谢@Thanks!
soyiC + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
据守 + 1 + 1 谢谢@Thanks!
EngMJ + 1 + 1 我很赞同!
Ganlv + 2 + 1 我很赞同!
浩子tim + 1 + 1 用心讨论,共获提升!
LLHFV + 1 + 1 谢谢@Thanks!
silvanevil + 1 + 1 谢谢@Thanks!
maobaozhi + 1 + 1 我很赞同!
MarkMatt + 1 我很赞同!
箭靶 + 1 + 1 膜拜中,感觉需要好好学习
zhouyikun + 1 + 1 我很赞同!
mythic + 1 + 1 谢谢@Thanks!
ibert + 1 + 1 谢谢@Thanks!
xiaowanzi + 1 + 1 谢谢@Thanks!
精一 + 1 谢谢@Thanks!
quandu + 1 + 1 用心讨论,共获提升!
qdtjvszxc + 1 + 1 我很赞同!
2005ldx + 1 + 1 我很赞同!
陈名侦探 + 1 + 1 热心回复!
山高人为蜂 + 1 + 1 谢谢你的第三题注册代码,在H大关闭任务前抢到了红包。
Patty + 1 + 1 谢谢@Thanks!
voice + 1 + 1 我很赞同!
于凡 + 1 用心讨论,共获提升!
sunnylds7 + 1 + 1 热心回复!
IAMANGRY + 1 + 1 老哥稳
siuhoapdou + 1 + 1 谢谢@Thanks!
bb8820 + 1 我很赞同!
定个一份爱 + 1 用心讨论,共获提升!
小小学生 + 1 + 1 热心回复!
Eric_Lian + 1 + 1 R C N B !
WO灵魂泡 + 1 + 1 热心回复!
酷爱腾讯 + 1 + 1 我很赞同!
svipstj + 1 + 1 热心回复!
梦游枪手 + 2 + 1 热心回复!
blsn3548 + 2 + 1 谢谢@Thanks!
liphily + 3 + 1 谢谢@Thanks!
艹123 + 1 + 1 我很赞同!
fanyongchang3 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
shy2012 + 1 + 1 只做了第一题,第二题开始就看不懂了!T_T
CrazyNut + 3 + 1 膜拜各位大佬
gunxsword + 1 + 1 第三题没搞定,看了...也不会!!!!
连晋 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
丞相范睢 + 1 + 1 好强,好强!
zhouxx + 1 + 1 用心讨论,共获提升!
WZCLCY + 1 + 1 我很赞同!
sheldon_wxd + 1 + 1 大神膜BAI....
xianshui8888 + 1 + 1 谢谢@Thanks!
asasok + 1 + 1 用心讨论,共获提升!
sqing + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Peace + 10 + 1 用心讨论,共获提升!
cxp521 + 1 + 1 我很赞同!
UniqueLegend + 1 + 1 用心讨论,共获提升!
topcss + 1 + 1 用心讨论,共获提升!
Nnjojo + 1 + 1 谢谢@Thanks!
hzwsuki + 1 + 1 谢谢@Thanks!
Saup + 1 + 1 厉害厉害!
涛之雨 + 2 + 1 谢谢@Thanks!
Coxxs + 3 + 1 tql!
YuriBrightan + 1 + 1 谢谢@Thanks!
孤狼微博 + 1 看你的分析上面的一句话我才知道我为什么输入不对,原来是要去公众号回复

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

blsn3548 发表于 2019-2-20 10:09
本帖最后由 blsn3548 于 2019-2-20 10:12 编辑

前两题都很简单,第三题看了两遍发现是go程序,有点懵逼,没搞定,之后也没在搞。刚刚看了分析思路立马明白了。
第四题看了看算法,网上撸了一段代码本地运行得到一个.7z文件然后解压得到一个文件继续解密就找到key了。

附当时用的代码:
'use strict';
//https://github.com/Coxxs/RCNB.js
var rcnb = require('./rcnb.js');
var fs = require("fs");
const util = require('util');

function str2rc(str) {
        if (str === '') return '';
        return rcnb.encode(new TextEncoder('utf-8').encode(str));
}

function rc2str(str) {
        if (str === '') return '';
        return rcnb.decode(str.trim());
}

var res = '填入要解密的那段';

var data = rc2str(res);
console.log(data);

// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.7z');

// 使用 utf8 编码写入数据
writerStream.write(data,'ASCII');

// 标记文件末尾
writerStream.end();

console.log("程序执行完毕");

点评

bingo, 我做的时候没有想到去找作者的github仓库,第四题解到最后就会给出github仓库地址了  发表于 2019-2-20 11:21

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
Coxxs + 3 + 1 我很赞同!

查看全部评分

山高人为蜂 发表于 2019-2-20 09:25
本帖最后由 山高人为蜂 于 2019-2-20 10:25 编辑

我第三题搞不了。算法太复杂了(在输入古怪字符时,程序会提示AES、shXX加密模块失败,就知道不是好东西)。而且最终是要在网络上验证口令,绕过注册码的爆破方法没用,只能放弃了。

第四题很多朋友没搞定,要知道加密的密文首先要知道其加密的算法,打开看到的是ASCII文本,不放过任何可疑的字串,我首先是看到了一个疑似的网址,在浏览器输入后,跳转一个网页,果然有料到,知道这种很神奇的rcnb加密算法。再到外国网站上找到这种算法的解密网页,将密文复制、粘贴尝试解密,密文很明显的分了几段,每一段有非常丰富的信息,信息内又有下一步的解决方法线索,最后作者隐藏了一个重要密文在不起眼的位置,解开密文就知道了本题最终口令。其实不用编程的,我用了浏览器、谷歌、百度、WINHEX十六进制编辑器、WINRAR、记事本,不断的复制、粘贴就搞定了。将7Z的十六进制数据,用WINHEX建立一个空白的文件,粘贴进去,保存成7Z文件,用WINRAR解压,输入密码,就能解开。

第三题根据楼主给出的注册机,改了改ID,解到了口令,居然顺利的领到了迟到的红包。哈哈,搭个便车。
现在任务已经关闭了,我可能是最后一个领到红包的了。
不过GO语言还是挺有意思的。
MagicBlue 发表于 2019-2-20 06:42
原来rcnb.xyz是个url....我也是醉了

点评

如果你熟悉Markdown语法的话就知道了  发表于 2019-2-20 11:12
Sherry01 发表于 2019-2-20 19:40
第三题不用脱壳吗?没查出是什么壳
梦游枪手 发表于 2019-2-20 17:38
当初第三题的CBC补码卡了我不少时间,最后去查了go语言的补码模式才搞定的
 楼主| XhyEax 发表于 2019-2-20 13:36
chaosnaix 发表于 2019-2-20 11:44
第二题按照楼主的方法,直接用IDA打开,看到的字符串都是乱码啊??难道是我使用的方式不对?楼主真的没 ...

我做的时候是没有壳子的,后面加了个upx,自己脱下
hlrlqy 发表于 2019-2-20 10:14
golang那道题就是uid的sha1 一眼就看出来了的
Eorton 发表于 2019-2-20 09:15 来自手机
虽然第二题用esp脱壳大法是秒破,但第三题我是找到算法却不知道怎么转换,第四题是到达Which_is_N0t_Th3_Answ3r了,但是7Z后面加一堆乱码也很扎心,多加学习哈哈

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
老罗791 + 1 + 1 不用脱壳吧!运行起来程序就解码了

查看全部评分

 楼主| XhyEax 发表于 2019-2-20 00:06
H大,原创是不是能置顶一段时间@Hmily
AA20072008 发表于 2019-2-20 00:23
楼主好厉害  佩服
成国大吉大利 发表于 2019-2-20 00:33

楼主好厉害  佩服
2205 发表于 2019-2-20 00:51
想领2019红包,可惜解密要求的技能树太多了,技能点根本不够点。
hongge 发表于 2019-2-20 02:05
表示后面两题没看懂~
陈世界 发表于 2019-2-20 02:23
谢谢楼主分享了
YuriBrightan 发表于 2019-2-20 02:25
学习了,学习了
涛之雨 发表于 2019-2-20 07:59
大佬。。。能不能顺便把红包文件上传一下。。。像照猫画虎一波。。。但四超过时间了……就申请不了也下不了也没有解压密码

点评

晚点我把题目打包一下放到爱盘给大家学习。  详情 回复 发表于 2019-2-20 08:31
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 02:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表