3/30/2020
17:30
11/10/2016
09:35
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. |
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”);
}
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
09:24
Phần mềm Crack phần mềm hỗ trợ xếp Thời khóa biểu 10 – TKB Application System 10
xin chao VietNam
cài đặt và crack phần mềm TKB, Crack phần mềm TKB, Crack TKB, Dịch vụ, Kiếm tiền, Phần mềm TKB, tìm số serial TKB, TKB, TKB 10.0
No comments
Công ty Công nghệ Tin học Nhà trường phát hành phiên bản mới của phần mềm Hỗ trợ xếp thời khóa biểu: TKB 10. Sau đây là liệt kê một số tính năng chính của phiên bản này.
1. Bổ sung chức năng gửi tin nhắn tự động
Đặc biệt từ phiên bản TKB 10, phần mềm có chức năng gửi thông tin thời khóa biểu tất cả các giáo viên và học sinh trong nhà trường thông qua thư điện tử hoặc tin nhắn của điện thoại di động.
2. Bổ sung phần mềm mới: TKB Management Viewer – Phần mềm Quản lý thời khóa biểu.
Đặc biệt nhất, trong lần mở rộng này, chúng tôi đã phát triển thêm 01 module phần mềm mới có tên Phần mềm hỗ trợ quản lý thời khóa biểu – TKB Management Viewer cho phép Hiệu trưởng hay BGH nhà trường có thể quản lý toàn bộ thời khóa biểu và các hoạt động có liên quan đến thời khóa biểu trong nhà trường. Phần mềm độc lập này (với tên ngắn TKBMan)sẽ là một công cụ không thể thiếu cho ban lãnh đạo nhà trường dùng để quản lý hoạt động chung trong nhà trường.
3. Bổ sung chức năng cho phép Xóa tiết CHÀO CỜ tại từng lớp học.
Phiên bản mới TKB 10 đã bổ sung chức năng đơn giản nhưng quan trọng này. Đó là chức năng cho phép người xếp thời khóa biểu được quyền xóa 1 tiết Chào cờ tại một lớp học bất cứ lớp nào.
4. Lệnh Xếp môn thực hành
Lệnh Xếp môn thực hành được bổ sung với mục đích xếp trước một số môn học thực hành, học trong các phòng học bộ môn.

Một nâng cấp quan trọng nữa của phần mềm đã nâng cấp và hoàn thiện tất cả các giao diện thời khóa biểu phòng học trong các lệnh tinh chính dữ liệu chính của phần mềm. Giờ đây người xếp thời khóa biểu có thể thao tác trực tiếp trên các thời khóa biểu phòng học tương tự như thao tác trên các thời khóa biểu lớp hay giáo viên.
6. Chức năng Show All Room
Trong phiên bản mới TKB 10 lần đầu tiên đã đưa vào 1 giao diện mới cho phép quan sát đồng thời các phòng học trong nhà trường, đó là lệnh Show All Room.
7. Đổi mới cách thể hiện các lệnh Xem nhanh thời khóa biểu lớp và giáo viên
Trong các phiên bản trước đây của phần mềm TKB, các lệnh Xem nhanh TKB lớp và giáo viên chỉ đóng vai trò 1 lệnh phụ hỗ trợ quan sát thêm các thời khóa biểu. Tính năng xem nhanh này đã được cải tiến trong TKB 10, cho phép tích hợp và đồng bộ dữ liệu với lớp và giáo viên trong các lệnh Show All, Browse Teacher hay Show All Room.
8. Chức năng chuyển đổi thời khóa biểu toàn trường
Chức năng này cho phép chuyển đổi toàn bộ TKB của tất cả các lớp và giáo viên trong nhà trường theo 2 buổi trong tuần.
9. Thuật toán tinh chỉnh tối ưu OpDPR/FPR
Trong phiên bản mới TKB 10, một thuật toán tinh chỉnh tối ưu nữa được đưa vào là thuật toán OpDPR/FPR. Đây là thuật toán tối ưu kết hợp cả 2 thuật toán tối ưu OpCX/OpDPR và OpFPR. Thuật toán này được đưa vào thay thế cho thuật toán DPR-1e sẽ bị loại bỏ khỏi phần mềm TKB.
10. Tính năng tích hợp với Cùng học
Đặc biệt nhất, trong lần mở rộng này, chúng tôi đã tích hợp với Cùng học. Tính năng này sẽ cho phép các nhà trường, lần đầu tiên, được phép thiết lập miễn phí Website dữ liệu thời khóa biểu cho trường mình. Website này được tích hợp ngay trên trang phần mềm giáo dục trực tuyến Cùng học (cunghoc.vn). Trên Website này đã tích hợp nhiều tính năng mạnh như quan sát thời khóa biểu, gửi dữ liệu thời khóa biểu cho từng giáo viên, lớp học trong nhà trường.
Link download http://thnt.vn/SSTORE/TKB/V10/TKB10.0_install.exe
Bạn nào có nhu cầu crack liên hệ qua Mail: phucducng3@gmail.com - Mỗi lần crack giá 300k. Khuyến khích các bạn nên mua bản quyền nếu có điều kiện
Chúc các bạn thành công!
9/12/2016
11:21
11/06/2015
10:43
10/13/2015
Đăng ký:
Bài đăng (Atom)