矿大BXSCTF-RE-普通的逆向

35 篇文章 0 订阅
30 篇文章 1 订阅

拖入IDA,找到主函数Main,反编译。

基本流程为输入一个字符串flag,然后进入sub_401070进行处理。

查看sub_401070函数

通过这里的格式审核,可知道flag长度为26,格式为 xxxx{xxxx_xxx_xxxx_xxx}

继续往后看

1处的名称,根据它们在栈中的位置与FLAG的距离进行改名。

2处可以看出前四个字符为flag,即flag格式为 flag{xxxx_xxx_xxxx_xxx}

使dword flag[16] = 319559941 显示成16进制

可以得知 flag[16][1]=0x19,注意flag[16][0-3]是从低位往高位读。并由flag[1-3]=lgh,可以推出该四个字符为cumt,所以flag格式继续知道为:flag{cumt_xxx_xxxxxxx_xxx}

继续向下看

 

进行一些赋值后,进入sub_4011C0函数

具体步骤功能如备注所示。

该部分的函数不好直接看懂,选择在OD调试里尝试看看。

用上述字符尝试。

根据汇编代码与静态代码,执行到该处汇编代码。

观察数据

可猜测加验证得到该6个c对应着6个x,又因为x在 abcdefghijklmnopqrstuvwxyz 对应着的下标 在 yxwvutsrqponmlzkjihgfedcba 中对应的 是 c,继续尝试使用abcdefg代入猜测,得到结果

所以不难猜出

只要找到 iueuihu 在 yxwvutsrqponmlzkjihgfedcba对应的下标 对应到 abcdefghijklmnopqrstuvwxyz中即可找到该七个字符

运行脚本 

a='yxwvutsrqponmlzkjihgfedcba'
b='iueuihu'
for i in b:
       print(chr(a.find(i)+ord('a')),end="")

得到 reverse

所以flag 字符格式 为 flag{cumt_xxx_reverse_xxx}

继续往回看

此处与flag[5]处的处理过程差不多,观察flag[4]可以知道flag[12]=0x66,继而往前算 可以知道 flag[10-12]=ctf

加上最后一句话  666 可以完整写出flag为 flag{cumt_ctf_reverse_666}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值