[MRCTF2020]Transform

题目链接

知识点积累:

LOWORD()得到一个32bit数的低16bit
HIWORD()得到一个32bit数的高16bit
LOBYTE()得到一个16bit数最低(最右边)那个字节
HIBYTE()得到一个16bit数最高(最左边)那个字节

查壳——

64位,无壳

IDA伺候

进去按个TAB就发现到了破解函数

先把明显的函数换个名字

从头开始慢慢看,反正不长,长的话就后面慢慢看

首先他要我们输入一个33长度的密码

然后进入for循环看

这里有个lobyte,查一下:

LOBYTE是一个在汇编语言中用于获取双字类型数据的低字节的指令。具体来说,LOBYTE指令返回双字类型数据的低8位。

ok,我们再换个名字

个人偏好,这样看着舒服

因为最后是cmpflag=aflag

我们去看cmpflag

提取好数据,等下肯定要用来写脚本的

顺带的还可以提取下bflag的数据

针对这个lobyte,最开始我还很疑惑,这个bflag刚好33个,咋搞双字节

后面问了下才知道,给一个字节,前八位等于后八位,所以lobyte就是他自身

so,我们逆向这写代码

database=[9,
  10,
  15,
  23,
  7,
  24,
  12,
  6,
  1,
  16,
  3,
  17,
  32,
  29,
  11,
  30,
  27,
  22,
  4,
  13,
  19,
  20,
  21,
  2,
  25,
  5,
  31,
  8,
  18,
  26,
  28,
  14,
  0]
cmpflag=[103, 121, 123, 127, 117,  43,  60,  82,  83, 121,
   87,  94,  93,  66, 123,  45,  42, 102,  66, 126,
   76,  87, 121,  65, 107, 126, 101,  60,  92,  69,
  111,  98,  77,]
flag=''
print(len(cmpflag))
for i in range(33):
    flag+=chr(cmpflag[i]^database[i])
print(flag)
flag='nsthr30TRiTO}_p31pFs_ClCr{z4N_slE'
s='nsthr30TRiTO}_p31pFs_ClCr{z4N_slE'
database=[9,
  10,
  15,
  23,
  7,
  24,
  12,
  6,
  1,
  16,
  3,
  17,
  32,
  29,
  11,
  30,
  27,
  22,
  4,
  13,
  19,
  20,
  21,
  2,
  25,
  5,
  31,
  8,
  18,
  26,
  28,
  14,
  0]
flag=list(range(33))
for i in range(0,33):
  flag[database[i]]=ord(s[i])
s2=''
for i in range(33):
  s2+=chr(flag[i])
print(s2)

最后得到ERCTF{Tr4nsp0sltiON_Clph3r_1s_3z}

下班下班!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Nickname

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值