RadControls的代码被混淆后的确给直接破解增加了许多难度,好在手中的注册机尚可应付一阵子,便好久未耗心血破解telerik的控件了。
前不久网友kgdiwss来信说他最近在研究R.A.D.editor v5.6这个控件的破解方法,发现xbbdc00610d0c9ab4
这个方法会读LicenseFile.xml这个文件里的值进行判断,但破解之后的控件却无法使用,无法添加到工具箱。今天实在觉得好奇便看了一下这个函数
Friend Function xdbdfefd16d8eae24() As String
Dim text1 As String = String.Empty
Dim xeefcbbbfc1 As xee4fc0b273b8bfc4 = xee4fc0b273b8bfc4.LicenseInvalid
Dim text2 As String = String.Empty
If (Not Me._89f7fbcf30dcfc79 Is String.Empty) Then
Dim document1 As New XmlDocument
Try
document1.Load(HttpContext.Current.Server.MapPath(Me._89f7fbcf30dcfc79))
Dim stream1 As Stream = Assembly.GetExecutingAssembly.GetManifestResourceStream(Me._32e9f8717824d1b9)
If (stream1 Is Nothing) Then
Throw New Exception("There is no SchemaLicense.xsd resource in the product")
End If
Dim reader1 As New XmlTextReader(stream1)
If MyBase.x8268a03fdfe43f91(document1, reader1) Then
Dim node1 As XmlNode
For Each node1 In document1.SelectNodes(("//license[@control = '" & Me._faae2e7b9ce18346 & "']"))
Dim xeefcbbbfc2 As xee4fc0b273b8bfc4 = Me.xbbdc00610d0c9ab4(node1.Attributes.ItemOf("company").Value, node1.Attributes.ItemOf("licenseKey").Value, Me._192a1a02420f4cfd, Me._43379c04dfbae39c)
If (xeefcbbbfc2 = xee4fc0b273b8bfc4.LicenseOk) Then
xeefcbbbfc1 = xee4fc0b273b8bfc4.LicenseOk
Exit
End If
If (xeefcbbbfc2 = xee4fc0b273b8bfc4.LicenseExpired) Then
xeefcbbbfc1 = xeefcbbbfc2
End If
Next
Else
Return Me.xaaa216dedeb8b931(("Your license file is invalid. Validation error: " & MyBase.LastValidationMessage), False)
End If
reader1.Close
Catch exception2 As XmlException
Catch exception1 As FileNotFoundException
Return Me.xaaa216dedeb8b931(exception1.Message, False)
End Try
End If
If (((xeefcbbbfc1 = xee4fc0b273b8bfc4.LicenseExpired) OrElse (xeefcbbbfc1 = xee4fc0b273b8bfc4.LicenseInvalid)) AndAlso Me._666dc00f42ee96da) Then
xeefcbbbfc1 = xee4fc0b273b8bfc4.LicenseOk
text2 = Me.x8051fb738c99eb85
End If
If (xeefcbbbfc1 = xee4fc0b273b8bfc4.LicenseOk) Then
If (text2.Length > 0) Then
Dim num1 As Integer = 0
If HttpContext.Current.Items.Contains("RadControlRandomNumber") Then
num1 = CType(HttpContext.Current.Items.Item("RadControlRandomNumber"), Integer)
Else
Dim random1 As New Random(DateTime.Now.Millisecond)
num1 = random1.Next(10)
HttpContext.Current.Items.Add("RadControlRandomNumber", num1)
End If
If (num1 = 4) Then
text1 = text2
End If
End If
Return text1
End If
If (xeefcbbbfc1 = xee4fc0b273b8bfc4.LicenseInvalid) Then
Return Me.x207a39204f6fe13a
End If
Return Me.x15fe9e1e533c8797
End Function
发现比较有趣的是xee4fc0b273b8bfc4.LicenseOk
再一看xee4fc0b273b8bfc4
Private Enum xee4fc0b273b8bfc4
' Fields
LicenseExpired = 0
LicenseInvalid = -1
LicenseOk = 1
End Enum
明白了吧 让xdbdfefd16d8eae24啥事不做直接返回个LicenseOk 便可以了
Private Function xbbdc00610d0c9ab4(ByVal xd0d7f230b70254c8 As String, ByVal xdb673b434db898b6 As String, ByVal x192a1a02420f4cfd As String, ByVal x43379c04dfbae39c As String) As xee4fc0b273b8bfc4
Return xee4fc0b273b8bfc4.LicenseOk
End Function
汇编代码则是
.method private hidebysig instance Telerik.RadEditorUtils.x68e86db9eb31d7d1/xee4fc0b273b8bfc4 xbbdc00610d0c9ab4(string xd0d7f230b70254c8, string xdb673b434db898b6, string x192a1a02420f4cfd, string x43379c04dfbae39c) cil managed
{
// Code Size: 2 byte(s)
.maxstack 1
L_0000: ldc.i4.1
L_0001: ret
}
先把用ildasm返汇编出的代码的il文件中的那个强名称删了,再找到xbbdc00610d0c9ab4用上面的代码替换掉,重新编译后破解便算完成了。 须注意的是,此种破解,RadControls目录中仍需放置LicenseFile.xml文件,只是有关editor的授权码则可以随便填了。 比如: <root> <license company="RadControlsLicense" licenseKey="Q9W7W3Y/0gsJlAloCFujvA3mDoPYPq2bcj6vxYFBPMGjDeSxvwRfrbufsxp0wWTfwbPLkhK45/hqmVxKd3bvJw==" control="editor" /> </root> kgdiwss说的破解之后的控件无法添加到工具箱的现象我这里并未发生,大家也试试看吧。 |
正所谓众人拾柴火焰高,如果没有kgdiwss的前期跟踪,也不会勾起我今天破解Radeditor5.6的兴趣,因为混淆后的代码实在让人心焦。在此一并祝kgdiwss突飞猛进。 |
|