WinApp ClickOnce Deployment ขออนุญาตถามผู้เชียวชาญขอรับกระผม
1. ฝั่ง Client ครับ (มันจะตรรจสอบตอนที่เปิดเพื่อหาเวอร์ชั่นใหม่)
2. อันนี้หายากหน่อยนะครับ น่าจะอยู่ใน Program Files หรือเปล่า (ไม่เกี่ยวกับ Server ครับ)
3. มันจะตรวจสอบหาเวอร์ชั่นใหม่ไม่เจอครับ
4. เห็นครับ ฉะนั้นควรจะเข้ารหัสผ่านพวก Password ไว้ครับ
5. เท่าที่เคยติดตั้ง น่าจะต้องให้ User ติดตั้งเองด้วยครับ
6. โปรแกรมถูกใช้งานที่ Client ครับ ยกเว้น มีการเชื่อมต่อกับ Database
Date :
2016-06-29 09:14:39
By :
mr.win
ขอตอบข้อ 2 แล้วกันครับ
เพราะเคยเห็นโปรแกรมประเภทนี้
โปรแกรมจะอยู่ใน
C:\Users\ User Name \AppData\Local\Apps\2.0
Date :
2016-06-29 09:22:00
By :
fonfire
สอบถามเพิ่มเติมจาก ข้่อ 4 ครับ
ขอแนวทางนิดนึงนะครับ
connectionstring ที่เราเขียนจะมี IP USER PASS DBNAME ถ้าเราเข้ารหัส แล้วมันจะไปถอดรหัสตรงไหนอะครับ
หรือว่ามีวิธีที่ดีกว่าการเข้ารหัสไหมครับ
แล้วการทำ Clickonce นั้นทำให้หาตัว exe ยากขึ้น พอช่วยได้ในระดับนึงไหมครับ
Date :
2016-06-29 10:02:32
By :
sahara_z
นำ function นี้ไปใช้เลยครับ โดยมันจะมี Key ที่เมื่อเพิ่มเข้าไป การเข้ารหัสและถอดจะไม่เหมือนกัน ไม่สามารถถอดได้ ถ้าไม่รู้ Key ซึ่งเมื่อได้รหัสผ่าน นั้นแล้ว ก็เอารหัสไปใช้ ก่อนใช้ก็ถอดรหัสก่อนครับ
Code (C#)
static readonly string PasswordHash = "P@@Sw0rd";
static readonly string SaltKey = "S@LT&KEY";
static readonly string VIKey = "@1B2c3D4e5F6g7H8";
Code (C#)
public static string Encrypt(string plainText)
{
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
byte[] keyBytes = new Rfc2898DeriveBytes(PasswordHash, Encoding.ASCII.GetBytes(SaltKey)).GetBytes(256 / 8);
var symmetricKey = new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.Zeros };
var encryptor = symmetricKey.CreateEncryptor(keyBytes, Encoding.ASCII.GetBytes(VIKey));
byte[] cipherTextBytes;
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
cipherTextBytes = memoryStream.ToArray();
cryptoStream.Close();
}
memoryStream.Close();
}
return Convert.ToBase64String(cipherTextBytes);
}
Code (C#)
public static string Decrypt(string encryptedText)
{
byte[] cipherTextBytes = Convert.FromBase64String(encryptedText);
byte[] keyBytes = new Rfc2898DeriveBytes(PasswordHash, Encoding.ASCII.GetBytes(SaltKey)).GetBytes(256 / 8);
var symmetricKey = new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.None };
var decryptor = symmetricKey.CreateDecryptor(keyBytes, Encoding.ASCII.GetBytes(VIKey));
var memoryStream = new MemoryStream(cipherTextBytes);
var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
byte[] plainTextBytes = new byte[cipherTextBytes.Length];
int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
memoryStream.Close();
cryptoStream.Close();
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount).TrimEnd("\0".ToCharArray());
}
Date :
2016-06-29 12:30:20
By :
mr.win
ขอบคุณมากครับผม ไม่ทราบว่า อันนี้มีเป็น vb.net ไหมครับท่าน
Date :
2016-06-29 12:46:39
By :
sahara_z
สมมุตถ้ามัน Decompiler ออกมาได้ ถึงแม้เราจะเข้ารหัส Connection string ไว้ แต่ถ้ามันใช้ตัว Project ของเรา มาจัดการ Drop Update DB เลย แบบนี้มันก็เท่ากับว่า เราเข้ารหัสไปเท่านั้นหรือเปล่าครับ
Date :
2016-06-29 13:19:11
By :
sahara_z
มันสามารถป้องกันได้ในระดับหนึ่ง เท่านั้นครับ
Date :
2016-06-29 13:20:50
By :
mr.win
ถ้าเราป้องกัน Decompiler โดยตรงไปเลยดีกว่าไหมครับ หรือว่าจะมีวิธีไหนบ้างที่เปลี่ยนให้ ตัวซอฟต์แวร์มัน Process ที่ Server โดยที่ User ได้มาแค่ Shotcut อะไรแบบนั้นอะครับ
Date :
2016-06-29 13:20:56
By :
sahara_z
เรียกผ่าน Webservice
Date :
2016-06-29 15:48:26
By :
taotechnocom
ยังไงหรอครับท่าน
Date :
2016-06-29 16:02:41
By :
sahara_z
ก็เวลาเขียน Insert Update Delete ก็ทำผ่าน WebService ครับ เพราะถ้าเขาจะ Decompiler Application เราได้เขาก็ไม่รู้อยู่ดีว่าเราเขียน ผ่าน User Pass Database Schemas StoreProc อะไรประมาณนี้อะครับ เพราะเราเรียกผ่าน WebService แต่ป้องกันได้ระดับหนึ่งเช่นกัน ถ้าเขาเก่งที่จะ Hack ผ่าน WebService ได้ แต่ก็ยังดีกว่าเขียนติดต่อเข้ากับ Database ตรงๆ ครับ
Date :
2016-06-29 16:30:00
By :
taotechnocom
อ๋อ พอจะเข้าใจแล้วครับ
แล้วตัว ClickOnce Deployment นี้ผมลองไล่ตามดูว่ามันดาวน์โหลดไปไว้ตรงไหน ก็ยังไม่เจอนะครับ ไม่แน่ใจว่าตัว exe จริงๆมัน Process ตรงไหนกันแน่ แต่พวก dll มันถูกดาวน์โหลดมาเก็บไว้ในเครื่องครับ แต่เป็นโฟเดอร์ละตัวเลยชื่อมันจะแปลกๆหน่อย
ไม่ทราบท่านมีความเห้นอย่างไรบ้างครับ
Date :
2016-06-29 16:36:14
By :
sahara_z
ใน Comment ที่ 2 ครับ เขาตอบไว้แล้ว ลองไล่หาดูใน Folder + SubFolder ดูครับ มีตัว exe อยู่ครับ
C:\Users\username\AppData\Local\Apps\2.0
Date :
2016-06-29 16:56:15
By :
taotechnocom
Load balance : Server 02