logmein
难度系数: ⭐⭐⭐
题目来源: RC3 CTF 2016
题目描述:菜鸡开始接触一些基本的算法逆向了
题目场景: 暂无
附件是一个没有后缀的文件
直接用ida打开
可知是elf文件,64位
打开后F5查看伪代码,先看main函数
发现sub_4007c0,转过去看一下
显示的意思是密码不对
这flag不就出来了嘛,s[i] 不等于什么什么,就密码错误,剩下的你懂的!
看一下,s[i]的组成,有BYTE,v7,v6,v8
然后就修修改改,写成c跑一下
#include <stdio.h> #include<string.h> #define BYTE unsigned char int main () { int i; // [rsp+3Ch] [rbp-54h] char s[36]; // [rsp+40h] [rbp-50h] int v6; // [rsp+64h] [rbp-2Ch] long long v7; // [rsp+68h] [rbp-28h] char v8[18] = ":"AL_RT^L*.?+6/46"; // [rsp+70h] [rbp-20h] v7 = 28537194573619560LL; v6 = 7; for ( i = 0; i < strlen(v8); ++i ) { s[i] = (char)(*((BYTE *)&v7 + i % v6) ^ v8[i]); } printf("%s ",s); }
找个在线代码运行一下
出来了,就是RC3-2016-XORISGUD,后面的乱码啥的就不要了
v7在ida里转的是__int64,在线代码__int64一直报错,我查了一下,__int64和long long一样,就改成long long了
还有v8,ida转的是[8],只有前八位,我没试能不能全部容纳,要求是要全部的,所以数了一下是包含了18个字符,就改成[18]了
看评论学会个技巧:
ida按R可以数字转字符
加油!未来可期!!