writeup_攻防世界_WindowsReserve2

首先,除了攻防世界的wp以外,网上关于这题的wp我个人都认为不太详细

image-20220221154222199

有as壳,esp定律手动脱壳。

image-20220221154312611

拖入ida,根据功能对函数进行重命名:

image-20220221155246072

锁定关键函数:

①检查输入函数:

image-20220221155643676

②加密函数:

image-20220221195502946

最后一位通过v9和v4加密,存入了v10

进入下一层逻辑:

image-20220221213003126

仔细观察逻辑发现有一个密码表,通过python脚本转化一下:

image-20220221212858274

发现还是经典base64,仔细观察代码逻辑,推测是base64加密函数。

因此,可以对程序的总体流程进行推测:

  1. 传入加密函数,分奇数偶数位进行加密
  2. 加密后的内容进行base64编码(结果为reverse+)

然而,对reverse+进行解码却发现解不开。。。这应该是其解码之后的结果无法打印

image-20220221215648947

遂自己写脚本如上,左侧为输出。

然后回到上一层函数

上一层函数的输出为173,235,222,174,199,190

因此可以初步判断本层函数的输入应为12位,由于可能性较少,可以直接正向碰撞,可能性仅仅有12*(10+6)种,直接复刻正向逻辑:

首先,上面的一大串加密逻辑的输出结果只可能是整数0~15

然后使用0~15循环碰撞输出结果,得到的值进行保存,

最终将得到的含有015整数的12位数组反向转化为09、A~F即可

image-20220221222215169

终于搞定了。。。