使用ida清除花指令计算出JUMP文件中的flag
1.使用ida64打开JUNK,F5反编译
2.进入main方法,发现loc_1165函数,该函数应该是加密的,接着双击loc_1165进入方法
3.进入方法后切换为HEX视图时,发现花指令,定位到花指令那行
4.点击HexView视图,光标位置按F2,进行编辑模式,将BE修改为90,再按F2确认
5.再切回IDA 视图模式,定位到修改行,按C键确认,再按TAB键切回代码视图,按F5重新反编译!
6.发现原来loc_1105变为sub_1165,双击进入方法
7.阅读代码,a1是明文,而a2是密钥。加密算法是,密文=密钥^明文
8.双击s1查看密钥,双击s2查看密文
9.选择密文段 ,按ctrl + E 导出数据,按C hex格式导出
10.查看s1密钥时,发现重定向至 aWe1c0meT0CtfEn函数
11.查看到密钥
12.根据加密算法,可以使用python解出flag
或者使用C来算出flag
#include <stdio.h>
#include <string.h>
//密钥
char s1[] =
{
0x31, 0x09, 0x50, 0x04, 0x4B, 0x55, 0x5D, 0x17, 0x16, 0x03,
0x18, 0x50, 0x11, 0x4B, 0x1F, 0x52, 0x5E, 0x0B, 0x1D, 0x4D,
0x42, 0x0B, 0x44, 0x0D, 0x58, 0x5D, 0x54, 0x14, 0x6A, 0x73,
0x62, 0x6B, 0x6D, 0x2D, 0x7D, 0x6A, 0x72, 0x28, 0x74, 0x75,
0x18, 0x5C
};
//密文 (密文 = 密钥 ^ 明文)
char * s2 = "We1c0me t0 ctf,enj0y it and GET_THE_FLAG!!";
char flag[256];
int main() {
for(int i = 0 ; i < strlen(s2) ; i++){
flag[i] = s2[i] ^ s1[i];
}
printf("%s",flag);
}
//输出:flag{887b383e-370a-4bb0-9304-6649e854d529}