网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

admin 2024年10月13日00:56:17评论208 views字数 14063阅读46分52秒阅读模式

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

本文字数:1947|预计3分钟读完

“网鼎杯”是迄今为止全球规模最大、覆盖面最广的国家级网络安全赛事,被称为网络安全“奥运会”,目前已成功举办3届。

部分选手甚至可以直接评获奖证书入职大厂、特殊人才引进。

号主参加了两届“网鼎杯”,今天分享整理一下部分赛题

文丨hacking

雷军是如何又造手机和又造车的?

1

赛事平台高-举办方

2024届“网鼎杯”已经开始报名,让我们看看近两届主办方就知道赛事的含金量有多大了,第3届“网鼎杯”

第3届“网鼎杯”

公安部指导,国家网络与信息安全信息通报中心、浙江省公安厅、杭州市人民政府共同支持,杭州市公安局和余杭区人民政府联合主办。

第4届“网鼎杯”

安部、教育部共同指导,贵阳市人民政府、贵州省公安厅联合主 办,国家网络与信息安全信息通报中心、教育部教育管理信息中心、网络空间 安全专业教学指导委员会作为支持单位,公安部第一研究所作为承办单位。

2

2022年 第3届 白虎组

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

"网鼎杯"难度果然不一般,整理了部分解题过程,供大家学习。(后期会将做题文件上传)

解题过程

签到题

八道网络安全选择题,百度都能搜索,记不全了

杂项1

破压缩包

得到密码

得到excel里,打开,passwd解密

7EqufFnrSGk=

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

nmy0612打开flag.7z

里面韩文,用工具解密

Cyberchef

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

crypto582

题目

from Crypto.Util.number import getPrimeimport hashlibe = 2022m = getPrime(512)m1 = getPrime(512)m2 = getPrime(512)flag = m + m1 + m2flag = hashlib.md5(str(flag).encode('utf-8')).hexdigest()c1 = pow(m+m1,e,m*m1)c2 = pow(m+m2,e,m*m2)c3 = pow(m1+m2,e,m1*m2)x = pow(m1+2022,m,m*m1)y = pow(m2+2022,m,m*m2)z = pow(m+2022,m1,m*m1)print('c1 =',c1)print('c2 =',c2)print('c3 =',c3)print('x =',x)print('y =',y)print('z =',z)'''c1 =  85139434329272123519094184286276070319638471046264384499440682030525456122476228324462769126167628121006213531153927884870307999106015430909361792093581895091445829379547633304737916675926004298753674268141399550405934376072486086468186907326396270307581239055199288888816051281495009808259009684332333344687c2 =  104554808380721645840032269336579549039995977113982697194651690041676187039363703190743891658905715473980017457465221488358016284891528960913854895940235089108270134689312161783470000803482494370322574472422461483052403826282470850666418693908817591349159407595131136843764544166774390400827241213500917391144c3 =  94771625845449128812081345291218973301979152577131568497740476123729158619324753128517222692750900524689049078606978317742545997482763600884362992468406577524708622046033409713416026145377740182233674890063333534646927601262333672233695863286637817471270314093720827409474178917969326556939942622112511819330x =  78237329408351955465927092805995076909826011029371783256454322166600398149132623484679723362562600068961760410039241554232588011577854168402399895992331761353772415982560522912511879304977362225597552446397868843275129027248765252784503841114291392822052506837132093960290237335686354012448414804030938873765y =  100442166633632319633494450595418167608036668647704883492068692098914206322465717138894302011092841820156560129280901426898815274744523998613724326647935591857728931946261379997352809249780159136988674034759483947949779535134522005905257436546335376141008113285692888482442131971935583298243412131571769294029z =  104712661985900115750011628727270934552698948001634201257337487373976943443738367683435788889160488319624447315127992641805597631347763038111352925925686965948545739394656951753648392926627442105629724634607023721715249914976189181389720790879720452348480924301370569461741945968322303130995996793764440204452'''

解密脚本

费马定理import hashlib,mathe=2022c1 =  85139434329272123519094184286276070319638471046264384499440682030525456122476228324462769126167628121006213531153927884870307999106015430909361792093581895091445829379547633304737916675926004298753674268141399550405934376072486086468186907326396270307581239055199288888816051281495009808259009684332333344687c2 =  104554808380721645840032269336579549039995977113982697194651690041676187039363703190743891658905715473980017457465221488358016284891528960913854895940235089108270134689312161783470000803482494370322574472422461483052403826282470850666418693908817591349159407595131136843764544166774390400827241213500917391144c3 =  94771625845449128812081345291218973301979152577131568497740476123729158619324753128517222692750900524689049078606978317742545997482763600884362992468406577524708622046033409713416026145377740182233674890063333534646927601262333672233695863286637817471270314093720827409474178917969326556939942622112511819330x =  78237329408351955465927092805995076909826011029371783256454322166600398149132623484679723362562600068961760410039241554232588011577854168402399895992331761353772415982560522912511879304977362225597552446397868843275129027248765252784503841114291392822052506837132093960290237335686354012448414804030938873765y =  100442166633632319633494450595418167608036668647704883492068692098914206322465717138894302011092841820156560129280901426898815274744523998613724326647935591857728931946261379997352809249780159136988674034759483947949779535134522005905257436546335376141008113285692888482442131971935583298243412131571769294029z =  104712661985900115750011628727270934552698948001634201257337487373976943443738367683435788889160488319624447315127992641805597631347763038111352925925686965948545739394656951753648392926627442105629724634607023721715249914976189181389720790879720452348480924301370569461741945968322303130995996793764440204452a=(x-2022)**e-c1b=(y-2022)**e-c2c=math.gcd(a,b)d=(x-e)%ce=(y-e)%c+cflag=c+d+eflag=hashlib.md5(str(flag).encode('utf-8')).hexdigest()print("flag{"+(flag)+"}")

Re

#include <stdint.h>#include <stdio.h>#include "defs.h"using namespace std;uint32_t bit_move(uint32_t val, int n) {    int size = 8;    return (val << (size - n) | (val >> n));}unsigned char enc[] = {    0xF2, 0x7F, 0x09, 0x05, 0xD7, 0x77, 0x16, 0x91, 0x25, 0x01, 0x2E,    0xC5, 0x97, 0x26, 0x63, 0x82, 0x01, 0x40, 0x15, 0x2D, 0xFC, 0x53,    0xDB, 0xD3, 0xC4, 0xDB, 0x0A, 0x1F, 0x82, 0x1E, 0x99, 0x4E, 0xFE,    0x0C, 0x80, 0xB8, 0xA5, 0x61, 0x0E, 0x99, 0xDF, 0x39 };//0x6526B0D9void sub_140001950(unsigned char* enc) {    int i;    unsigned int v1;    unsigned int v2;    unsigned int sum;    int v4;    for (i = 0; i != 5; ++i) {        v1 = *(uint32_t*)&enc[8 * i];        v2 = *(uint32_t*)&enc[8 * i + 4];        sum = 0x6526B0D9;        v4 = 32;        do {            sum += 0x61C88647;            v2 -= ((v1 << 4) + 0x43) ^ (sum + v1) ^ ((v1 >> 5) + 0x56);            v1 -= (v2 + sum) ^ ((v2 << 4) | 0xC) ^ ((v2 >> 5) + 0x2D);            --v4;        } while (v4);        *(uint32_t*)&enc[8 * i] = v1;        *(uint32_t*)&enc[8 * i + 4] = v2;    }}int main() {    for (int i = 0; i < 42; ++i) {        enc[i] = bit_move(enc[i], 5);    }    for (int i = 0; i < 42; ++i) {        enc[i] ^= 0x66;        enc[i] -= 0x32;    }    sub_140001950(enc);    printf("%s", enc);    return 0;}

Web1

1.dirmap目录扫描,御剑扫不到,git源代码泄漏,githack拉去源代码

2.扫描结果找到上传页面public/index.php,注意public/index上传不成功,审计源代码查看上传逻辑.htaccess绕过

3.同时上传一句话木马和.htaccess,保证两个文件在一个目录下,

4.getshell,查看flag

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

3

2022年 第三届 青龙组

省流:

之前参加网鼎杯的写的解题报告,整理了一下发上来,排名能靠前全靠逆向第二题拿大分。

Crypto

题目1

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

解题过程 读题是一个hash函数碰撞的问题,总共13位,已知前五位,搜一搜发现苹果AirDrop采用的hash函数是sha256,写个python脚本爆破一下

1.需要找到一个8位数字的代码,将其附加到密钥"86170"后进行SHA-256哈希,结果与给定的哈希匹配。

2.暴力破解方法:遍历所有可能的8位数字组合(从"00000000"到"99999999"),将每个组合附加到密钥后进行哈希,并将结果与给定的哈希进行比较。

3.匹配即停止:当找到匹配项时,我们打印出该代码及其对应的哈希值。

import hashlib
ss = '0123456789'

txt2 = "86170"

sha256enc="c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc"
key=txt2

for a in ss:
  for b in ss:
    for c in ss:
      for d in ss:
        for e in ss:
           for f in ss:
             for g in ss:
               for h in ss:


                  code = a+b+c+d+e+f+g+h
                  encinfo = hashlib.sha256(bytes( (key+code).encode() ) ).hexdigest()
                  if encinfo == sha256enc:
                   print(code)
                   print(encinfo)
                   break

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

得到未知密文部分为“91733716” 拼起来即为flag:{8617091733716}

Reverse

题目1

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

解题过程 下载文件是一个Windows可执行程序Re2.exe。运行程序时,提示输入flag。

使用IDA Pro打开程序文件,发现只有几个函数,这表明程序可能进行了加壳处理。看到红框部分指令(如图片中所示),这通常表示程序在解压完成后进入真正的指令执行部分。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

将程序拖入x64dbg,在怀疑的解压完成处设置断点,方便后续快速进入真实指令执行部分。尝试使用x64dbg逐步分析程序,但感觉不太顺利。尝试查了下壳,使用DetectEasy发现是upx壳。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

尝试使用命令upx -d Re2.exe进行脱壳,但未成功,可能程序进行了防护处理。使用010 Editor打开程序,发现一些被替换的内容(如UPX0和UPX1),手动将它们修改回原始值。分别修改成UPX0和UPX1

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

再次使用UPX脱壳命令,成功脱壳。结合IDA的静态分析和x64dbg的动态调试,可以更快地进行后续分析。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

根据之前分析,直接在ida中找到对输入求长度并判断的部分(从字符串中也可以找到)

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

在IDA中找到对输入求长度并判断的部分代码(如图片所示)。第一个校验点:输入长度应为20。第二个校验点:输入的每个字符进行异或运算(如0x66)。

进入sub_1400111E5函数,查看详细的校验逻辑。代码简单对输入进行了运算,并将结果与全局数组内容进行比较。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

就简单对输入运算了下,最后判断运算结果和如下图的全局数组内容是否一致,这只需要反着计算即可拿到flag

已知全局数组的内容:

a = [0x4B, 0x48, 0x79, 0x13, 0x45, 0x30, 0x5C, 0x49, 0x5A, 0x79, 0x13, 0x70, 0x6D, 0x78, 0x13, 0x6F, 0x48, 0x5D, 0x64, 0x64, 0x18]

逆向运算得到flag:

for b in a:
    print(chr(((b ^ 0x50) - 10) ^ 0x66), end="")

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
a = [0x4B, 0x48, 0x79, 0x13, 0x45, 0x30, 0x5C, 0x49, 0x5A, 0x79, 0x13, 0x70, 0x6D, 0x78, 0x13, 0x6F, 0x48, 0x5D, 0x64, 0x64, 0x18]
for b in a:
    print(chr(((b^0x50) - 10)^0x66), end="")

运行则得flag

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

题目2

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

解题过程

拿到apk发现安装不成,尝试重新打包成apk并签名,成功安装 使用mt管理器反编译一下dex,发现函数指令被抽走了,再一看luoyesiqiu.shell里的类,更加确定是函数抽取型加固,得想办法把恢复原始dex,一开始使用blackdex64来恢复,没成功

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

于是考虑使用frida脚本,github有dump dex的,直接用一下命令

frida-dexdump -U -f com.example.testchouqu

成功提出dex文件,如下图

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

依次用mt管理器打开,找到有Checkfxxk的dex,这里是classes02.dex,执行dex2jar转换为jar包,方便分析,使用jd-jui打开分析。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

思路很明确,输入两个字符串,一个必须是“helloctf”,另一个需要逆向出来。可以看到代码使用了控制流混淆,没猜错的话用的是BlackObfuscator(Android Dex控制流平坦化混淆)。尝试寻找反混淆的工具,未果,只好硬分析,期间又尝试了执行该class中的函数,但会死循环。分析差不多,主要是下面的代码

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

猜测应该是已有的某种加密,否则不会这么复杂,查询资料发现基本和tea加密一样,i6,i8相当于两个明文,i2即sum,1640531527为delta,循环32轮。原始tea加密过程中delta是成倍增加的,但在这里是成倍减少,因此解密算法也和常规的不一样,这里也花了大量时间去思考 解密时delta初始值应该是加密是最后的那个delta值,并且要成倍递增才行。下图是最终比较阶段,可以看到new byte[]后8个字节是可打印的字符,再考虑到arrayofInt2[0]=i6 arrayofInt2[1]=i8,即只对前8字节进行tea加密,因此要输入的后8个字符串就是下面后8个字节,前八个字节按照上面说的tea解密算法解密即可。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

写脚本解密即可拿到flag

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
public class HelloWorld {
    // 将byte转换为无符号int
    public static int transform(byte b) {
        return b < 0 ? b + 256 : b;
    }

    // 将int转换为byte数组
    public static byte[] toHH(int n) {
        byte[] b = new byte[4];
        b[3] = (byte) (n & 0xff);
        b[2] = (byte) (n >> 8 & 0xff);
        b[1] = (byte) (n >> 16 & 0xff);
        b[0] = (byte) (n >> 24 & 0xff);
        return b;
    }

    public static void main(String[] args) {
        // 预设的加密数组和byte数组
        int[] arrayint = {2023708229, -158607964, -2120859654, 1167043672};
        byte[] p = {-63, -69, -86, 43, 126, 114, 32, -75};

        // 将byte数组转换为int
        int i6 = transform(p[3]) | transform(p[2]) << 8 | transform(p[1]) << 16 | p[0] << 24;
        int i8 = transform(p[7]) | transform(p[6]) << 8 | transform(p[5]) << 16 | p[4] << 24;

        // TEA解密算法
        int k = arrayint[0];
        int m = arrayint[1];
        int n = arrayint[2];
        int i1 = arrayint[3];
        int i2 = 0 - 32 * 1640531527;  // 初始delta值为加密时的最后一个delta值

        for (int a = 0; a < 32; a++) {
            i8 -= ((i6 << 4) + n) ^ (i6 + i2) ^ ((i6 >> 5) + i1);
            i6 -= ((i8 << 4) + k) ^ (i8 + i2) ^ ((i8 >> 5) + m);
            i2 += 1640531527;  // delta值递增
        }

        // 转换解密结果并打印
        byte[] res = toHH(i6);
        byte[] res2 = toHH(i8);
        byte[] other = {102, 49, 65, 103, 121, 107, 111, 99};  // 固定的后8位

        for (byte b : res) {
            System.out.print((char) b);
        }
        for (byte b : res2) {
            System.out.print((char) b);
        }
        for (byte b : other) {
            System.out.print((char) b);
        }
    }
}

题目3

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

题目是go语言写的东西,首先安装配置go运行环境,花了点时间,将内容复制到Challenge.go

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

解题过程 执行go run challenge.go

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

让输入两个函数 函数1:该函数有6个参数,第三个参数名字为gLIhR 打开文件并搜索gLIhR:使用代码编辑器打开challenge.go文件,搜索字符串gLIhR。我们需要找到一个有6个参数的函数,并且第三个参数名为gLIhR。

在Go语言中,函数定义的形式通常如下:

func functionName(param1 type1, param2 type2, gLIhR type3, param4 type4, param5 type5, param6 type6) returnType {
    // function body
}
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

函数2:该函数被3个函数调用,且该函数调用了函数cHZv5op8rOmlAkb6

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

该题纯粹体力活,函数1查找gLIhR string,寻找满足条件的即可

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

函数2查找return cHZv5op8rOmlAkb6(,然后有查找该项的调用者的名字,统计次数,看是否被其他函数调用了3次,

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

最终可得到下面结果

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

4

2022年 第三届 部分其他题

Crypto

题目

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

解题过程

读题是一个hash函数碰撞的问题,总共13位,已知前五位,搜一搜发现苹果AirDrop采用的hash函数是sha256,写个python脚本爆破一下
import hashlibss = '0123456789'txt2 = "86170"sha256enc="c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc"key=txt2for a in ss: for b in ss: for c in ss: for d in ss: for e in ss: for f in ss: for g in ss: for h in ss: code = a+b+c+d+e+f+g+h encinfo = hashlib.sha256(bytes( (key+code).encode() ) ).hexdigest() if encinfo == sha256enc: print(code) print(encinfo) break
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
得到未知密文部分为“91733716”
拼起来即为flag:{8617091733716}

Reverse 1

题目

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

解题过程

下载下来是个win可执行程序Re2.exe,运行一下让输入flag,拖进ida发现就几个函数,肯定是加壳了,那ida就不太好使了,但能看出在红框部分表示真正的指令unpack完成了
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
然后拖进x64dbg,在该处下断点,方便后续快速进入真正的指令,这时还没想着查壳,想着肯定是自定义壳,就在x64dbg中一点一点分析,分析了几个函数,感觉不太顺利,尝试查了下壳,使用DetectEasy发现是upx壳。
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
使用命令upx -d脱壳,发现不太行,估计做了手脚,010Editor打开发现框中内容被替换,分别修改成UPX0和UPX1
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
再次脱壳,成功!这样结合IDA静态分析和x64dbg动态分析就可以很快解题
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
根据之前分析,直接在ida中找到对输入求长度并判断的部分(从字符串中也可以找到)
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
如上图分析第一处校验(进入check后的内容),第一个框即输入长度为20,第二个框将输入全部异或0x66。
第二处即sub_1400111E5,进入后如下
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
就简单对输入运算了下,最后判断运算结果和如下图的全局数组内容是否一致,这只需要反着计算即可拿到flag
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
a = [0x4B, 0x48, 0x79, 0x13, 0x45, 0x30, 0x5C, 0x49, 0x5A, 0x79, 0x13, 0x70, 0x6D, 0x78, 0x13, 0x6F, 0x48, 0x5D, 0x64, 0x64, 0x18]for b in a: print(chr(((b^0x50) - 10)^0x66), end="")
运行则得flag
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

Reverse 2

题目

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

解题过程

拿到apk发现安装不成,尝试重新打包成apk并签名,成功安装
使用mt管理器反编译一下dex,发现函数指令被抽走了,再一看luoyesiqiu.shell里的类,更加确定是函数抽取型加固,得想办法把恢复原始dex,一开始使用blackdex64来恢复,没成功

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

于是考虑使用frida脚本,githubdump dex的,直接用一下命令
frida-dexdump -U -f com.example.testchouqu
成功提出dex文件,如下图
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
依次mt管理器打开,找到有Checkfxxk的dex,这里是classes02.dex,执行dex2jar转换为jar包,方便分析,使用jd-jui打开分析。
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
思路很明确,输入两个字符串,一个必须是“helloctf”,另一个需要逆向出来。
可以看到代码使用了控制流混淆,没猜错的话用的是BlackObfuscatorAndroid Dex控制流平坦化混淆)。尝试寻找反混淆的工具,未果,只好硬分析,期间又尝试了执行该class中的函数,但会死循环。
分析差不多,主要是下面的代码
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
猜测应该是已有的某种加密,否则不会这么复杂,查询资料发现基本和tea加密一样,i6i8相当于两个明文,i2sum1640531527delta,循环32轮。原始tea加密过程中delta是成倍增加的,但在这里是成倍减少,因此解密算法也和常规的不一样,这里也花了大量时间去思考。
解密时delta初始值应该是加密是最后的那个delta值,并且要成倍递增才行。
下图是最终比较阶段,可以看到new byte[]后8个字节是可打印的字符,再考虑到arrayofInt2[0]=i6 arrayofInt2[1]=i8,即只对前8字节进行tea加密,因此要输入的后8个字符串就是下面后8个字节,前八个字节按照上面说的tea解密算法解密即可。
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
写脚本解密即可拿到flag
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
public class HelloWorld {    //主函数,主方法,程序的入口 main    public static int transform(byte b){        int res;        if(b<0){            res = b + 256;        }else{            res = b;        }        return res;    }    public static byte[] toHH(int n) {        byte[] b = new byte[4];        b[3] = (byte) (n & 0xff);        b[2] = (byte) (n >> 8 & 0xff);        b[1] = (byte) (n >> 16 & 0xff);        b[0] = (byte) (n >> 24 & 0xff);        return b;    }    public static void main(String[] args) {        //输出语句        int[] arrayint = {2023708229, -158607964, -2120859654, 1167043672};        byte[] p = {-63, -69, -86, 43, 126, 114, 32, -75};        int i = transform(p[3]) | transform(p[2]) << 8 | transform(p[1]) << 16 | p[0] << 24;        int j = transform(p[3+4]) | transform(p[2+4]) << 8 | transform(p[1+4]) << 16 | p[0+4] << 24;        int k = arrayint[0];        int m = arrayint[1];        int n = arrayint[2];        int i1 = arrayint[3];        int i6 = i;        int i8 = j;        int i2 = 0 - 32*1640531527;        for(int a=0;a<32;a++){            i8 -= (i6<<4) + n^i6 + i2^(i6>>5) + i1;            i6 -= (i8<<4) + k^i8 + i2^(i8>>5) + m;            i2 += 1640531527;                    }        byte[] res = toHH(i6);        byte[] res2 = toHH(i8);        byte [] other = {102, 49, 65, 103, 121, 107, 111, 99};        for (byte b : res) {            System.out.print((char)b+"");        }        for (byte b : res2) {            System.out.print((char)b+"");        }        for (byte b : other) {            System.out.print((char)b+"");        }    }}

Reverse3

题目

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

解题过程

题目是go语言写的东西,首先安装配置go运行环境,花了点时间,将内容复制到Challenge.go
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
执行go run challenge.go
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
让输入两个函数
函数1:该函数有6个参数,第三个参数名字为gLIhR
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
函数2:该函数被3个函数调用,且该函数调用了函数cHZv5op8rOmlAkb6
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
该题纯粹体力活,函数1查找gLIhR string,寻找满足条件的即可
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
函数2查找return cHZv5op8rOmlAkb6(,然后有查找该项的调用者的名字,统计次数,看是否被其他函数调用了3次,
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
最终可得到下面结果
网鼎杯的难度到底有多大?看看2022年第三届的原题WP。
参考:
https://mp.weixin.qq.com/s/7GJ6XDrIuHuUXFCHOJS0CA
https://mp.weixin.qq.com/s/LmeX3DhYbe0BPsaSB5RaIA
https://mp.weixin.qq.com/s/V8GCI4r2ydCOBMQqKoev6g

网鼎杯的难度到底有多大?看看2022年第三届的原题WP。

原文始发于微信公众号(Hacking黑白红):“网鼎杯”的难度到底有多大?看看2022年第三届的原题WP。

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月13日00:56:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   网鼎杯的难度到底有多大?看看2022年第三届的原题WP。https://cn-sec.com/archives/3259055.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息