MD5算法
MD5信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用于确保信息传输完整一致。MD5算法是单向散列算法的一种。单向散列算法也称为HASH算法。
特点
稳定、运算速度快。
压缩性:输入任意长度的数据,输出长度固定(128 比特位)。
运算不可逆:已知运算结果的情况下,无法通过通过逆运算得到原始字符串。
高度离散:输入的微小变化,可导致运算结果差异巨大。MD5算法原理:1、数据填充对消息进行数据填充,使消息的长度对512取模得448,设消息长度为X,即满足X mod 512=448。根据此公式得出需要填充的数据长度。填充方法:在消息后面进行填充,填充第一位为1,其余为0。(此时消息长度为N*512+448)2、添加消息长度在第一步结果之后再填充上原消息的长度,可用来进行的存储长度为64位。如果消息长度大于264,则只使用其低64位的值,即(消息长度 对 264取模)。在此步骤进行完毕后,最终消息长度就是512的整数倍。(此时消息长度为(N+1)*512 )3、数据处理首先需要用到4个常数:四个32位变量初始化(经过研究所得,为固定值)
A = ...
tea系列算法
TEA它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每轮的加密是不同,该加密算法的迭代次数可以改变,建议的迭代次数为32轮。Tea算法的特征是存在0x9e3779b9.加密:
#include<stdio.h>
void encode(unsigned int* v,unsigned int *k)
{
unsigned int l=v[0],r=v[1];
unsigned int k0=k[0],k1=k[1],k2=k[2],k3=k[3];
unsigned int delta=0x9e3779b9;
int i;
unsigned int sum=0;
for(i=0;i<32;i++) //核心加密算法,建议32轮,最低16轮
{
sum+=delta;
l+=((r<<4)+k0)^(r+sum)^((r>>5)+k1); ...
2023线上ISCC部分WP
Web羊了个羊通过网址打开游戏界面,发现鼠标右键失灵,无法直接打开页面源代码。随意打开一个已知页面的源代码,发现有view-source:字样,在游戏界面的网址前加上view-sourc:打开页面源代码。发现一串字符使用base64加密解密后是个假的flag有两个可打开文件,flag肯定在这两个中打开index.css文件未发现任何东西故接着打开另一个vue.global.js文件,文件内容很多,快捷键Ctrl+F全局搜索,发现base64字符串经过两次base64解密得到正确的flag
小周的密码锁打开,按照规律多次尝试发现后面的password2不会变,将其值改成5,得到代码发现有部分被遮挡,网页代码复制下来构造payload:http://47.94.14.162:10008/?password=%02!SCCNOTHARD&username=14987637&sha1=ncxvshadewjpz&%E2%80%AE%E2%81%A6//sha2%E2%81%A9%E2%81%A6sha2=DFSNHPICAKYWV得到结果
老狼老狼几点了首先跑出来是12 ...
刷题记录reverse9
BUUCTF REVERSE
re下载附件,拖入XEXE,发现有壳用kali脱壳后拖入64位IDA,找到关键函数跟进sub_4009AE脚本:
flag=''
flag+=chr(166163712//1629056)
flag+= chr(731332800 // 6771600)
flag += chr(357245568 // 3682944)
flag += chr(1074393000 // 10431000)
flag += chr(489211344 // 3977328)
flag += chr(518971936 // 5138336)
flag+='?'
flag += chr(406741500 // 7532250)
flag += chr(294236496 // 5551632)
flag += chr(177305856 // 3409728)
flag += chr(650683500 // 13013670)
flag += chr(298351053 // 6088797)
flag += chr(386348 ...
记RE出题
反编译pyc反编译,运行python代码得到flag
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def print_hi(name):
print(f'Oh_{name}')
if __name__ == '__main__':
print_hi('RE_is_f5n')
密码表考察阅读代码的能力python代码:
#!/bin/bash/python
buf=[]
v14=[]
v10="9F!R9k!w3U!tM88W90d"
v7="9517384206"
v20="MNBVCXZASDFGHIJKLPOIUYQWERT"
v15="qeadzcwsxryfhvntgbmlkjuiop"
for i in range(0,19):
v14.append(v10[i])
for i in range(0,19):
if(v14[i]== ...
刷题记录reverse8
BUUCTF REVERSE
rsa首先要知道rsa加密附件有两个,其中一个是公钥,得到e=65537,n=86934482296048119190666062003494800588905656017203025617216654058378322103517利用网站http://www.factordb.com/index.php?直接分解N得到p和q,p= 285960468890451637935629440372639283459,q=304008741604601924494328155975272418463知道了p和q后我们根据L=lcm(p-1,q-1) (L为p-1、q-1的最小公倍数)就可以算出L,有了L和E可以根据1 < D < L,E*D mod L = 1算出D,有了D和N我们就可以根据明文=密文^D mod N来解密出明文了
import gmpy2
import rsa
e = 65537
n = 869344822960481191906660620034948005889056560172030256172166540583783 ...
刷题记录crypto2
BUUCTF crypto这篇里面的密码学都是非常非常简单的,基本上一步解密就能得到,目的是能够多的了解到密码加密方式,这样之后见到密码题能有一定的思路
MD5下载附件,打开后用MD5解密网站直接进行解密,得到flag
一眼就解密见过几次应该一眼就能看出来题干中用的是base64加密方式进行的加密结果,故用base64解密网站进行解密即可得到flag
Url编码看题目名称就可以知道这道题要用url解密,因此得到flag
看我回旋踢首先打开确实没想到是什么加密,但看密文很明确就是flag的字样,synt{5pq1004q-86n5-46q8-o720-oro5on0417r1},发现s和f相差13,y和l也相差13,后两位也是相差13,知道是凯撒密码,偏移量为13,解密得到flag
摩斯在线摩斯密码解密得到flag
password这道题确实靠猜的,数了数key格式的位数恰好等于姓名加生日,因此猜测密码为zs19900315,最后包上flag即可
变异凯撒刚看到这道题的时候没有什么思路,看了提示知道是将ASCII码和凯撒密码结合起来了根据ASCII码对应来看,已知flag对应afZ_f– ...
刷题记录reverse6
BUUCTF reverse
luck_guy拖入exe查壳,无壳拖入64位IDA,F5反汇编shift+F12查看程序里的字符串双击跟进跳转,ctrl+x找到关键函数代码分析:
v6 = __readfsqword(0x28u);
v0 = time(0LL);
srand(v0);
for ( i = 0; i <= 4; ++i )
{
switch ( rand() % 200 )
{
case 1:
puts("OK, it's flag:");
memset(&s, 0, 0x28uLL);
strcat((char *)&s, f1); //f1为GXY{do_not_
strcat((char *)&s, &f2); //f2为空
printf("%s", (const char *)&s); //flag为f1 ...
刷题记录reverse5
BUUCTF reverse
reverse3拖入exe,无壳拖入32位IDA,F5反汇编找到关键字符串right flag,知道前面的判断条件取决于Str2,跟进Str2,得到一串字符串跟进上面的sub_4110BE,发现有大量相似字符,跟进,发现是base64写脚本:
import base64
str="e3nifIH9b_C@n@dH"
flag=""
for i in range(len(str)):
flag+=chr(ord(str[i])-i)
print(base64.b64decode(flag))
运行得到flag为flag{i_l0ve_you}
SimpleRev拖入exe,无壳拖入64位IDA,F5反汇编跟进Decry()函数
unsigned __int64 Decry()
{
char v1; // [rsp+Fh] [rbp-51h]
int v2; // [rsp+10h] [rbp-50h]
int v3; // [rsp+14h] [rbp-4Ch]
int i; // [r ...
刷题记录reverse4
BUUCTF
easyre题如其名,非常简单的一道入门题拖入exe,无壳,拖入64位IDA,F5反汇编直接看出flag为flag{this_Is_a_EaSyRe}
reverse1拖入exe,无壳拖入64位IDA,F5反汇编一路跟进,来到这个界面一长串还有些乱,于是shift+F12直接查找字符串看见关键字符串直接双击跟进调用该处的函数找到关键函数跟进Str2根据if条件句,将o换成0,故得到flag为flag{hell0_w0rld}
reverse2拖入Exe,无壳拖入64位IDA,F5反汇编当输入字符串s2和flag一样时才会得到正确的flag跟进flag根据if条件,将‘i’和‘r’都换成1故得到flag为flag{hack1ng_fo1_fun}
内涵的软件拖入exe,无壳拖入32位IDA,F5反汇编点进去分析半天,最后发现就是那一长串字符,换个包将DBAPP换成flag即可最终flag为flag{49d3c93df25caad81232130f3d2ebfad}
xor拖入exe,无壳拖入64位IDA,F5反汇编global和flag进行了比较跟进global,并提取其字 ...