【CTF】2023铁人三项赛第一赛区 初赛 逆向方向WP
浏览 102 | 评论 0 | 字数 1160
Xunflash
2023年01月10日
  • Reverse

    HelloWorld

    看图片注释写的很明白,直接分析程序逻辑就行,

    题目先生成了个随机数,然后给了个字母表,题目要求输出HelloWorld,观察到最后cout是输出这个output的内容,output也是程序开始random随机出来的内容

    观察到程序对output进行了修改,分析可以分析出来每轮循环读入2字节的数据,提取第一个字节的高4bit和低4bit,这里直接方便看改成了hibyte和lowbyte(自己能理解是什么就行)

    高位作为下面进入各个分支的条件,低位作为控制output的下标。

    每轮的第二个字节只在赋值区域被用到,作为字符表的索引。

    image-20230110214515429

    构造输入即可

    print('0'+chr(7)+'1'+chr(4)+'2'+chr(11)+'3'+chr(11)+'4'+chr(14)+'5'+chr(22)+'6'+chr(14)+'7'+chr(17)+'8'+chr(11)+'9'+chr(3)+chr(0x10)+chr(1)+chr(0x15)+chr(1)+chr(0x4A)+chr(1))
    
    #'0'字符为0x30,高4bit为3进入了赋值的if分支,低bit作为控制output的idx
    #前有v9=&11[1]&31,31即0b11111,v9仅作为赋值分支中v27也就是控制字母表的idx使用
    #因此第一组0x30 0x7意思是进入赋值分支,控制输出的第0位,赋值为字母表中idx为7的字母
    #后面以此类推
    #0x10 0x1 0x15 0x1的意思是把第0位和第5位的字母变大写
    #0x4A 0x1的意思是进入4分支 也就是00截断,在0xA的位置写入一个0x0 截断输出
    
    #最后利用管道符把python的输出直接输出到远程上
    #python ./re2.py | nc 172.31.0.157 50000

    rand5

    可以看出来是五次换表,伪随机生成的表,动调把五张表拿出来

    image-20230110214555029

    直接用cyberchef解就行

    image-20230110214615621

    本文作者:Xunflash
    本文链接:http://xunflash.top/index.php/archives/2023tiesan.html
    最后修改时间:2023-01-10 22:11:31
    本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
    评论
    114514
    textsms
    支持 Markdown 语法
    email
    link
    评论列表
    暂无评论