攻防世界re-logmein

先丢到ida里面,看一下伪代码

题目已经说了是关于算法逆向的,所以应该是通过一系列比较可以得到正确的结果

然后先从后面看一下,这里有两个函数sub_4007C0()和sub_4007F0(),进去看一下

错误输入就会进入前者,所以需要想办法进入4007F0函数
看一下前面的条件,主要相关的是v8,v7和v3;
v8是":"AL_RT^L*.?+6/46"这个字符串
V7是一个ll型的十进制数28537194573619560
然后逆序进行计算的话,28537194573619560转换为16进制是65626d61726168
接着转文本得到ebmarah
然后通过别的题解了解到这个需要将其倒序使用harambe

补:这里(char)(*((_BYTE )&v7 + i % v6) ^ v8[i])
BYTE
* 经查询,是相当于unsigned char
然后可以得到一个二进制码与后面v8[i]进行异或运算,然后转换为char类型依次比较
所以把每一个比较的字符存储进行输出就可以得到flag

接着按这个字符串跑一下就可以得到答案


RC3-2016-XORISGUD

#include<bits/stdc++.h>
using namespace std;
int main() {
	string v8=":\"AL_RT^L*.?+6/46";
	long long int v7 = 28537194573619560;
	int v6 = 7;
	int s=32;
	string ans="";
	for (int  i = 0; i < 32; ++i ) {
		/*if ( v7[i] != (char)(*((unsigned char *)&v7 + i % v6) ^ v8[i]) ) {
		}*/
		
		if(i >= v8.length()){
			goto gg;
		}
		ans+=(char)(*((unsigned char *)&v7 + i % v6) ^ v8[i]);
	}
	gg:cout<<ans;
	return 0;
}
posted @ 2020-09-03 11:41  阿那哒  阅读(144)  评论(0编辑  收藏  举报