【Writeup】200424-集训队考试-逆向题
*
刚参加完集训队最后一次考试,把里面涉及到的逆向题(已获得授权)写一个Writeup
题目下载地址:逆向
方法1
运行后发现是个弹窗
拖到IDA里打开,Shift+F12查找字符串,发现"Congratulation"字样
双击进去看是哪里调用了这段字符
跟进,F5查看伪代码
可知最终利用MessageBoxA函数弹出对话框,显示了Dst和"Congratulation",说明Dst的值应为flag。
要得到Dst需要将byte_403000这个地址储存的数组进行一系列的运算,看一下byte_403000:
打开terminal,vi新建一个c代码脚本(注意数组中十六进制和十进制表示的整数同时存在)
1 int main(){ 2 int test[24]={0x44,5,0xA4,0x64,0xE7,0x64,0x65,0x65,4,0xC5,0x65,0xC4,0xCE,0x8E,0xCE,0x8E,0x8E,0x0E,0xCE,0x0E,0xA2,0xA0,0x83,0x27}; 3 for(int i=0;i<24;i++){ 4 test[i]=((test[i]^0x88)>>5)|8*(test[i]^0x88); 5 printf("%c",(char)test[i]); 6 } 7 return 0; 8 }
编译并运行:
~$ gcc test.c -o test
~$ ./test
得到flag
其他方法
还有利用动态暴力破解和写脚本解出输入密码的方法,有时间再补充。