2023春秋杯春季赛WP-REVERSE(AK)

REVERSE

    • sum
    • Poisoned_tea_CHELL
    • BWBA
    • Pytrans
    • Emoji Connect
    • OldSymbolicCode

在这里插入图片描述

浅浅写一下RE的WP~

sum

在这里插入图片描述

根据代码,可以看出程序只能输入数字,判断matrix数组对应下标的值是否为0,如果为0,则可以输入一个字符,根据代码逻辑,可以把matrix数组看成一个 9 * 9 的二维数组,将matrix数组提取出来看看
在这里插入图片描述
转换成 9 * 9 矩阵

5 3 0 0 7 0 0 0 0 
6 0 0 1 9 5 0 0 0 
0 9 8 0 0 0 0 6 0 
8 0 0 0 6 0 0 0 3 
4 0 0 8 0 3 0 0 1 
7 0 0 0 2 0 0 0 6 
0 6 0 0 0 0 2 8 0 
0 0 0 4 1 9 0 0 5 
0 0 0 0 8 0 0 7 9

然后verify()函数对数组进行检查,可以发现这是个数独游戏,可以用在线网站一把梭

https://shudu.gwalker.cn/

在这里插入图片描述
将填上的数字依次输入即得flag
在这里插入图片描述

Poisoned_tea_CHELL

从名字可以猜到是个tea算法
在程序中也找到了相应的tea算法,
在这里插入图片描述
在这里插入图片描述
但是数据不知道,所以动调看看
先在ubuntu里运行linux_server64,再运行程序,记得要用root权限,不然可能会有问题
在这里插入图片描述
这里用的是 Debugger->Attach->Remote Linux debugger方法动调
在这里插入图片描述
选择对应的进程即可调试
在这里插入图片描述
在程序里输入2后,狂按F8半分钟左右,来到一处call函数,程序会让输入flag
查看函数,这下数据也有了
在这里插入图片描述
在这里插入图片描述
脚本一把梭,这里有个坑,加密轮数为36轮

#include<stdio.h>
#include<stdlib.h>void encode(unsigned int *a1, unsigned int *a2)
{int x;unsigned __int64 i; // [rsp+8h] [rbp-18h]unsigned int v4; // [rsp+14h] [rbp-Ch]unsigned int v5; // [rsp+18h] [rbp-8h]unsigned int v6;int n=0;for(x=0;x<=5;x++){v6 = *(a1+x*2);v5 = *(a1+x*2+1);v4 = 0;i=0;do{i++;v6 += (((v5 >> 5) ^ 16 * v5) + v5) ^ (*((v4 & 3) + a2) + v4);v4 -= 0x41104111;v5 += (((v6 >> 5) ^ 16 * v6) + v6) ^ (*(((v4 >> 11) & 3) + a2) + v4);}while(i<36);*(a1+x*2) = v6;*(a1+x*2+1) = v5;
//	  printf("\n0x%X\n",v4);}
} void decode(unsigned int *a1, unsigned int *a2)
{int x;unsigned __int64 i; // [rsp+8h] [rbp-18h]unsigned int v4; // [rsp+14h] [rbp-Ch]unsigned int v5; // [rsp+18h] [rbp-8h]unsigned int v6;for(x=5;x>=0;x--){v6 = *(a1+x*2);v5 = *(a1+x*2+1);v4 = 0xD9B6D99C;i=0;do{i++;v5 -= (((v6 >> 5) ^ 16 * v6) + v6) ^ (*(((v4 >> 11) & 3) + a2) + v4);v4 += 0x41104111;v6 -= (((v5 >> 5) ^ 16 * v5) + v5) ^ (*((v4 & 3) + a2) + v4);}while(i<36);*(a1+x*2) = v6;*(a1+x*2+1) = v5;
//	  printf("\n0x%X\n",v4);}
} int main()
{unsigned int v[12]={0xECFDA301,0x61BECDF5,0xB89E6C7D,0xCE36DC68,0x4B6E539E,0x642EB504,0x54F9D33C,0x6D06E365,0xEA873D53,0xA4618507,0xD7B18E30,0xC45B4042};unsigned int key[4]={5,2,9,7};int i;decode(v,key);for(i=0;i<12;i++){printf("%c",v[i]&0xff);printf("%c",(v[i]&0xff00)%0xff);printf("%c",(v[i]&0xff0000)%0xffff);printf("%c",(v[i]&0xff000000)%0xffffff);//Thisisflag{cdfec405-3f4b-457e-92fe-f6446098ee2e}}printf("\n");for(i=0;i<12;i++){printf("0x%.8X ",v[i]);}printf("\n");encode(v,key);for(i=0;i<12;i++){printf("0x%.8X ",v[i]);}system("pause");return 0;
}

BWBA

main->encrypt()函数
主要加密代码
在这里插入图片描述
可以发现这是个DCT离散余弦变换
用python的cv2库可以直接解

import numpy as np
import cv2x = np.array([370.75,234.362,-58.0834,59.8212,88.8221,-30.2406,21.8316,49.9781,-33.5259,2.69675,43.5386,-30.2925,-28.0754,27.593,-2.53962,-27.1883,-5.60777,-0.263937,6.80326,8.03022,-6.34681,-0.89506,-6.80685,-13.6088,27.0958,29.8439,-21.7688,-20.6925,-13.2155,-37.0994,2.23679,37.6699,-3.5,9.85188,57.2806,13.5715,-20.7184,8.6816,3.59369,-4.5302,4.22203,-28.8166,-23.695,31.2268,6.58823,-39.9966,-20.7877,-19.7624,-22.031,16.3285,2.07557,-26.2521,16.1914,18.3976,-26.9295,3.03769,41.0412,20.2598,14.991,6.99392,-22.3752,-7.24466,8.96299,-10.4874], dtype=np.float64)
x = cv2.idct(x)
x = x.ravel()
flag=''for i in range(len(x)):flag+=chr(round(x[i]))
print(flag)#flag{9ab488a7-5b11-1b15-04f2-c230704ecf72}

Pytrans

根据题目可知这是个python打包的程序
用 python3.8,pyinstxtractor.py 解包
在这里插入图片描述
用uncompyle6反编译run.pyc
关键代码
在这里插入图片描述
主要逻辑,首先输入十个数,然后调用mylib.so文件里的check函数
在这里插入图片描述
用z3解一下

from z3 import *a1 = [BitVec('u%d' % i, 16) for i in range(0, 10)]
solver = Solver()solver.add(-27 * a1[7]+ -11 * a1[6]+ 16 * a1[5]+ a1[0]+ 2 * a1[1]- a1[2]+ 8 * a1[3]- 14 * a1[4]+ 26 * a1[8]+ 17 * a1[9] == 0x387E)
solver.add(-30 * a1[8] + 13 * a1[5] + a1[3] + a1[1] + 2 * a1[0] - 15 * a1[4] - 24 * a1[6] + 16 * a1[7] + 36 * a1[9] == -2591)
solver.add(16 * a1[6]+ -21 * a1[5]+ 7 * a1[3]+ 3 * a1[1]- a1[0]- a1[2]+ 12 * a1[4]- 23 * a1[7]+ 25 * a1[8]- 18 * a1[9] == 2517)
solver.add(-6 * a1[6] + 2 * a1[2] - a1[1] + 2 * a1[5] + 9 * a1[7] + 2 * a1[8] - 5 * a1[9] == 203)
solver.add(-5 * a1[8] + 6 * a1[7] + 3 * a1[1] - a1[3] - a1[5] + a1[6] + 5 * a1[9] == 3547)
solver.add(-9 * a1[8] + a1[4] + a1[2] + a1[7] - 5 * a1[9] == -7609)
solver.add(2 * a1[5] + -a1[3] - a1[4] + a1[8] + 6 * a1[9] == 4884)
solver.add(a1[6] - a1[7] + 2 * a1[8] == 1618)
solver.add(a1[4] - a1[6] + 2 * a1[9] == 1096)
solver.add(a1[8] + a1[4] + a1[3] + a1[2] + a1[1] + a1[0] - a1[5] - a1[6] - a1[7] - a1[9] == 711)
solver.add(2 * (2 * a1[4] + a1[3]) + 5 * a1[5] == 7151)if solver.check()==sat:result = solver.model()print(result)

得到十个数

511 112 821 949 517 637 897 575 648 738

输入这十个数后,发现后面还有东西
在这里插入图片描述
于是回去看看代码

decoded_data = base64.b64decode(scrambled_code_string)
uncompressed_data = zlib.decompress(decoded_data)
exec(__import__('marshal').loads(uncompressed_data))

这段代码可以执行一个经过混淆的 Python 代码字符串,它包含了编码后的字符串,使用 base64 进行解码,然后使用 zlib 进行解压缩。解压缩的结果是一个经过 Python 自带的 marshal 库序列化后的对象。最后,使用 exec 进行执行。

加两行代码将uncompressed_data的数据输出看看

decoded_data = base64.b64decode(scrambled_code_string)
uncompressed_data = zlib.decompress(decoded_data)
for i in uncompressed_data:print(hex(i)[2:].rjust(2,'0'),end='')
exec(__import__('marshal').loads(uncompressed_data))

将十六进制数复制出来,放入010Editor查看下
在这里插入图片描述
可以发现是个缺少文件头的pyc文件
在这里插入图片描述
将run.pyc的文件头复制过来
在这里插入图片描述
uncompyle6 反编译看看,代码

footprint = '3qzqns4hj6\neeaxc!4a-%\nd735_@4l6g\nf1gd1v7hdm\n1+$-953}81\na^21vbnm3!\n-#*f-e1d8_\n2ty9uipok-\n6r1802f7d1\n9wez1c-f{0'
xx0000 = []
footprintlist = footprint.split('\n')
for i in range(len(footprintlist)):xx0000.append(list(footprintlist[i]))
else:def xxxx000x0(num):xx000000 = format(num, '010b')return xx000000oxooxxxxxoooo = []xx0000000 = input("Please enter the previous 10 digits again and ending with '\\n': ").split(' ')if len(xx0000000) == 10:try:for i in xx0000000:oxooxxxxxoooo.append(int(i))except:print('err input!')exit(-1)else:print('err input!')exit(-1)for i in range(len(oxooxxxxxoooo)):oxooxxxxxoooo[i] = list(xxxx000x0(oxooxxxxxoooo[i]))else:xx0000x000 = oxooxxxxxoooox, o = (0, 0)xx00x00x0xxx00 = [(x, o)]xx00x00x0xxx00input = list(input('input maze path:'))count = 0while (x, o) != (9, 9):if count < len(xx00x00x0xxx00input):xx0000x0xxx00 = xx00x00x0xxx00input[count]if xx0000x0xxx00 == 'a':if o > 0 and xx0000x000[x][o - 1] == '0':o -= 1count += 1xx00x00x0xxx00.append((x, o))else:print('wrong!')exit(-1)elif xx0000x0xxx00 == 'd':if o < 9 and xx0000x000[x][o + 1] == '0':count += 1o += 1xx00x00x0xxx00.append((x, o))else:print('wrong!')exit(-1)else:if xx0000x0xxx00 == 'w':if x > 0 and xx0000x000[x - 1][o] == '0':count += 1x -= 1xx00x00x0xxx00.append((x, o))else:print('wrong!')exit(-1)else:if xx0000x0xxx00 == 's':if x < 9 and xx0000x000[x + 1][o] == '0':count += 1x += 1xx00x00x0xxx00.append((x, o))else:print('wrong!')exit(-1)else:print('wrong!')exit(-1)else:print('wrong!')exit(-1)print('right! you maybe got it,flag is flag{the footprint of the maze path}')

可以发现是个迷宫题,根据输入的数字生成对应的迷宫,添加两行代码打印迷宫
在这里插入图片描述
迷宫为:

['0', '1', '1', '1', '1', '1', '1', '1', '1', '1']
['0', '0', '0', '1', '1', '1', '0', '0', '0', '0']
['1', '1', '0', '0', '1', '1', '0', '1', '0', '1']
['1', '1', '1', '0', '1', '1', '0', '1', '0', '1']
['1', '0', '0', '0', '0', '0', '0', '1', '0', '1']
['1', '0', '0', '1', '1', '1', '1', '1', '0', '1']
['1', '1', '1', '0', '0', '0', '0', '0', '0', '1']
['1', '0', '0', '0', '1', '1', '1', '1', '1', '1']
['1', '0', '1', '0', '0', '0', '1', '0', '0', '0']
['1', '0', '1', '1', '1', '0', '0', '0', '1', '0']

从[0,0]走到[9,9]则通过,路径为

sddsdssdddwwwddsssssaaaaassddsddwdds

在这里插入图片描述
直接修改源代码,按照路径,输出footprint经过的字符

footprint = '3qzqns4hj6\neeaxc!4a-%\nd735_@4l6g\nf1gd1v7hdm\n1+$-953}81\na^21vbnm3!\n-#*f-e1d8_\n2ty9uipok-\n6r1802f7d1\n9wez1c-f{0'
xx0000 = []
footprintlist = footprint.split('\n')
for i in range(len(footprintlist)):xx0000.append(list(footprintlist[i]))
else:def xxxx000x0(num):xx000000 = format(num, '010b')return xx000000for i in xx0000:print(i)print('----------------------------------------------------')oxooxxxxxoooo = []# xx0000000 = input("Please enter the previous 10 digits again and ending with '\\n': ").split(' ')#511 112 821 949 517 637 897 575 648 738xx0000000 = '511 112 821 949 517 637 897 575 648 738'.split(' ')if len(xx0000000) == 10:try:for i in xx0000000:oxooxxxxxoooo.append(int(i))except:print('err input!')exit(-1)else:print('err input!')exit(-1)for i in range(len(oxooxxxxxoooo)):oxooxxxxxoooo[i] = list(xxxx000x0(oxooxxxxxoooo[i]))else:xx0000x000 = oxooxxxxxoooofor i in xx0000x000:print(i)x, o = (0, 0)xx00x00x0xxx00 = [(x, o)]# xx00x00x0xxx00input = list(input('input maze path:'))xx00x00x0xxx00input = list('sddsdssdddwwwddsssssaaaaassddsddwdds')count = 0while (x, o) != (9, 9):if count < len(xx00x00x0xxx00input):xx0000x0xxx00 = xx00x00x0xxx00input[count]if xx0000x0xxx00 == 'a':if o > 0 and xx0000x000[x][o - 1] == '0':o -= 1count += 1xx00x00x0xxx00.append((x, o))else:print('wrong!')exit(-1)elif xx0000x0xxx00 == 'd':if o < 9 and xx0000x000[x][o + 1] == '0':count += 1o += 1xx00x00x0xxx00.append((x, o))else:print('wrong!')exit(-1)else:if xx0000x0xxx00 == 'w':if x > 0 and xx0000x000[x - 1][o] == '0':count += 1x -= 1xx00x00x0xxx00.append((x, o))else:print('wrong!')exit(-1)else:if xx0000x0xxx00 == 's':if x < 9 and xx0000x000[x + 1][o] == '0':count += 1x += 1xx00x00x0xxx00.append((x, o))else:print('wrong!')exit(-1)else:print('wrong!')exit(-1)else:print('wrong!')exit(-1)print('right! you maybe got it,flag is flag{the footprint of the maze path}')#sddsdssdddwwwddsssssaaaaassddsddwddsflag=''for i in range(len(xx00x00x0xxx00)):flag+=xx0000[xx00x00x0xxx00[i][0]][xx00x00x0xxx00[i][1]]print('flag{'+flag+'}')

Emoji Connect

用dnSpy反编译dll文件
关键代码
在这里插入图片描述
代码有点长(看不懂,直接问gpt~
一段一段问,果然效率比自己看高得多

chatgpt答复:

这段代码是用C#语言编写的,用于在Microsoft Office Excel中创建新的工作表,并将一个48 x 48的数组的值写入到其中。以下是代码中主要的步骤:使用app对象打开Excel并显示该应用程序。
获取当前活动的工作簿并将其赋值给wb对象。
通过调用Sheets属性获取工作簿的第一个工作表,并将其赋值给sheet1对象。
使用双重循环,从数组中取出每个元素并将其写入到工作表中,使用Cells属性和指定的行列来访问单元格,使用SetMember方法将单元格的值设置为数组元素的值。
对范围“A1”到“Y50”应用水平居中对齐。
为工作表的SelectionChange事件添加一个处理程序,该处理程序被称为Select_Unit。
请注意,该代码中还有一些使用Lambda表达式的技巧,以及在静态类中使用的匿名类型。此外,代码还使用了Interop技术,这是一种允许.NET应用程序与COM组件进行交互的方法。
这段代码是在前面的代码中注册的SelectionChange事件的处理程序。当用户选择一个或多个单元格时,将会调用该方法。首先,代码创建一个列表对象,并使用foreach循环将Target参数中的每个单元格添加到列表中。接下来,代码检查所选单元格的数量是否为2,如果是,则使用动态绑定调用一个委托来更改一个名为obj2的对象的值。如果所选单元格的数量不是2,则直接将flag变量赋值给obj2。整段代码复杂度比较高,使用了大量的动态绑定 (dynamic binding) 技术,这是一种在运行时确定调用哪个方法或访问哪个属性的技术。
继续上面的代码,这部分应该是在处理前面的代码中通过动态绑定创建的obj2对象。如果obj2的值为false,则调用Game.<>o__6.<>p__3委托并使用二元逻辑运算 (Logical AND) 将其与list[1].get_Value(Type.Missing)的比较结果进行 AND 操作,然后将结果赋值给obj4。否则,obj4的值等于obj3。整段代码中的目的是跟踪用户选择的单元格是否跨越了两个单元格,如果两个单元格都被选中,则采取一些特殊的操作。由于代码中使用了大量的动态绑定技术,因此可读性不是很好。这也是建议在代码编写过程中尽量避免使用动态绑定的原因之一。
这段代码继续处理前面的代码中通过动态绑定创建的obj4对象。如果obj4的值为false,则调用Game.<>o__6.<>p__6委托并使用二元逻辑运算 (Logical AND) 将其与指定的字符串 “\ud83d\udca5” 进行比较,并将结果赋值给obj6。无论obj4的值是什么,最终的结果都将保存在obj6中。
这段代码继续处理前面的代码中通过动态绑定创建的obj6对象。如果obj6的值为false,则调用Game.<>o__6.<>p__9委托并使用二元逻辑运算 (Logical AND) 将其与指定的字符串 “\ud83d\udca5” 进行比较,并将结果赋值给arg5。无论obj6的值是什么,最终的结果都将保存在arg5中。
这段代码判断用户选择的单元格中是否有两个单元格被同时选中,且这两个单元格中是否都有指定的字符串 “\ud83d\udca5”,如果满足条件,则将这两个单元格中的值交换,并且计算单元格中数字的总和。首先,代码调用先前为true/false操作创建的动态绑定委托,并使用逻辑AND运算符检查arg5的值。如果arg5的值为true,则继续执行后面的操作。然后,代码创建一个表示两个字符Unicode码点的数组,并使用LINQ查询语句将其值设置为list[1].get_Value()中字符的Unicode码点。接下来,代码计算这两个字符所表示的Unicode码点。接下来,代码使用已计算出的Unicode码点,从number数组中减去这两个单元格的行和列的乘积。最后,代码使用交换法将两个单元格中的值互换,并调用check方法重新计算单元格中数字的总和。总的来说,这段代码的主要作用是处理用户在Excel中选择单元格时所做的操作,并将它们转换为对应的计算步骤和结果。
这段代码的主要功能是检查单元格中的数字是否符合要求,并根据结果显示消息框。代码中使用两层循环访问名为sheet1的Excel工作表中的48×48个单元格。然后,代码创建两个动态绑定委托,将单元格的值与指定的字符串 “\ud83d\udca5” 进行比较。如果两个字符相等,则返回。如果所有单元格中都不包含字符串 “\ud83d\udca5”,则显示一个消息框。该消息框将number数组中存储的数字数组转换为ASCII码,并显示在消息框中。总的来说,这段代码的主要作用是检查Excel中的单元格是否符合要求,并在单元格中放置了正确的字符和数字,以帮助用户完成谜题。
这里的 array[0] 和 array[1] 是一个长度为2的整数数组,它存储了一个 Unicode 字符的 UTF-16 编码,以便将其转换为 Unicode 码点。在 UTF-16 编码中,基本多文种平面(BMP)中的每个字符由两个 16 位编码(也称为编码点)表示。第一个编码点使用高位编码(high surrogate),其范围为 0xD800~0xDBFF,第二个编码点使用低位编码(low surrogate),其范围为 0xDC00~0xDFFF。这意味着一个字符的 UTF-16 编码可以表示为两个 16 位编码的组合,这两个编码分别存储在数组中。因此,代码中的 array[0] 存储高位编码,array[1] 存储低位编码。
list[0]list[1] 分别代表 Excel 表格中的两个单元格。 list[0] 表示第一个单元格,list[1] 表示第二个单元格。

总的来说,我的理解是这段代码的作用类似于连连看,一样的数据才能消掉,然后根据消掉的数据进行计算,主要代码

num = (array[0] - 55296) * 1024 + array[1] - 56320 + 65536 - 128512;
this.number[num] -= (list[1].Row - 1) * (list[1].Column - 1);
this.number[num] -= (list[0].Row - 1) * (list[0].Column - 1);

数据太长了,就不放了,可以自己转一下

array=[]
for i in range(48):array.append([0]*48)array[0][0] = "d83dde08";
array[0][1] = "d83dde11";
'''......'''
array[47][46] = "d83dde0f";
array[47][47] = "d83dde25";
number=[25588, 31114, 28727, 26722, 24948, 25135, 25480, 29029, 23025, 25775, 15411, 25423, 25202, 30031, 27380, 30734, 25054, 25109, 20741, 28568, 28802, 24591, 26063, 30940, 30375, 19411, 29573, 20845, 27232, 26743, 25779, 24986, 31498, 30978, 22945, 26563, 35012, 29994, 27016, 29535, 21342, 26573, 27569, 25408, 31567, 25503, 21385, 27207]for i in range(48):for j in range(48):x=int(array[i][j][:4],16)y=int(array[i][j][4:],16)num = (x - 55296) * 1024 + y - 56320 + 65536 - 128512number[num]-=i*jprint(bytes(number))
print(b'flag{'+bytes(number)[6:-6]+b'}')

OldSymbolicCode

第一眼看到这样的东西,以为做不了
在这里插入图片描述
直到看到是MS-DOS的应用程序,于是试着用DOSBox运行一下,还真的能运行,果然还是认识的太少了
在这里插入图片描述

安装的话,可以看这篇博客

DOSBox安装

如果要debug的话,记得把debug.exe放到asm文件夹里
然后开始debug硬调
常用命令
在这里插入图片描述
根据调试,代码主要逻辑为

输入一串字符串
判断长度是否等于36,不等于则Try Again!
主要逻辑为:rc4加密,tea加密可以根据以下指令调试
g 02cb
g 02ce
g fffb
g 0177,输出Hello!Your flag is:
g 01a8,输入flag
g 01f3
g 01fb,rc4加密函数
g 01fe,rc4加密后
g 028c,准备tea加密
g 0294,此处存放密文rc4:密钥
hex:30 6c 64 43 6f 6d 70 75 74 65 72 53 65 63 72 65 74
key:0ldComputerSecrettea:
round:32si=e9de   di=a554
mov ax,di
mov cl,04
shl ax,cl  左移四位
mov dx,di
mov cl,05
shr dx,cl 右移五位
xor ax,dx判断是tea算法加密sum=0x9e35
key=[0x4e21,0x7065,0x656e,0x2170]si+=di做运算
sum+=0x9e35
di+=si做运算

先解tea,再rc4解密

#include<stdio.h>
#include<stdlib.h>void encode(unsigned int *a1, unsigned int *a2)
{int x;unsigned __int16 i; // [rsp+8h] [rbp-18h]unsigned __int16 v4; // [rsp+14h] [rbp-Ch]unsigned __int16 v5; // [rsp+18h] [rbp-8h]unsigned __int16 v6;for(x=0;x<=16;x++){v6 = *(a1+x*2);v5 = *(a1+x*2+1);v4 = 0;i=0;do{i++;v6 += (((v5 >> 5) ^ 16 * v5) + v5) ^ (*((v4 & 3) + a2) + v4);v4 += 0x9E35;v5 += (((v6 >> 5) ^ 16 * v6) + v6) ^ (*(((v4 >> 11) & 3) + a2) + v4);}while(i<32);*(a1+x*2) = v6;*(a1+x*2+1) = v5;
//	  printf("\n0x%X\n",v4);}
} void decode(unsigned int *a1, unsigned int *a2)
{int x;unsigned __int16 i; // [rsp+8h] [rbp-18h]unsigned __int16 v4; // [rsp+14h] [rbp-Ch]unsigned __int16 v5; // [rsp+18h] [rbp-8h]unsigned __int16 v6;for(x=0;x<=16;x++){v6 = *(a1+x*2);v5 = *(a1+x*2+1);v4 = 0xC6A0;i=0;do{i++;v5 -= (((v6 >> 5) ^ 16 * v6) + v6) ^ (*(((v4 >> 11) & 3) + a2) + v4);v4 -= 0x9E35;v6 -= (((v5 >> 5) ^ 16 * v5) + v5) ^ (*((v4 & 3) + a2) + v4);}while(i<32);*(a1+x*2) = v6;*(a1+x*2+1) = v5;
//	  printf("\n0x%X\n",v4);}
} int main()
{unsigned int v[18]={0xE3D8,0x97AD,0x0DB4,0xA0A5,0x63E3,0x439C,0x9BC9,0x2685,0x2DEA,0xDF95,0xB288,0x6F18,0x80F3,0xD2CA,0xFF0D,0x5B9B,0x8B65,0xEBAF};unsigned int key[4]={0x4e21,0x7065,0x656e,0x2170};int i;decode(v,key);for(i=0;i<18;i++){printf("%.2x",v[i]&0xff);printf("%.2x",(v[i]&0xff00)/0x100);//dee954a5162e2effe4ad030cbd49c0cd6f495c9822e094767e74da6457b4ef4105a23439,最后rc4解密 }printf("\n");for(i=0;i<18;i++){printf("0x%.4X ",v[i]);}printf("\n");encode(v,key);for(i=0;i<18;i++){printf("0x%.4X ",v[i]);}system("pause");return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18258.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Servlet基础学习

什么是Servlet&#xff1f; Servlet是一种用于接收web网页传回和输出到web的一个Java类&#xff0c;根据不同的实际需要&#xff0c;实现不同的Servlet来对网页数据进行处理。 Servlet的基本处理流程 在网页发起请求之后&#xff0c;编译器首先去寻找web网页的配置文件&…

react仿微信聊天室|react即时聊天IM系统|react群聊

reactredux仿微信聊天IM实战|react仿微信界面|react多人群聊天室 最近一直捣鼓react开发&#xff0c;就运用react开发了个仿微信聊天室reactChatRoom项目&#xff0c;基于reactreact-domreact-router-domreduxreact-reduxwebpack2.0antdesignwcPop等技术混合开发&#xff0c;实…

DES加密解密 Feistel算法网络结构 详讲

文章目录 简单知识导入&#xff1a;具体过程&#xff1a;IP置换&#xff08; 64 − > 64 64->64 64−>64&#xff09;轮函数--E扩展置换&#xff08; 32 − > 48 32->48 32−>48&#xff09;轮函数--与子密钥异或&#xff08; 48 − > 48 48->48 48−&…

2023年春秋杯网络安全联赛春季赛Reverse题目复现

文章目录 一.sum1. 分析程序逻辑2.解数独矩阵3.解题脚本 二.Poisoned_tea_CHELL1. 重新识别函数及程序逻辑分析2.IDA动态调试(attach附加调试)3. 输入选项进行单步调试4.解题脚本 BWBAOldSymbolicCode 一.sum 1. 分析程序逻辑 这里直接贴上当时分析的结果,根据程序行为不难猜…

NLP相关知识点(慢慢更新)

一、基础概念 1.1. NLP 中的 Tokenization 是什么? NLP技术中 Tokenization 也可以被称作是“word segmentation”&#xff0c;直译为中文是指 分词。 分词是NLP的基础任务&#xff0c;按照特定需求能把文本中的句子、段落切分成一个字符串序列&#xff08;其中的元素通常称…

SpringCould+Vue3-Element-Admin 登录接口,用户信息接口以及Token验证的实现【Taurus教育平台】

文章目录 一.SpringCouldVue3-Element-Admin 登录接口&#xff0c;用户信息接口以及Token验证的实现【Taurus教育平台】1.1 背景1.2 数据库 二、登录接口及其Token实现2.1 前端2.2 后端2.2.1 控制层2.2.2 service层2.2.3 工具类&#xff1a;CreateJwt2.2.4 Dao-Mapper 三、用户…

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析 0、前言text classificationemotions 数据集data visualization analysisdataset to dataframelabel analysistext length analysis text > tokenstokenize the whole dataset fine-tune transformersdistilbert…

Django通过nginx 部署(成功运行)

配置python版本和ssh启用root参考其它文章 完整项目路径 /root/projects/mysutra_pro 下级目录/root/projects/mysutra_pro/mysutra是源码目录 rootVM-12-2-debian:~/projects/mysutra_pro# ls db.sqlite3 manage.py ms_env mysutra rootVM-12-2-debian:~/projects/mysutr…

es Elasticsearch的增删改查(含数组操作)(类型,原理) - from chatgpt

父文章 算法中的特征的保存, es 和 mysql 和 odps hadoop hbase的区别_个人渣记录仅为自己搜索用的博客-CSDN博客 Elasticsearch如何做到数十亿数据查询毫秒级响应&#xff1f; - 知乎 ES系列之利用filter让你的查询效率飞起来_es filter_lucasma.eth的博客-CSDN博客 ES查询…

文心一言对比chatgpt

文章目录 一、 介绍二、 回复速度比较三、 写代码能力四、 做表格能力五、 写文案能力六、 解决数学问题能力七、 绘画能力八、 实时更新信息九、 总结 一、 介绍 文心一言对比chatgpt。 测试了上百个案例&#xff0c;挑选几个经典的案例。 二、 回复速度比较 百度文心耗时10…

CSDN chatGPT初体验

我的问题&#xff1a;用java实现一个B树 public class BTree {private int t;private Node root;private class Node {private int n;private boolean leaf;private int[] keys;private Node[] children;public Node(boolean leafNode) {this.n 0;this.leaf leafNode;this.ke…

chatgpt赋能python:Python岗位需求日渐增加

Python岗位需求日渐增加 Python编程语言在当前的IT行业中越来越受欢迎。其灵活性和易用性使得Python在各种领域中使用广泛&#xff0c;比如Web开发、数据科学、人工智能等。作为一名有10年Python编程经验的工程师&#xff0c;我认为Python是一种非常有前途的编程语言&#xff…

ChatGPT可能被滥用于网络犯罪

科技是一把双刃剑 ChatGPT一经发布&#xff0c;短时间内就成为了现象级的应用。其清晰明确的回答和丰富的知识&#xff0c;昭示着AI技术造福人类&#xff0c;彻底简化我们生活工作这一美好的未来愿景。对于解决各行各业的许多问题&#xff0c;ChatGPT也提供了另外一种思路&…

用ChatGPT构建网络设备表,并根据设备关系生成网络拓扑

构造一个数据表&#xff0c;存储包括交换机、路由器、防火墙、入侵检测、上网行为管理等设备的编号、序列号、IP、MAC、访问地址、用户名、密码、管理员、物理位置、上联设备ip等信息 下面是一个示例数据表&#xff1a; Device IDSerial NumberIPMACAccess URLUsernamePassword…

七大语言模型“偏见与毒性”的角逐,ChatGpt3.5综合表现优良

颠覆性的技术进步和人工智能的快速发展&#xff0c;催生了现如今LLM&#xff08;大型语言模型&#xff09;和AIGC&#xff08;AI生成内容&#xff09;的盛行。这些创新性的模型和算法不仅能够理解、生成和处理人类语言&#xff0c;还能够模拟智能思维和创造力&#xff0c;成为各…

阿里版ChatGPT已接入钉钉,张勇:未来所有业务都有大模型加持

机器之心报道 机器之心编辑部 阿里&#xff1a;大模型也是基础设施。 4 月 7 日下午&#xff0c;阿里云没有一点预告的突然宣布&#xff0c;自研类 ChatGPT 产品开启企业邀测&#xff0c;模型名为「通义千问」。 虽然是非常小范围的测试&#xff0c;但邀测消息刚放出&#xff…

阿里巴巴开源Chat2DB v1.0.11 初体验

阿里巴巴开源Chat2DB v1.0.11 初体验 前言什么是Chat2DB下载安装安装配置Chat2DB初体验配置数据源准备测试数据认识几个功能菜单开始测试自然语言转SQLSQL解释SQL优化 使用总结后续功能结语 前言 作为一名阿里巴巴开源项目的拥护者&#xff0c;从Chat2DB开源至今都有关注这个开…

估值 2 个月从 11 亿美元降到 3 亿美元,投资人清仓跑路,国产大模型创业遇冷...

图片来源&#xff1a;由无界 AI生成 创业未半&#xff0c;而中道崩殂。 6 月 29 日&#xff0c;美团发布公告以 20.65 亿元全资收购光年之外全部权益&#xff0c;距离光年之外正式营业刚过去 84 天。 这是目前中国大模型创业领域最大的收购案&#xff0c;光年之外也在 4 个月时…

英伟达帝国的一道裂缝

2012年&#xff0c;AI圈发生了两件大事&#xff0c;按时间顺序&#xff0c;第一件是谷歌组团已久的Google Brain发布“出道作”——一个能够识别猫的深度学习网络“谷歌猫”&#xff0c;74.8%的识别准确率&#xff0c;比知名识别图像大赛ImageNet前一年获胜算法的74%还要高出0.…

也谈“前端已死”

一、一些迹象 逛社区&#xff0c;偶然看到了这张图片&#xff1a; 嗯……我眉头一皱&#xff0c;久久不语&#xff0c;心想&#xff0c;有这么夸张吗&#xff0c;假的吧&#xff1f; 突然想到&#xff0c;最近我在社区发了个前端招聘的信息&#xff0c;结果简历漫天纷飞&…