CTF逆向中的字符与数字

一.分类

两大类,数字和字符。
数字有10进制和16进制两种表现形式,字符以ascii码的形式存储,两者最终都会归于一串2进制数,也可以说一串16进制数。一串二进制数存储在那里,不同的读取方式会有不同的效果

二.两类函数(四个函数)

1.10进制ascii码与字符相互转换

ord()
参数:单个字符
返回值:字符对应的ascii码

f='z'
flag0=ord(f)
print(flag0)
>>>122 
#验证ord()的参数是单个字符
f='zy'
flag0=ord(f)
print(flag0)
>>>TypeError: ord() expected a character, but string of length 2 found

chr()
参数:单个十进制ascii码,若不是ascii码,或者不是10进制ascii码都会报错
返回值:ascii码对应的十进制字符

f=122
flag1=chr(f)
print(flag1)
2.10进制ascii码与字符相互转换

hex()
参数:一个10进制数或一个16进制数
10进制数
返回值:一个以0x开头的16进制形式的字符串

f=16
flag=hex(f)
print(flag)
>>>'0x10'

16进制数
返回值:以0x开头的16进制字符串,样式不变,但变成字符串

f=0x7e
flag=hex(f)
print(flag)
>>>'0x7e'

作用:10进制转16进制
P.S.不要前面0x的写法

flag0=hex(destr)[2:]

bytes.fromhex()
参数:一个不以0x开头的16进制字符串
可显ascii码
返回值:ascii码对应的字符

f='7a'
flag0=bytes.fromhex(f)
print(flag0)
>>> b'z'

不在ascii码范围和非可显ascii码
返回值:原样式返回字符串

#超出范围
f='8e'
flag0=bytes.fromhex(f)
print(flag0)
>>>b'\x8e'
#非可显字符
f='1f'
flag0=bytes.fromhex(f)
print(flag0)
>>>b'\x1f'

作用:16进制数根据ascii码转换成byte类型字符(2个16进制组一个字符)

3.byte类型转换成str类型

flag = str(flag1, 'utf-8') 
发布了42 篇原创文章 · 获赞 17 · 访问量 4990

猜你喜欢

转载自blog.csdn.net/weixin_45055269/article/details/105321971
今日推荐