【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

其他方法

还有利用动态暴力破解和写脚本解出输入密码的方法,有时间再补充。

 

posted @ 2020-04-24 13:35  AFJ1923  阅读(120)  评论(0)    收藏  举报