关于二维码

二维码除了定位点不能被遮挡外,其他地方不是有数据冗余机制嘛,允许10%-20%以内的遮挡/噪声好像是

不同软件算法可能不一样,有的能算出来原始数据,有的算不出来

这也是那个stable diffusion生成二维码能契合原图的原因

在生成二维码的时候,由于有这部分冗余的存在,在一定程度上“丢掉”某些颜色差异与底图过大的信息是不影响数据表达的。但会影响传输可靠性

比如这个码你很难在 摄像设备歪斜/远距离/模糊的展板 的情况下成功扫出来

——来自芃哥

修改文件创建时间等

使用windows自带的powershell即可,win+r键,输入powershell,在弹出的命令窗口输入命令,以abc.txt举例

1.修改文件创建时间

1
$(Get-Item abc.txt).creationtime=$(Get-Date "11/04/2019 20:42:23")

2.修改文件最后访问时间

1
$(Get-Item abc.txt).lastaccesstime=$(Get-Date "11/04/2019 20:42:23")

3.修改文件最后修改时间

1
$(Get-Item abc.txt).lastwritetime=$(Get-Date "11/04/2019 20:42:23")

关于Python—base64编码

crypt = base64.b64encode(enc.encode(‘utf-8’)).decode(‘utf-8’)

cipher = base64.b64decode(crypt).decode(‘utf-8’)

关于这两段为什么要写两个utf-8

关于Python解密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Str = "ylqq]aycqyp{"

flag = []

for i in range(0, len(Str)):

if (Str[i] <= chr(94) or Str[i] > chr(96)) and (Str[i] <= chr(62) or Str[i] > chr(64)):

flag.append(chr(ord(Str[i])+2))

else:

flag.append(chr(ord(Str[i])-24))

print(''.join(flag))

# 知识点
# flag要写为列表,字符串不可以直接相加减
# 做加减法的时候要先ord转化在加减然后转化为chr字符串
# 然后在字符操作
# 最后用join()拼接

关于Python找数组相同元素下标

可以直接用函数find,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
flag = ''

s = 'wesyvbniazxchjko1973652048@$+-&*<>'

result = 'v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i'

len1=int(len(result)/2)

for i in range(len1):

s1 = s.find(result[i * 2]) - i

s2 = 34 - s.find(result[i * 2 + 1]) - i - 1

if s2 < 0:

s2 = s2 + 34

else:

flag += chr(s1 * 17 + s2)

print(flag)

其中s.find(result[i2])就是找s中和result[2i]元素相同元素的下标

关于upx加壳脱壳指令

upx.exe –o 别名.exe –d 现名.exe

-o:表示输出;

-o 别名.exe:表示以别名.exe作为脱壳后的输出;

-d 现名.exe:表示以现名.exe作为脱壳前的输入。

关于Python切片

Python切片操作_小魔王降临的博客-CSDN博客

关于IDA

交叉引用就是看哪段代码引用了这个变量

关于C语言伪代码转化

关于Python的random库

1
2
3
4
5
6
7
import random

print(random.getrandbits(8)) #返回一个八位大小的整数

扩展:8位大小的整数是指二进制八位00000000-11111111的数,转换成十进制就是0-255

random.seed(1) #设置一个种子为1并生成随机数,设置种子后生成的随机数就是固定的(逆向题可用)

关于xor异或的逆运算

A=A^B^B

关于Python语法小记

字符串连接时只能将字符和字符连接,flag+=str()

Ord是转化成对应的ascll

异或运算只能int类型,ord()^int()

定义字符串单双引号都可以

关于大端序和小端序的区别

BUUCTF SimpleRev(涉及大小端序存储的问题)_Afanbird的博客-CSDN博客

大端序和小端序_Casuall的博客-CSDN博客

1、大端模式:高字节保存在内存的低地址

2、小端模式:高字节保存在内存的高地址

Big-endian:高位字节存入低地址,低位字节存入高地址

Little-endian:低位字节存入低地址,高位字节存入高地址

一般来说,x86系列CPU都是Little-endian字节序,PowerPC通常是Big-endian字节序。

关于可以直接打进地址栏的文件类型

data:image/png;base64,iVB………………………………

关于base编码原理

Base系列编码浅析【base16 base32 base64 base85 base36 base 58 base91 base 92 base62】 - 0yst3r - 博客园 (cnblogs.com)

关于CTF常见编码以及加解密

CTF常见编码及加解密(超全) - ruoli-s - 博客园 (cnblogs.com)

常用的在线编码工具

CyberChef (gchq.github.io)

Ciphey/Ciphey: ⚡ Automatically decrypt encryptions without knowing the key or cipher, decode encodings, and crack hashes ⚡ (github.com)

CTF在线工具-CTF工具|CTF编码|CTF密码学|CTF加解密|程序员工具|在线编解码 (hiencode.com)

在线工具 - Bugku CTF

关于ASCII逆向穷举

例如:[ACTF新生赛2020]rome1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
a= 'ACTF{'

enc='Qsw3sj_lz4_Ujw@l'

s=''

for i in range(len(enc)):

for n in range(128):

j=n

if j >64 and j<=90:

j=(j-51)%26+65

if j>96 and j<=122:

j= (j-79)%26 +97

if j==ord(enc[i]):

a=a+chr(n)

print(a+'}')

ACTF{Cae3ar_th4_Gre@t}

题目中意思是输入的字符经过一系列加密得到enc,在逆向的过程中可以用穷举的方法逐渐得到结果,以顺代逆