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

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

2021-4-7 20:15
8822

CrackMe

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
first=[0x8,0x4d,0x59,0x6,0x73,0x2,0x40]
key='9903819'
flag=''
for i in range(len(first)):
    flag+=chr(ord(key[i])^first[i])
 
 
second=[0xe0,0x95,0xba,0x60,0xc9,0x66,0x2a,0x24,0xb2,0x36]
key_pre=[0xb2,0xd6,0x8e,0x3f,0xaa,0x14,0x53,0x54,0xc6,0x6]
 
for i in range(len(second)):
    flag+=chr(second[i]^key_pre[i])
print(flag)
###1ti5K3yRC4_crypt0

RE(忘了名字了,第一道题)

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


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

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