findit 1

查壳

进64IDA,找主函数 --> 会发现没有主函数,字符串查找也看不懂

看着有点意思,跟进去看:

全是一些定义啥的,但是在注释那里我们能看到一种标志 --> JAVA语言的String(不确定是不是由他而来的,再看看),空格切换“视图”


好家伙,this (JAVA妥了)--> 进jadx(需要点java的基础哦):有两个定义好的数组(字符串)

x = “ThisIsTheFlagHome”,y = “pvkq{m164675262033l4m49lnp7p9mnk28k75}”(很像flag了,但是一看就知道是加密过后的,需要解密,不信的话可以交这个上去看看能不能过)

有个进example看程序:

这里我们只看这段方法:

我们能看到,y是凯撒密码(就是通过偏移而得来,这个密码的特点就是除了26个字母(大小写都包括)需要改变,其他保持不变即可)来的,那么我们需要逆推回去就是正确的flag了,x的方法可以不用看了,因为不涉及它。

逆推“m164675262033l4m49lnp7p9mnk28k75”,得到结果即可。写脚本吧大伙:

int32_t main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    string Des = "m164675262033l4m49lnp7p9mnk28k75";
    string flag = "";
    for (int i = 0; i < Des.size(); i++) {
        if((Des[i] >= 'a' && Des[i] <= 'z') ||(Des[i] >= 'A' && Des[i] <= 'Z')){
            //写凯撒的加密方法
            for (int j = 'a'; j <= 'z'; j++) {
                if(j == Des[i]){
                    if((j + 16) > 'Z' && (j + 16) < 'a' || (j + 16) > 'z'){
                        flag += char(j - 10);
                    }else{
                        flag += char(j + 16);
                    }
                    break;
                }
            }
            for (int j = 'A'; j <= 'Z'; j++) {
                if(j == Des[i]){
                    flag += char(j + 16);
                    break;
                }
            }
        }else{
            flag += Des[i];
        }
    }
    cout << "flag{" << flag << "}" << endl;
    return 0;
}

得到flag{c164675262033b4c49bdf7f9cda28a75}收工。

posted @ 2023-05-03 14:46  TFOREVERY  阅读(19)  评论(0编辑  收藏  举报