下载附件,发现是.exe文件,使用静态分析
拖入ida,从主函数分析
得到的信息:
1.为Str赋值
2.sub_1400054D0() 为输入函数
3.sub_140001120() 和 sub_140001140() 类似于两个加密函数
4.v10 进行异或 得到 数组 byte_14013B000[22],双击可得到该数组的值
0x9E, 0x0E7, 0x30, 0x5F, 0x0A7, 0x1, 0x0A6, 0x53, 0x59, 0x1B, 0x0A, 0x20, 0x0F1, 0x73, 0x0D1, 0x0E, 0x0AB, 0x9, 0x84, 0x0E
然后分析 .sub_140001120() 和 sub_140001140()
看到256 ,并且 为V9的每个数组都进行了赋值 还 进行了异或,大致可以确定使用了RC4加密
Str为密钥
RC4加密算法的及讲解:https://www.bilibili.com/video/BV1994y1o7tj?
正面理解这道题为:
1.对用户输入的V10 进行RC4加密 ,得到密文
2.密文再与0x22 异或 得到 byte_14013B000[22]
逆向理解为:
1.byte_14013B000[22] 与 0x22异或 得到 密文
2.密文 再进行RC4 解密(解密时用到了异或) 得到 明文
明文即所求
故脚本如下
先求密文异或后的结果:存在flag1中
转化为16进制后:
所以:
flag{nice_to_meet_you}