11/10/2016

Phân tích code và keygen chương trình viết bằng VB.NET (VS.NET) Công việc crack thường âm thầm và lặng lẽ, thất bại thì uất ức nhưng không bộc bạch tỏ bày, thành công thì thường sẻ chia, đúng theo nguyên lý niềm vui san sẻ sẽ được nhân đôi. Có thể lúc bạn đang say giấc thì chính tôi lại một mình bên chiếc máy tính mày mò lạch cạch để khám phá những bí ẩn đằng sau ổ khoá active, đơn giản là nhà sản xuất làm ra ổ khoá và chúng ta là người phải tìm ra chìa khoá. Vừa rồi mấy cụ bên CIN1TEAM có nhã ý y/c viết vài bài về XXX nhưng không được đụng chạm đến hàng “made in vietnam”, thiết nghĩ trước giờ mình chưa mò đến cái hàng nhập ngoại nên cũng lúng túng, thôi thì mình làm cái Vietnam simple để đơn giản. I. Việc đầu tiên là tìm address kiểm tra mã số nhập vào. Hàm kiểm tra của em nó đây: Private Shared Function kiemtrabanquyen(ByVal string_1 As String, ByVal string_2 As String) As Boolean 1. Dim num As Long = 0 2. Dim num2 As Integer = (string_1.Length - 1) 3. Dim i As Integer = 0 4. Do While (i <= num2) 5. If (((i Mod 2) = 0) Or (Conversions.ToDouble(string_1.Substring(i, 1)) = 0)) Then 6. num = (num + Conversions.ToInteger(string_1.Substring(i, 1))) 7. Else 8. num = (num * Conversions.ToInteger(string_1.Substring(i, 1))) 9. End If 10. i += 1 11. Loop 12. Dim str As String = (Conversions.ToLong(string_2) - num).ToString 13. Dim num7 As Integer = Conversions.ToInteger(str.Substring(0, 1)) 14. Dim startIndex As Integer = 1 15. If (((num7 = 1) Or (num7 = 4)) Or (num7 = 7)) Then 16. startIndex = 1 17. End If 18. If (((num7 = 2) Or (num7 = 5)) Or (num7 = 8)) Then 19. startIndex = 2 20. End If 21. If (((num7 = 3) Or (num7 = 6)) Or (num7 = 9)) Then 22. startIndex = 3 23. End If 24. str = str.Substring(startIndex, 7) 25. If (str.Substring(0, 2) <> str.Substring(5, 2)) Then 26. Return False // =>Kết quả sai rồi. 27. End If 28. Return (str.Substring(0, 2) = "11") End Function Tổng cộng 28 dòng II. Phân tích code: Private Shared Function kiemtrabanquyen(ByVal string_1 As String, ByVal string_2 As String) As Boolean // string_1 là mã số kiểm tra (tự phát sinh), string_2 là mã bản quyền được nhập vào(do nhà cung cấp cấp cho bạn) 1. Dim num As Long = 0 //Khởi tạo biến số num có giá trị = 0 2. Dim num2 As Integer = (string_1.Length - 1) //Khởi tạo biến số num2 có giá trị = chiều dài của mã số kiểm tra – 1 3. Dim i As Integer = 0 //Khởi tạo biến số i có giá trị = 0 4. Do While (i <= num2) //Vòng lặp, điều kiện i<= num2 5. If (((i Mod 2) = 0) Or (Conversions.ToDouble(string_1.Substring(i, 1)) = 0)) Then //Nếu số dư của phép chia: i/2 = 0 hoặc giá trị thứ i của dãy số string_1 = 0 thì 6. num = (num + Conversions.ToInteger(string_1.Substring(i, 1))) //num = num + số thứ i của dãy số string_1 //Như vậy nếu ký tự ở vị trí chẳn thì num sẽ được cộng dồn thêm giá trị thứ i //còn nếu giá trị thứ i = 0 thì không làm thay đổi biến num 7. Else Ngược lại nếu không thoả mã điều kiện trên thì: 8. num = (num * Conversions.ToInteger(string_1.Substring(i, 1))) //num = num nhân với số thứ i 9. End If //kết thúc điều kiện 10. i += 1 //Giá trị i được tăng thêm 1 11. Loop //kết thúc vòng lặp 12. Dim str As String = (Conversions.ToLong(string_2) - num).ToString //Khởi tạo biến chuỗi str có giá trị = con số string_2 - num 13. Dim num7 As Integer = Conversions.ToInteger(str.Substring(0, 1)) //Khởi tạo biến số num7 có giá trị bằng giá trị ở vị trí đầu tiên của chuỗi str 14. Dim startIndex As Integer = 1 //Khởi tạo biến số startIndex có gia trị = 1 15. If (((num7 = 1) Or (num7 = 4)) Or (num7 = 7)) Then //Nếu num7 = một trong các con số 1 hoặc 4 hoặc 7 thì 16. startIndex = 1 17. End If 18. If (((num7 = 2) Or (num7 = 5)) Or (num7 = 8)) Then //Nếu num7 = một trong các con số 2 hoặc 5 hoặc 8 thì 19. startIndex = 2 20. End If 21. If (((num7 = 3) Or (num7 = 6)) Or (num7 = 9)) Then //Nếu num7 = một trong các con số 3 hoặc 6 hoặc 9 thì 22. startIndex = 3 23. End If 24. str = str.Substring(startIndex, 7) //Chuỗi str = lấy chuỗi str từ vị trí startIndex, lấy 7 ký tự 25. If (str.Substring(0, 2) <> str.Substring(5, 2)) Then //Nếu 2 ký tự từ vị trí đầu tiên khác 2 ký tự ở vị trí thứ 5 thì 26. Return False // =>Kết quả sai rồi. 27. End If 28. Return (str.Substring(0, 2) = "11") //Nếu 2 ký tự đầu là 11 thì cho kết quả đúng, ngược lại chưa đúng. End Function III. Lấy ví dụ chạy thử: string_1 = “1234567890”, length = 10 string_1 1 2 3 4 5 6 7 8 9 0 Vị trí Ký tự 0 1 2 3 4 5 6 7 8 9 string_2 = “9876543210” => kiemtrabanquyen(“1234567890”, “9876543210”) 1. num = 0 2. num2 = 10-1 = 9 3. i = 0 4. Do While (i <= num2) từ 0 đến 9 (lặp 10 vòng) 5. If (((i Mod 2) = 0) Or (Conversions.ToDouble(string_1.Substring(i, 1)) = 0)) Then 6. num = (num + Conversions.ToInteger(string_1.Substring(i, 1))) 7. Else 8. num = (num * Conversions.ToInteger(string_1.Substring(i, 1))) 9. End If 10. i += 1 11. Loop 4.1 Lần 1 thì i= 0, thoả mãn điều kiện số dư 0/2 = 0 nên num = num + ký tự thứ 0 = 0+1=1 4.2 Lần 2thì i=1, num =num* ký tự thứ 1 = 1*2 = 2 4.3 Lần 3 thì i= 2, thoả mãn điều kiện số dư 0/2 = 0 nên num = num + ký tự thứ 2 = 2+3=5 .... 4.10 lần 10 thì i= 9, Vì ký tự thứ 9 thoả mãn điều kiện số dư 0/2 = 0 nên num không thay đổi, num = 1265 12. str = chuỗi của 9876543210 – 1265 = “9876541945” 13. num7 = 9 14. startIndex = 1 15. If (((num7 = 1) Or (num7 = 4)) Or (num7 = 7)) Then 16. startIndex = 1 17. End If 18. If (((num7 = 2) Or (num7 = 5)) Or (num7 = 8)) Then 19. startIndex = 2 20. End If 21. If (((num7 = 3) Or (num7 = 6)) Or (num7 = 9)) Then 22. startIndex = 3 Thoả mãn điều kiện này 23. End If => Đến lúc này startIndex = 3 24. str = str.Substring(3, 7) = “9876541945”. Substring(3, 7) = “6541945” 25. If (str.Substring(0, 2) <> str.Substring(5, 2)) Then str.Substring(0, 2) =”65” str.Substring(5, 2) =”45” 26. Return False // =>Kết quả sai rồi, trả kết quả ngay thời điểm này. 27. End If 28. Return (str.Substring(0, 2) = "11") IV. Tiến hành keygen: VD: giải một phương trình đơn giản: a + x =b =>x = b-a Vậy ta phải bắt đầu từ đâu? Giả sử ẩn số có 10 ký tự là “ABCDEFGHIJ” string_2 A B C D E F G H I J Vị trí Ký tự 0 1 2 3 4 5 6 7 8 9 Theo phương trình trên thì ta phải lội ngược dòng để tìm ẩn số. 1. Tại dòng 28: str.Substring(0, 2) = “11”, vậy là đã hình thành được 2 ký tự là “11” Phác thảo lần 1 ta được: string_2 1 1 C D E F G H I J Vị trí Ký tự 0 1 2 3 4 5 6 7 8 9 2. Tại dòng 25: str.Substring(0, 2) = str.Substring(5, 2), như vậy ký tự thứ 0 và thứ 1 phải bằng ký tự thứ 5 và thứ 6 Phác thảo lần 2 ta được 4/10 ký tự: string_2 1 1 C D E 1 1 H I J Vị trí Ký tự 0 1 2 3 4 5 6 7 8 9 3. Phân tích trong các module tiếp theo được biết: str.Substring(2, 3) = số ngày tối đa được sử dụng Vậy ta cho 3 con số này là “999” cho nó đẹp. Phác thảo lần 3 ta được 7/10 ký tự: string_2 1 1 9 9 9 1 1 H I J Vị trí Ký tự 0 1 2 3 4 5 6 7 8 9 4. Ở lần chạy thử ở trên, ta cho ký tự đầu tiên là 9, dòng 22 ta có startIndex = 3, và dòng 24 cho kết quả là 7 ký tự cuối Vậy ta phải chỉnh lại chuỗi string_2 như sau: string_2 9 B C 1 1 9 9 9 1 1 Vị trí Ký tự 0 1 2 3 4 5 6 7 8 9 Vậy là chuỗi được hình thành 8/10 ký tự, hai ký tự còn lại không có hàm nào kiểm tra, ta cho giá trị là random. 5. Xem lại dòng 12: str = string_2 – num num ta có rồi, như ví dụ trên, nếu string_1 = “1234567890” thì khi kết thúc vòng lặp ở dòng 11 ta có num = 1265 Như vậy chuỗi string_2 ta mới hình thành chỉ là chuỗi str Str 9 B C 1 1 9 9 9 1 1 Vị trí Ký tự 0 1 2 3 4 5 6 7 8 9 Tiến hành tìm chuỗi string_2 thực sự: str = string_2 – num => string_2 = str+num =>string_2 = 9BC1199911 +1265 Đến đây dãy số bản quyền đã hoàn toàn hình thành. 6. Từ dòng 15 đến dòng 23, kiểm tra ký tự đầu tiên có các điều kiện khảo sát từ 1 đến 9 (không có điều kiện là số 0) Vậy ký tự đầu tiên là ranrom(Từ 1 đến 9). V. Viết code keygen: Imports Microsoft.VisualBasic.Strings Imports Microsoft.VisualBasic.CompilerServices Public Shared Function TAOKEY(ByVal string_1 As String) As String Dim num As Integer = 0 Dim bq As String = "1199911" ‘Giá trị kiểm tra cần thiết Dim num2 As Integer = (string_1.Length - 1) Dim i As Integer = 0 Do While (i <= num2) If (((i Mod 2) = 0) Or (Conversions.ToDouble(string_1.Substring(i, 1)) = 0)) Then num = (num + Conversions.ToInteger(string_1.Substring(i, 1))) Else num = (num * Conversions.ToInteger(string_1.Substring(i, 1))) End If i += 1 Loop Dim random As New Random Dim x1 As String = random.Next(100, 900).ToString Dim x2 As Integer = (InStr("123456789", x1.Substring(0, 1)) + 2) Mod 3 Dim x3 As String = (x1.Substring(0, 1) & x1.Substring(1, x2) & bq & Right(x1, 2 - x2)) Return Format(Val(x3) + num, "0000000000") End Function C# (dùng google translate để dịch nên ko biết lỗi phải thế nào, tự chỉnh code nhé) using Microsoft.VisualBasic; using Microsoft.VisualBasic.CompilerServices; public static string TAOKEY(string string_1) { int num = 0; string bq = “1199911”; int num2 = string_1.Length – 1; for (int i = 0; i <= num2; i++) { if (((i % 2) == 0) | (Conversions.ToDouble(string_1.Substring(i, 1)) == 0.0)) { num += Conversions.ToInteger(string_1.Substring(i, 1)); } else { num *= Conversions.ToInteger(string_1.Substring(i, 1)); } } Random random = new Random(); string x1 = random.Next(100, 900).ToString(); int x2 = (Strings.InStr(“123456789”, x1.Substring(0, 1), CompareMethod.Binary) + 2) % 3; return Strings.Format(Conversion.Val(x1.Substring(0, 1) + x1.Substring(1, x2) + bq + Strings.Right(x1, 2 – x2)) + num, “0000000000”); } Vì kiến thức có hạn, rất mong nhận được nhiều ý kiến đóng góp của các bạn.

 Công việc crack thường âm thầm và lặng lẽ, thất bại thì uất ức nhưng không bộc bạch tỏ bày, thành công thì thường sẻ chia, đúng theo nguyên lý niềm vui san sẻ sẽ được nhân đôi. Có thể lúc bạn đang say giấc thì chính tôi lại một mình bên chiếc máy tính mày mò lạch cạch để khám phá những bí ẩn đằng sau ổ khoá active, đơn giản là nhà sản xuất làm ra ổ khoá và chúng ta là người phải tìm ra chìa khoá. Vừa rồi mấy cụ bên CIN1TEAM có nhã ý y/c viết vài bài về XXX nhưng không được đụng chạm đến hàng “made in vietnam”, thiết nghĩ trước giờ mình chưa mò đến cái hàng nhập ngoại nên cũng lúng túng, thôi thì mình làm cái Vietnam simple để đơn giản.
I. Việc đầu tiên là tìm address kiểm tra mã số nhập vào. Hàm kiểm tra của em nó đây:

Private Shared Function kiemtrabanquyen(ByVal string_1 As String, ByVal string_2 As String) As Boolean
1.    Dim num As Long = 0     
2.    Dim num2 As Integer = (string_1.Length - 1)   
3.    Dim i As Integer = 0    
4.    Do While (i <= num2)    
5.        If (((i Mod 2) = 0) Or (Conversions.ToDouble(string_1.Substring(i, 1)) = 0)) Then
6.            num = (num + Conversions.ToInteger(string_1.Substring(i, 1)))
7.        Else                             
8.             num = (num * Conversions.ToInteger(string_1.Substring(i, 1)))
9.        End If      
10.        i += 1     
11.    Loop   
12.    Dim str As String = (Conversions.ToLong(string_2) - num).ToString
13.    Dim num7 As Integer = Conversions.ToInteger(str.Substring(0, 1))
14.    Dim startIndex As Integer = 1
15.    If (((num7 = 1) Or (num7 = 4)) Or (num7 = 7)) Then
16.        startIndex = 1
17.    End If
18.    If (((num7 = 2) Or (num7 = 5)) Or (num7 = 8)) Then
19.        startIndex = 2
20.    End If
21.    If (((num7 = 3) Or (num7 = 6)) Or (num7 = 9)) Then
22.        startIndex = 3
23.    End If
24.    str = str.Substring(startIndex, 7)
25.    If (str.Substring(0, 2) <> str.Substring(5, 2)) Then
26.        Return False // =>Kết quả sai rồi.
27.    End If
28.    Return (str.Substring(0, 2) = "11")
End Function
Tổng cộng 28 dòng

II. Phân tích code:
Private Shared Function kiemtrabanquyen(ByVal string_1 As String, ByVal string_2 As String) As Boolean
// string_1 là mã số kiểm tra (tự phát sinh), string_2 là mã bản quyền được nhập vào(do nhà cung cấp cấp cho bạn)
1.    Dim num As Long = 0     
        //Khởi tạo biến số num có giá trị = 0
2.    Dim num2 As Integer = (string_1.Length - 1)   
        //Khởi tạo biến số num2 có giá trị = chiều dài của mã số kiểm tra – 1
3.    Dim i As Integer = 0    
        //Khởi tạo biến số i có giá trị = 0
4.    Do While (i <= num2)     //Vòng lặp, điều kiện i<= num2
5.        If (((i Mod 2) = 0) Or (Conversions.ToDouble(string_1.Substring(i, 1)) = 0)) Then
                //Nếu số dư của phép chia: i/2 = 0 hoặc giá trị thứ i của dãy số string_1 = 0 thì
6.            num = (num + Conversions.ToInteger(string_1.Substring(i, 1)))
               //num = num + số thứ i của dãy số string_1
                //Như vậy nếu ký tự ở vị trí chẳn thì num sẽ được cộng dồn thêm giá trị thứ i
               //còn nếu giá trị thứ i = 0 thì không làm thay đổi biến num
7.        Else                 Ngược lại nếu không thoả mã điều kiện trên thì:
8.            num = (num * Conversions.ToInteger(string_1.Substring(i, 1)))
               //num = num nhân với số thứ i
9.        End If       //kết thúc điều kiện
10.        i += 1      //Giá trị i được tăng thêm 1
11.    Loop    //kết thúc vòng lặp

12.    Dim str As String = (Conversions.ToLong(string_2) - num).ToString
        //Khởi tạo biến chuỗi str có giá trị = con số string_2 - num
13.    Dim num7 As Integer = Conversions.ToInteger(str.Substring(0, 1))
        //Khởi tạo biến số num7 có giá trị bằng giá trị ở vị trí đầu tiên của chuỗi str
14.    Dim startIndex As Integer = 1
        //Khởi tạo biến số startIndex có gia trị = 1
15.    If (((num7 = 1) Or (num7 = 4)) Or (num7 = 7)) Then
        //Nếu num7 = một trong các con số 1 hoặc 4 hoặc 7 thì
16.        startIndex = 1
17.    End If
18.    If (((num7 = 2) Or (num7 = 5)) Or (num7 = 8)) Then
        //Nếu num7 = một trong các con số 2 hoặc 5 hoặc 8 thì
19.        startIndex = 2
20.    End If
21.    If (((num7 = 3) Or (num7 = 6)) Or (num7 = 9)) Then
        //Nếu num7 = một trong các con số 3 hoặc 6 hoặc 9 thì
22.        startIndex = 3
23.    End If

24.    str = str.Substring(startIndex, 7)
        //Chuỗi str = lấy chuỗi str từ vị trí startIndex, lấy 7 ký tự
25.    If (str.Substring(0, 2) <> str.Substring(5, 2)) Then
        //Nếu 2 ký tự từ vị trí đầu tiên khác 2 ký tự ở vị trí thứ 5 thì
26.        Return False // =>Kết quả sai rồi.
27.    End If
28.    Return (str.Substring(0, 2) = "11")
        //Nếu 2 ký tự đầu là 11 thì cho kết quả đúng, ngược lại chưa đúng.
End Function
III. Lấy ví dụ chạy thử:
string_1 = “1234567890”, length = 10
string_1
1
2
3
4
5
6
7
8
9
0
Vị trí Ký tự
0
1
2
3
4
5
6
7
8
9
string_2 = “9876543210”
=> kiemtrabanquyen(“1234567890”, “9876543210”)
1.    num = 0 
2.    num2 = 10-1 = 9
3.    i = 0   
4.    Do While (i <= num2)     từ 0 đến 9 (lặp 10 vòng)
5.        If (((i Mod 2) = 0) Or (Conversions.ToDouble(string_1.Substring(i, 1)) = 0)) Then
6.            num = (num + Conversions.ToInteger(string_1.Substring(i, 1)))
7.        Else                             
8.             num = (num * Conversions.ToInteger(string_1.Substring(i, 1)))
9.        End If      
10.        i += 1     
11.    Loop    

4.1                   Lần 1 thì i= 0, thoả mãn điều kiện số dư 0/2 = 0 nên num = num + ký tự thứ 0 = 0+1=1
4.2                   Lần 2thì i=1, num =num* ký tự thứ 1  = 1*2 = 2
4.3                   Lần 3 thì i= 2, thoả mãn điều kiện số dư 0/2 = 0 nên num = num + ký tự thứ 2 = 2+3=5
....
4.10    lần 10 thì i= 9, Vì ký tự thứ 9 thoả mãn điều kiện số dư 0/2 = 0 nên num không thay đổi, num = 1265

12.    str  = chuỗi của 9876543210 – 1265 = “9876541945”
13.    num7 = 9
14.    startIndex = 1
15.    If (((num7 = 1) Or (num7 = 4)) Or (num7 = 7)) Then
16.        startIndex = 1
17.    End If
18.    If (((num7 = 2) Or (num7 = 5)) Or (num7 = 8)) Then
19.        startIndex = 2
20.    End If
21.    If (((num7 = 3) Or (num7 = 6)) Or (num7 = 9)) Then
22.        startIndex = 3
        Thoả mãn điều kiện này
23.    End If
=> Đến lúc này startIndex = 3
24.    str = str.Substring(3, 7) = “9876541945”. Substring(3, 7) = “6541945”
25.    If (str.Substring(0, 2) <> str.Substring(5, 2)) Then
                str.Substring(0, 2) =”65”
                str.Substring(5, 2) =”45”
26.        Return False // =>Kết quả sai rồi, trả kết quả ngay thời điểm này.
27.    End If

28.    Return (str.Substring(0, 2) = "11")
IV. Tiến hành keygen:
VD: giải một phương trình đơn giản: a + x =b
=>x = b-a
Vậy ta phải bắt đầu từ đâu?
Giả sử ẩn số có 10 ký tự là “ABCDEFGHIJ”
string_2
A
B
C
D
E
F
G
H
I
J
Vị trí Ký tự
0
1
2
3
4
5
6
7
8
9
Theo phương trình trên thì ta phải lội ngược dòng để tìm ẩn số.
1. Tại dòng 28:     str.Substring(0, 2) = “11”, vậy là đã hình thành được 2 ký tự là “11”
Phác thảo lần 1 ta được:
string_2
1
1
C
D
E
F
G
H
I
J
Vị trí Ký tự
0
1
2
3
4
5
6
7
8
9
2. Tại dòng 25:  str.Substring(0, 2) = str.Substring(5, 2),  như vậy ký tự thứ 0 và thứ 1 phải bằng ký tự thứ 5 và thứ 6
Phác thảo lần 2 ta được 4/10 ký tự:
string_2
1
1
C
D
E
1
1
H
I
J
Vị trí Ký tự
0
1
2
3
4
5
6
7
8
9
3. Phân tích trong các module tiếp theo được biết: str.Substring(2, 3) = số ngày tối đa được sử dụng
Vậy ta cho 3 con số này là “999” cho nó đẹp.
Phác thảo lần 3 ta được 7/10 ký tự:
string_2
1
1
9
9
9
1
1
H
I
J
Vị trí Ký tự
0
1
2
3
4
5
6
7
8
9
4. Ở lần chạy thử ở trên, ta cho ký tự đầu tiên là 9, dòng 22 ta có startIndex = 3, và dòng 24 cho kết quả là 7 ký tự cuối
Vậy ta phải chỉnh lại chuỗi string_2 như sau:
string_2
9
B
C
1
1
9
9
9
1
1
Vị trí Ký tự
0
1
2
3
4
5
6
7
8
9
Vậy là chuỗi được hình thành 8/10 ký tự, hai ký tự còn lại không có hàm nào kiểm tra, ta cho giá trị là random.
5. Xem lại dòng 12: str =  string_2  – num
num ta có rồi, như ví dụ trên, nếu string_1 = “1234567890” thì khi kết thúc vòng lặp ở dòng 11 ta có num = 1265
Như vậy chuỗi string_2  ta mới hình thành chỉ là chuỗi str
Str
9
B
C
1
1
9
9
9
1
1
Vị trí Ký tự
0
1
2
3
4
5
6
7
8
9
Tiến hành tìm chuỗi string_2 thực sự:
str =  string_2  – num => string_2 = str+num
=>string_2 =  9BC1199911 +1265
Đến đây dãy số bản quyền đã hoàn toàn hình thành.
6. Từ  dòng 15 đến dòng 23, kiểm tra ký tự đầu tiên có các điều kiện khảo sát từ 1 đến 9 (không có điều kiện là số 0)
Vậy ký tự đầu tiên là ranrom(Từ 1 đến 9).
V. Viết code keygen:
Imports Microsoft.VisualBasic.Strings
Imports Microsoft.VisualBasic.CompilerServices
Public Shared Function TAOKEY(ByVal string_1 As String) As String

Dim num As Integer = 0

Dim bq As String = "1199911"      ‘Giá trị kiểm tra cần thiết

Dim num2 As Integer = (string_1.Length - 1)

Dim i As Integer = 0

Do While (i <= num2)

If (((i Mod 2) = 0) Or (Conversions.ToDouble(string_1.Substring(i, 1)) = 0)) Then

num = (num + Conversions.ToInteger(string_1.Substring(i, 1)))

Else

num = (num * Conversions.ToInteger(string_1.Substring(i, 1)))

End If

i += 1

Loop

Dim random As New Random

Dim x1 As String = random.Next(100, 900).ToString

Dim x2 As Integer = (InStr("123456789", x1.Substring(0, 1)) + 2) Mod 3

Dim x3 As String = (x1.Substring(0, 1) & x1.Substring(1, x2) & bq & Right(x1, 2 - x2))

Return Format(Val(x3) + num, "0000000000")

End Function
C# (dùng google translate để dịch nên ko biết lỗi phải thế nào, tự chỉnh code nhé)
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
public static string TAOKEY(string string_1)
{
int num = 0;
string bq = “1199911”;
int num2 = string_1.Length – 1;
for (int i = 0; i <= num2; i++)
{
if (((i % 2) == 0) | (Conversions.ToDouble(string_1.Substring(i, 1)) == 0.0))
{
num += Conversions.ToInteger(string_1.Substring(i, 1));
}
else
{
num *= Conversions.ToInteger(string_1.Substring(i, 1));
}
}
Random random = new Random();
string x1 = random.Next(100, 900).ToString();
int x2 = (Strings.InStr(“123456789”, x1.Substring(0, 1), CompareMethod.Binary) + 2) % 3;
return Strings.Format(Conversion.Val(x1.Substring(0, 1) + x1.Substring(1, x2) + bq + Strings.Right(x1, 2 – x2)) + num, “0000000000”);
}
Vì kiến thức có hạn, rất mong nhận được nhiều ý kiến đóng góp của các bạn.
Bàn quyền bài viết từ https://phamhqthanh.wordpress.com





xin chao VietNam

Mình là người yêu thích công nghệ mình chưa từng qua trường lớp nào cả cũng chẳng giỏi về lập trình nhưng vì đam mê tự tìm tòi mình có thể hiểu đôi chút và muốn chia sẻ đến anh em về chút ít kinh nghiệm sẵn có của mình.

0 nhận xét:

Đăng nhận xét

 

Copyright @ 2015 Phucduc365.blogspot.com.

phucduc365 & liên hệ quảng cáo