delightman
06.02.2013, 18:01
Пользователям Джеки и Voolkan, таким же пострадавшим от зловреда, благодарность за расшифровку исходного текста вируса.
Пользователю Джеки огромная благодарность за написание скрипта расшифровки файлов.
так же инструкция в архиве для оффлайна: 402404
если кто-то что-то захочет дополнить - пишите.
Если кто-то может оформить данный скрипт в более удобную утилиту - добро пожаловать.
СДЕЛАЙТЕ КОПИЮ ЗАШИФРОВАННЫХ ФАЙЛОВ. ОБЯЗАТЕЛЬНО. ПРИ МАЛЕЙШЕЙ ОШИБКЕ ВСЕ БУДЕТ ПОТЕРЯНО. ЭТО НИ РАЗУ НЕ ШУТКА. ВСЕ ДЕЙСТВИЯ НА ВАШ СТРАХ И РИСК – ПОСЛЕДСТВИЯ НИЖЕУКАЗАННЫХ ДЕЙСТВИЙ МОГУТ БЫТЬ НЕОБРАТИМЫ.
Для запуска на зашифрованном компьютере должен быть установлен PowerShell. Если это Windows 7, обычно он там уже есть. Для Windows XP можно скачать здесь (http://www.microsoft.com/en-us/download/details.aspx?id=7217). Также должен быть разрешён запуск скриптов. Чтобы разрешить запуск скриптов – надо запустить «пуск – все программы – стандартные – windows powershell - Windows PowerShell ISE» и выполнить команду: set-executionpolicy bypass
Далее: копируете код который в конце и вставляете в пустой файл в блокноте. Сохраняете. Потом переименовываете - расширение должно быть "ps1". И открываете в powershell.
Или копируете прямо в powershell, кому как удобнее.
Если расшифровку производите на том же компьютере, на котором все зашифровалось – просто запускаете выполнение скрипта и ждете (если документов много – ждете долго). Хотя я бы посоветовал в любом случае сделать действия, как если расшифровка будет на другом компьютере.
Если расшифровку производите на другом компьютере (или виртуальной машине), куда скопировали зашифрованные данные – надо предварительно НА ТОМ КОМПЬЮТЕРЕ, ЧТО ПОСТРАДАЛ, сделать следующее:
Скопировать нижеуказанный код в powershell или открыть сделанный вами файл .ps1,
стать левой кнопкой мыши в начало строки 3, как указано на рисунке:
402387
И нажать F9
Станет вот так:
402391
Потом запустить скрипт, выполнение остановится как раз на строке 3, надо подвести курсор мыши на переменную $ek во второй строке, вылезет ее текущее значение, например:
402392
И ОЧЕНЬ внимательно его записать.
Потом нажать SHIFT+F5 и после этого CTRL+SHIFT+F9.
Теперь идем на тот компьютер (виртуальную машину), где будем все расшифровывать, запускаем powershell, открываем наш код и первую строку, которая имеет вид
$ek=(get-wmiobject Win32_ComputerSystemProduct).UUID;
делаем следующего вида:
$ek="ED2D9475-E11D-E341-A5FF-511AE59201E4";
ЭТО ПРИМЕР, ЦИФРЫ ДОЛЖНЫ БЫТЬ ДРУГИЕ!!!!!!!
И запускаете скрипт, ждете.
собственно, сам код:
$ek=(get-wmiobject Win32_ComputerSystemProduct).UUID;
$bytes=[system.Text.Encoding]::Unicode.GetBytes($ek); # UID компьютера
$basekey="BgIAAACkAABSU0ExAAQAAAEAAQDTYUZyVxhh48R/1Y/H5NdEgi49DIHtJTXm+mcVHnvUpYiNEnxpFj/UJXVDg0F2rfWFpnyqHJ0dbyjsOCwMX0eRyp2VxrWFzOHIM6Qpe vxGF9izXeNq7+OzBuo11V/7EmvQBW2sfuNEOP7zdUw0DFKoK+X2Taewaki1LGYhpshjqg==";
$rsa = New-Object System.Security.Cryptography.RSACryptoServiceProvi der;
$rsa.ImportCspBlob([system.Convert]::FromBase64String($basekey)); # импорт объекта с данными ключа
$enckey=[system.Convert]::ToBase64String($rsa.Encrypt($bytes, $false)); # шифрование UID компьютера RSA
function Decrypt-File($item, $Passphrase){
$salt="BMCODE hack your system";
$init="BMCODE INIT";
$r = new-Object System.Security.Cryptography.RijndaelManaged;
$pass = [Text.Encoding]::UTF8.GetBytes($Passphrase);
$salt = [Text.Encoding]::UTF8.GetBytes($salt);
$r.Key = (new-Object Security.Cryptography.PasswordDeriveBytes $pass, $salt, "SHA1", 5).GetBytes(32);
$r.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($init) )[0..15];
$r.Padding="Zeros";
$r.Mode="CBC";
$c = $r.CreateDecryptor();
$ms = new-Object IO.MemoryStream;
$cs = new-Object Security.Cryptography.CryptoStream $ms,$c,"Write";
$cs.Write($item, 0,$item.Length);
$cs.Close();
$ms.Close();
$r.Clear();
return $ms.ToArray();
}
$disks=Get-PSDrive |Where-Object {$_.Free -gt 50000}|Sort-Object -Descending;
foreach($disk in $disks){
gci $disk.root -Recurse -Include "*.BMCODE" | % {
try {
$file=[io.file]::Open($_, 'Open', 'ReadWrite');
if ($file.Length -lt "40960"){$size=$file.Length}
else{$size="40960"}[byte[]]$buff = new-object byte[] $size;
$ToEncrypt = $file.Read($buff, 0, $buff.Length);
$file.Position='0';
$Encrypted=Decrypt-File $buff $ek;
$file.Write($Encrypted, 0, $Encrypted.Length);
$file.Close();
$newname=$_.name -replace '\.BMCODE','';
rename-item -Path $_.FullName -NewName $newname -Force;
}
catch{}
}
}
Пользователю Джеки огромная благодарность за написание скрипта расшифровки файлов.
так же инструкция в архиве для оффлайна: 402404
если кто-то что-то захочет дополнить - пишите.
Если кто-то может оформить данный скрипт в более удобную утилиту - добро пожаловать.
СДЕЛАЙТЕ КОПИЮ ЗАШИФРОВАННЫХ ФАЙЛОВ. ОБЯЗАТЕЛЬНО. ПРИ МАЛЕЙШЕЙ ОШИБКЕ ВСЕ БУДЕТ ПОТЕРЯНО. ЭТО НИ РАЗУ НЕ ШУТКА. ВСЕ ДЕЙСТВИЯ НА ВАШ СТРАХ И РИСК – ПОСЛЕДСТВИЯ НИЖЕУКАЗАННЫХ ДЕЙСТВИЙ МОГУТ БЫТЬ НЕОБРАТИМЫ.
Для запуска на зашифрованном компьютере должен быть установлен PowerShell. Если это Windows 7, обычно он там уже есть. Для Windows XP можно скачать здесь (http://www.microsoft.com/en-us/download/details.aspx?id=7217). Также должен быть разрешён запуск скриптов. Чтобы разрешить запуск скриптов – надо запустить «пуск – все программы – стандартные – windows powershell - Windows PowerShell ISE» и выполнить команду: set-executionpolicy bypass
Далее: копируете код который в конце и вставляете в пустой файл в блокноте. Сохраняете. Потом переименовываете - расширение должно быть "ps1". И открываете в powershell.
Или копируете прямо в powershell, кому как удобнее.
Если расшифровку производите на том же компьютере, на котором все зашифровалось – просто запускаете выполнение скрипта и ждете (если документов много – ждете долго). Хотя я бы посоветовал в любом случае сделать действия, как если расшифровка будет на другом компьютере.
Если расшифровку производите на другом компьютере (или виртуальной машине), куда скопировали зашифрованные данные – надо предварительно НА ТОМ КОМПЬЮТЕРЕ, ЧТО ПОСТРАДАЛ, сделать следующее:
Скопировать нижеуказанный код в powershell или открыть сделанный вами файл .ps1,
стать левой кнопкой мыши в начало строки 3, как указано на рисунке:
402387
И нажать F9
Станет вот так:
402391
Потом запустить скрипт, выполнение остановится как раз на строке 3, надо подвести курсор мыши на переменную $ek во второй строке, вылезет ее текущее значение, например:
402392
И ОЧЕНЬ внимательно его записать.
Потом нажать SHIFT+F5 и после этого CTRL+SHIFT+F9.
Теперь идем на тот компьютер (виртуальную машину), где будем все расшифровывать, запускаем powershell, открываем наш код и первую строку, которая имеет вид
$ek=(get-wmiobject Win32_ComputerSystemProduct).UUID;
делаем следующего вида:
$ek="ED2D9475-E11D-E341-A5FF-511AE59201E4";
ЭТО ПРИМЕР, ЦИФРЫ ДОЛЖНЫ БЫТЬ ДРУГИЕ!!!!!!!
И запускаете скрипт, ждете.
собственно, сам код:
$ek=(get-wmiobject Win32_ComputerSystemProduct).UUID;
$bytes=[system.Text.Encoding]::Unicode.GetBytes($ek); # UID компьютера
$basekey="BgIAAACkAABSU0ExAAQAAAEAAQDTYUZyVxhh48R/1Y/H5NdEgi49DIHtJTXm+mcVHnvUpYiNEnxpFj/UJXVDg0F2rfWFpnyqHJ0dbyjsOCwMX0eRyp2VxrWFzOHIM6Qpe vxGF9izXeNq7+OzBuo11V/7EmvQBW2sfuNEOP7zdUw0DFKoK+X2Taewaki1LGYhpshjqg==";
$rsa = New-Object System.Security.Cryptography.RSACryptoServiceProvi der;
$rsa.ImportCspBlob([system.Convert]::FromBase64String($basekey)); # импорт объекта с данными ключа
$enckey=[system.Convert]::ToBase64String($rsa.Encrypt($bytes, $false)); # шифрование UID компьютера RSA
function Decrypt-File($item, $Passphrase){
$salt="BMCODE hack your system";
$init="BMCODE INIT";
$r = new-Object System.Security.Cryptography.RijndaelManaged;
$pass = [Text.Encoding]::UTF8.GetBytes($Passphrase);
$salt = [Text.Encoding]::UTF8.GetBytes($salt);
$r.Key = (new-Object Security.Cryptography.PasswordDeriveBytes $pass, $salt, "SHA1", 5).GetBytes(32);
$r.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($init) )[0..15];
$r.Padding="Zeros";
$r.Mode="CBC";
$c = $r.CreateDecryptor();
$ms = new-Object IO.MemoryStream;
$cs = new-Object Security.Cryptography.CryptoStream $ms,$c,"Write";
$cs.Write($item, 0,$item.Length);
$cs.Close();
$ms.Close();
$r.Clear();
return $ms.ToArray();
}
$disks=Get-PSDrive |Where-Object {$_.Free -gt 50000}|Sort-Object -Descending;
foreach($disk in $disks){
gci $disk.root -Recurse -Include "*.BMCODE" | % {
try {
$file=[io.file]::Open($_, 'Open', 'ReadWrite');
if ($file.Length -lt "40960"){$size=$file.Length}
else{$size="40960"}[byte[]]$buff = new-object byte[] $size;
$ToEncrypt = $file.Read($buff, 0, $buff.Length);
$file.Position='0';
$Encrypted=Decrypt-File $buff $ek;
$file.Write($Encrypted, 0, $Encrypted.Length);
$file.Close();
$newname=$_.name -replace '\.BMCODE','';
rename-item -Path $_.FullName -NewName $newname -Force;
}
catch{}
}
}