CTF MISC 简单的脚本的撰写 -- 进制转换篇

发布于:2025-02-11 ⋅ 阅读:(86) ⋅ 点赞:(0)

前言

为什么学习 脚本 ? 当脚本小子的基础也是需要看懂代码的好吧  虽然很多工具都可以解码 进制转换 ascii  但是 前 128位的ascii 可以转  那后 128位呢  一般工具是不识别的所以脚本还需自己学

【ASCII】完整ascii码表0-127 + 扩展表128-255-CSDN博客

前言知识:认识  ascii码表的扩展表 :
学习脚本之前先学习一个知识  那就是切片         字符串的切片其实不难 就是比较难懂

#  假设 
a='hello word'

把这个字符两两分组 改怎么做呀 

那就需要切片(比如切片的操作其实就是 可以把16进制(16 进制是 2个表示一个ascii字符的所以我们不能直接转换 需要先切片 分为两两分组之后再转位ascii))

b=a[0:2]

学完这个就可以写  16进制转ascii码的脚本了

攻防世界  掀桌子

看着这个题做出的人很多  但是能掌握的很少  

c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2 拿到字符串

s='c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2'           #你要转换的字符串

l=len(a)//2            # 因为16进制是 2个字符串表示一个字符 这样的目的是确定 转换为的字符串的长度   // 的目的是 除法的同时进行向下取整

flag=''        #先定义空值
for i in range(l):         #循环  拼接 替换后的ascii码  
    flag += chr(int(s[i*2:(i+1)*2],16))    # 切片  s[i*2:(i+1)*2]  就是只切两位  i=0是是不是就是s[0:2]  取前两位    16 是当前的进制   int 不能少这个是转整数的  flag+ 就是拼接
print(flag, end='')         #输出flag

运行一下

结果发现是 乱码了  其实这个 ascii码的扩展部分

笨方法就是挨个找  但是我们还是使用脚本进行转换

flag = ''
s='c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2'
l = len(s)//2
for i in range(l):
    flag += chr(int(s[i*2:(i+1)*2], 16) % 128)      #转 后ascii码
print(flag, end='')

Hi, FreshDog! The flag is: hjzcydjzbjdcjkzkcugisdchjyjsbdfr  

最后得出 flag 

类推我们也可以写二进制转ascii的脚本


网站公告

今日签到

点亮在社区的每一天
去签到