攻防世界(逆向 && misc)(base64隐写、gdb脚本使用)

这几天虽然做题效率低了一点,但是有很多收获吧,不管是在python编程上,还是在misc或逆向方面,都学到了不少东西。

MISC-base64stego

这道题本身理解不难,难点是能把python转换代码写出来,首先这边有大神已经有了很深入的分析,以下是链接,所以这里就不仔细的对base64的原理和其隐写进行详细的描述了,直接说一下易错点
https://www.tr0y.wang/2017/06/14/Base64steg/
以下链接是写出这段python代码的一点小总结
https://blog.csdn.net/sjt670994562/article/details/91128337

主要思想就是最后挨着=的一个字母中的后几位二进制进行隐写,但要注意几点

  • 这里是从找的进制是从base64 mode表里的位置找的,而不是ascii
  • 如果后面是1个‘=’只能用最后一个字母二进制的后两位
    2个‘=’用最后一个字母二进制的后四位

以下是代码段

import base64
a=("")
mode=("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")		#mode码表
c=("")
f = open("1.txt","r")					#读取文件
line = f.readline()
while line:
    if("=" in line):
        a=line.replace('=','')[-2:]		#去掉‘=’留下最后一个字符
        print(a,end="")					#这里用来检测是否出错了
        num=(line.count('='))*2	
        c=c+(bin(mode.index(a[0])).replace("0b",'')[-(num):].zfill(num))		#这里是关键,对其进行查表对号,再进行二进制转换筛选
        line = f.readline()
    else:
        line = f.readline()
        continue
f.close()
for i in range (0,len(c),8):
    print(chr(int(c[i:i+8],2)),end='')	#输出

最后得到flag
在这里插入图片描述
攻防世界那道题最后需要加个flag{}

reserve_box

此题借鉴了大神的文章,下面是链接
https://blog.csdn.net/qq_38025365/article/details/89577302
这道题开始是有一个前提条件的,我在没有前提条件的情况下,自闭了多天,这一道题主要是进行静态分析然后用gdb的脚本跑出来结果。
首先有一个前提输出目标
95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a

扔进ida分析,逻辑看着特别简单,扔到kali运行一下,会发现没有输入参数的话,会输出第一个if里面的
攻防世界(逆向 && misc)(base64隐写、gdb脚本使用)_第1张图片
在这里插入图片描述
有参数就是第二个。
在这里插入图片描述
这道题静态分析的逻辑是v4产生一个随机的数值盒子,a2相当于v4的下标,既我们输入的flag转换成的数值,然后与目标数进行比对,观察是否是输出的是目标数,sub_804858D这个函数就是给v4数组部分进行赋值的.
可以静态分析,但是动态直接让那随机数从0-256爆破更简单,所以可以用gdb执行来寻找我们要找的盒子,如下图
攻防世界(逆向 && misc)(base64隐写、gdb脚本使用)_第2张图片

  • 建立一个运行循环,设置两个断点,一个用来给随机值赋值i,
    一个断点判断输出是不是为95
    
  • 断点位置一个是cmp处,这时候将我们的值赋给随机数,
    一个是进行print输出之前的寄存器的地址,检测是否为95
    
  • run  T   给一个参数,这里是T因为比赛flag开头为TWCTF
    
  • set *(char*)($ebp-0xc)=$i			这里是赋值
    
  • continue			到下一个断点
    
  • x/256xb			查看$esp+0x1c里面的值
    256 代表看256个字节
    x  代表用16进制的方式表示
    b  代表用单字节表示
    

x的用法可以参考 https://blog.csdn.net/yasi_xi/article/details/9263955

找到盒子的值
攻防世界(逆向 && misc)(base64隐写、gdb脚本使用)_第3张图片
最后根据值写出python方程
在这里插入图片描述
得出flag
在这里插入图片描述

你可能感兴趣的:(逆向题目练习)