首页
社区
课程
招聘
[原创]2021[HFCTF]虎符杯网络安全赛道re部分wp
发表于: 2021-4-7 20:15 9768

[原创]2021[HFCTF]虎符杯网络安全赛道re部分wp

2021-4-7 20:15
9768

这题是使用c++写的,因为无符号表,ida对c++的解析不是很友好,可以去了解一下c++的string类型的结构,对解题很有帮助,推荐看这篇文章链接: https://bbs.pediy.com/thread-230312.htm.
在这里插入图片描述

程序先将长度为17位的输入分为7位和10位两部分
再输入一个数要求满足一定条件
在这里插入图片描述
直接爆破

最后得到data=99038
观察程序,发现我们的输入被分成两组后,在分别做一个异或,最后比较,第二组的加密程序似乎是一个RC4,但无所谓,直接找到异或的数值
在这里插入图片描述
在这里插入图片描述
直接动调找到异或和比较的数据,写脚本解密

mips程序
用ghidra或者ida都可以,个人习惯ida
关键函数在这里插入图片描述
这里我简单推到后发现v4恒等于0?
满足结果时a1和a2的前14位相同,直接将前14位输入发现可以
flag{Ninja Must Die}

 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
double ff(double a,double b){
    double c=pow(a,b-1);
    return c/exp(a);
}
 
int main()
{
    int i=0;
    while(1){
 
        double v17=0.0;
        double v18=0.0;
        double v19=(double)i+1.0;
        do{
            v17=v17+ff(v18,v19)*0.001;
            v18=v18+0.001;
        }while(v18<=100.0);
        double v20=(int)(v17+v17+3.0);
        if(v20==0x13B03){
            printf("success!!  %d\n",i);
            break;
        }
        else{
            printf("n0!!   %d\n",i);
        }
        i++;
    }
    int j=0;
    for(;j<12379;j++){
        double v16=0.0;
        double v21=0;
        double v22=(double)j+1.0;
        do{
            v16=v16+ff(v21,v22)*0.001;
            v21=v21+0.001;
        }while(v21<=100.0);
        if((int)(v16+v16+3.0)==0x5a2){
            printf("success!!  %d\n",j);
            break;
        }
        else{
            printf("n0!!   %d\n",j);
        }
    }
 
    printf("%d",i*12379+j);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
double ff(double a,double b){
    double c=pow(a,b-1);
    return c/exp(a);
}
 
int main()
{
    int i=0;
    while(1){
 
        double v17=0.0;
        double v18=0.0;
        double v19=(double)i+1.0;
        do{
            v17=v17+ff(v18,v19)*0.001;
            v18=v18+0.001;
        }while(v18<=100.0);
        double v20=(int)(v17+v17+3.0);
        if(v20==0x13B03){
            printf("success!!  %d\n",i);
            break;
        }
        else{
            printf("n0!!   %d\n",i);
        }
        i++;
    }
    int j=0;

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2021-4-8 12:46 被N1ptune编辑 ,原因:
上传的附件:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 50161
活跃值: (20625)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
建议将CrackMe 论坛本地上传一份,谢谢!
2021-4-8 11:29
0
雪    币: 1350
活跃值: (3094)
能力值: ( LV5,RANK:74 )
在线值:
发帖
回帖
粉丝
3
kanxue 建议将CrackMe 论坛本地上传一份,谢谢!
已上传
2021-4-8 12:46
0
游客
登录 | 注册 方可回帖
返回
//