使用ida清除花指令计算出JUMP文件中的flag

canca9个月前 (08-14)逆向工程293

1.使用ida64打开JUNK,F5反编译

1.png

2.进入main方法,发现loc_1165函数,该函数应该是加密的,接着双击loc_1165进入方法

2.png

3.进入方法后切换为HEX视图时,发现花指令,定位到花指令那行

3.png

4.点击HexView视图,光标位置按F2,进行编辑模式,将BE修改为90,再按F2确认

4.png

5.再切回IDA 视图模式,定位到修改行,按C键确认,再按TAB键切回代码视图,按F5重新反编译!

5.png

6.发现原来loc_1105变为sub_1165,双击进入方法

6.png

7.阅读代码,a1是明文,而a2是密钥。加密算法是,密文=密钥^明文

7.png

8.双击s1查看密钥,双击s2查看密文

8.png


9.选择密文段 ,按ctrl + E 导出数据,按C hex格式导出

9.png

10.查看s1密钥时,发现重定向至 aWe1c0meT0CtfEn函数

10.png

11.查看到密钥

11.png

12.根据加密算法,可以使用python解出flag

12.png

或者使用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}


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。