第四届“长城杯”网络安全大赛 (初赛)re方向 xiran_encrypto 题解

查看 95|回复 10
作者:syzry   
题目介绍
小涂的电脑不幸中了文件加密勒索病毒,他的一个重要文件被加密了,加密后的文件为 flag.png.xiran。小涂经过排查,在他的电脑中找到了文件加密勒索病毒样本,文件名为 clickme。小涂通过攻击者留下了联系方式联系了攻击者,攻击者表示他不会勒索个人用户,但是他也没有义务帮小涂恢复文件,于是把某一秘密信息做成了挑战发给了小涂,文件名为 cha。攻击者表示,如果你想要恢复你的文件,你必须通过挑战拿到秘密信息,并且合理利用这个秘密信息。如果小涂不能通过挑战,那就只能爆点金币了。
注意:题目中提供的恶意软件样本(clikeme)请勿在生产环境运行,建议使用虚拟机环境中运行,运行前建议保存虚拟机快照,用于保护虚拟机环境,此样本不会收集用户信息,cha 文件无恶意功能,仅有文件加密功能,加密当前目录以及子目录。
附件在这个帖子里有 https://www.52pojie.cn/thread-1962548-1-1.html
工具
ida8.3
思路
简单来说,这道题就是一个加密文件的勒索病毒 clickme 和一个普通ctf题 cha 结合的东西。所以可以分开来看。
在cha 里,仔细找找之后可以发现关键部分是(对函数进行了一些重命名)


2024-09-08_15-16-10.png (20.33 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传



2024-09-08_15-16-18.png (21.61 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传

整个流程就是,先进行hash,确认hash值后进行处理和判断操作,处理前先进行base变换,base表可以在程序中找到,是


2024-09-08_15-16-39.png (5.71 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传

然后把 base 得到的结果和原本数组中模意义下的值进行异或,再与存在程序中的值进行比较。
于是可以写脚本分每3个一组爆破,但由于异或时每一组的base结果会和后面的原本的值进行异或,所以爆破时每一组会影响到后面的值,进行一些判断就可以了。然后因为python效率很慢,用了c++来爆破,几秒就可以出来
然后来看病毒 clickme ,是个用go写的程序,没有去符号表,关键部分是


2024-09-08_13-32-15.png (2.94 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传



2024-09-08_13-32-21.png (10.08 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传



2024-09-08_13-32-49.png (21.51 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传



2024-09-08_13-32-56.png (22.61 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传



2024-09-08_13-33-14.png (51.98 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传



2024-09-08_13-33-24.png (33.55 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传

列一下用到的关键函数,curve25519,sha256,chacha20。curve25519是一种椭圆曲线加密函数,是个非对称加解密函数,sha256就是哈希函数,chacha20是个对称加解密函数。
理一下逻辑,这个程序干的事就是先rand生成32字节的数据,再用公钥进行加密,然后用sha256,sha两次,作为chacha20的初始化参数,然后进行加密。对于大文件,每0xA00000长度的数据,加密0x100000长度。最后在末尾添上被加密后的rand生成的32字节数据,还有6字节的硬编码。
因为从cha 里得到了32字节的数据,放在勒索病毒这里来用,意思就是那个32字节的数据是rand数据加密的私钥。然后写go解密就可以了


2024-09-08_15-33-19.png (344.16 KB, 下载次数: 0)
下载附件
2024-9-25 22:23 上传

代码
cha用到的求32字节数据的脚本(c++):
#include
#include
using namespace std;
char v7[]="APet8BQfu9CRgv+DShw/ETixFUjyGVkzHWl0IXm1JYn2KZo3Lap4Mbq5Ncr6Ods7";
int get_result[]={0xD9, 0x40, 0x6F, 0xCA, 0x3D, 0x8F, 0x53, 0xB1, 0x8B, 0x34, 0x92, 0x8E, 0xF7, 0x19, 0x94, 0x61, 0x68, 0x71, 0x55, 0xB6, 0xCE, 0x5B, 0x71, 0x1A, 0x79, 0x42, 0x9D, 0x02, 0x93, 0x38, 0xAD, 0x1F, 0xD3, 0x24, 0x48, 0xFF, 0x21, 0xA2, 0x24, 0xBE, 0x95, 0x3A, 0xC1, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00};
int result[48],re_l;
int ans[48],an_l;
void pb(int a){
    result[re_l++]=a;
}
int b64_enc(int length){
    re_l=0;
    int ll=4*((length+2)/3);
    for (int i = 0; i > 2]);
        if (length > 4)]);
            if (length > 6)]);
                pb(v7[ans[i + 2] & 0x3F]);
            }
        }
    }
    return ll;
}
int real_l,trans_l,times_l;
int mn(int a,int b){
    return a=32){
            // printf("%x ",ans[i%32]^result);
            if(i>=43){
                puts("GET-----");
        for(int j=0;j1){
                for(int j=0;j2){
                        for(int k=0;k

下载次数, 下载附件

Drebber   


zlzx01 发表于 2024-9-26 08:51
厉害!!     本人电脑中了勒索病毒,后缀zzla,好几年了到现在都没法解密,请问高手现在是否有办法解密?

这个是做的题目,给了充足的信息保证可以解出来,而你中的那种正经的勒索病毒很可能会因为缺少关键信息导致解密失败,这个运气成分就比较大了
zlzx01   

厉害!!     本人电脑中了勒索病毒,后缀zzla,好几年了到现在都没法解密,请问高手现在是否有办法解密?
fengyuan2210   

厉害,学习了。。。
ytianfeng1983   

高手,膜拜了!!!
XiangMaster   

厉害了多学习学习
sunshinezero   

太厉害了 感谢分享
zk1126853389   

厉害,学习了
HuskyHappy   

太厉害了 感谢分享 学习学习
pjyanzi   

厉害了,感谢分享,又学习到了。
您需要登录后才可以回帖 登录 | 立即注册