2020:4:25 pm 1:30-5:30
入门reverse
F5可以看见关键代码
1 2 3 4
| for ( i = 0; i < strlen(&input); ++i ) v6[i - 112] = (v6[i - 112] ^ 6) + 1; if ( !strcmp(&input, "akhb~chdaZrdaZudqduvdZvvv|") ) std::operator<<<std::char_traits<char>>(&std::cout, "yes!you are right");
|
并不知道v6[i - 112]是啥,但是因为这是简单题所以把它看作是输入,然后走一波,结果就flag就出来了,当然我们也可以动调去看一下,妥妥的是输入
1 2 3 4 5 6 7 8 9 10 11 12
| #include <stdio.h> #include <string.h>
int main() { char a[100]="akhb~chdaZrdaZudqduvdZvvv|"; for(int i=0;i<strlen(a);i++) { a[i]=(a[i]-1)^6; } printf("%s",a); }
|
encrypt3
这个题分析可知,
- 用户先输入一个魔法数字,这个数字是你后面输入的字符串长度的位数
- 输入一个字符串
- 他会将一个key的每一位与你的输入的每一位异或后输出(每一位都会异或所有你输入的字符串
- 所以爆破异或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <stdio.h> #include <string.h>
int main() { char a[100]="&,!';#\"surq!$uvw#x&ruq&\"qrur$psvyp#%y="; for(int i=' ';i<'}';i++) { char b[100]; strcpy(b,a); for(int k=0;k<strlen(b);k++) b[k]=b[k]^i; printf("%s\n",b); } }
|
sm
这题不会