type
status
date
slug
summary
tags
category
icon
password
最近一直在忙自己学校战队招新的事情,这个样本分析已经过去好几天了,一直在拖,今天写一下这个样本分析,这个是自己比赛中没有做出来,也正好学习一下怎么分析样本了
📝 样本分析
附件
逆向分析
64位go语言编写的

主要是利用path_filepath_Walk函数遍历文件路径,然后执行函数a.cap

a.cap指向的就是main_main_func1
main_main_func1函数中有多个
strings_Index
判断,用于过滤某些特定的路径前缀或目录。
主要作用就是过滤掉
/proc
、/boot
、/sys
、/run
等系统目录然后我们就可以在main_main_func1_1中找到main_encrypt_file,这个就是对我们非系统目录下的文件进行加密的

梳理一下main_encrypt_file里面的加密逻辑
主要是椭圆曲线curve25519加密,首先调用curve25519.ScalarBaseMult根据scalar生成公钥dst,scalar是一个随机的32字节(勒索方提供的),然后调用curve25519_ScalarMult生成共享密钥v27.并且在加密后的文件加一个’.xiran’后缀

然后得出的共享密钥v27经过两次SHA256,第一次SHA256作为ChaCha20加密的nonce,第二次SHA256作为ChaCha20加密的key.

在生成chacha20密钥流之后,对要进行加密的文件进行了大小判断.
如果文件大小小于等于0x1400000个字节,就会对整个文件进行加密,如果文件大小大于0x1400000个字节,那么就以0xa00000为一块,只加密前0x100000.


最后将dst和一个不知道啥意思的6字节写在写入文件的末尾

我们可以直接在010editor当中直接读取到dst

然后这个题给了另一个cha文件,里面求的32个字节应该是scaler
打开cha文件之后可以迅速定位到那32个字节验证的地方

首先是先进行了一个验证,这个值最后必须为0xD033A96A

主要的验证就是先经过了一个换表base64加密,之后和明文进行一个异或
这里写了一个python的脚本,只要是利用递归的思想,爆破的是按44个字节,最后验证一下前十个字节和32个字节之后的十个字节相同就是正确的scaler,再经过hash验证之后发现对了

exp
这里有个坑,就是题目中会给你一个公钥,但是那个解出来不对的


🤗 总结归纳
病毒样本是由64位编写,并且没有去除符号表还是比较友好的,主要是第一步写了那个递归脚本写了好久,还是要多接触一些这样的样本分析
📎 参考文章
有关学习或者复现上的问题,欢迎您在底部评论区留言,一起交流~
- Author:5m10v3
- URL:https://5m10v3.top/article/101533f9-4e40-8085-af25-ecd964256e45
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!