# LinqPadCrack **Repository Path**: pedoc/linq-pad-crack ## Basic Information - **Project Name**: LinqPadCrack - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 6 - **Created**: 2020-09-05 - **Last Updated**: 2024-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ***仅供学习研究,请勿用于非法用途*** 对应版本:7.1.5 核心逻辑位置 LINQPad.GUI.dll UIProgram.Go 函数原型 private static void Go(string[] stringArgs) License存储Path linqpad_isolated_storage_file_write_error,每个机器转换后具体路径可能变化,使用 IsolatedStorageFile ,isAllUser=false 即可 ```\IsolatedStorage\vasholup.yqx\t0ujezos.ksr\StrongName.vpk5fbjezs2y52c0vybdnwee1y5l4co3\StrongName.vpk5fbjezs2y52c0vybdnwee1y5l4co3\Files``` 对于7.7.15以上版本,License存储路径发生了变化,路径计算函数 ```csharp // Token: 0x060008D8 RID: 2264 RVA: 0x00037F7C File Offset: 0x0003617C internal static string smethod_0() { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "LINQPad\\license.xml"); } ``` 示例结果: ``C:\Users\Administrator\AppData\Local\LINQPad\license.xml`` ### IMPORTANT 程序会从资源中读取(LINQPad.UI.assemblies.Resources.bin)并解压Resources.dll后动态加载 ***License读取逻辑位于资源文件Resources.bin中,此文件经过 Deflate 算法压缩,需要解压才能还原。还原后是一个被严重混淆的.net程序集*** 其中Deflate处理逻辑位于(InternalAssemblyExtractor,对应版本7.7.15),对应函数原型(public static bool DecompressResource(string resourceName, Stream outputStream, Assembly assembly)) 保护信息 ![](markdown-assets/2023-06-05-17-09-45-image.png) 尝试使用 de4dot-reactor-6.7 去混淆后,可以找到关键代码LicenseManager.Register LicenseManager.GetLicensee等 ![](markdown-assets/2023-06-05-17-15-20-image.png) ### License算法(适用于7.7.15之前) License格式(以下均为16进制) `固定头部 0601+2字节License数据长度+2字节RSA签名数据长度+License数据+签名数据` License数据格式 AES算法加密 `KEY=IV=md5(当前机器名(Environment.MachineName))` 被加密数据格式 ``` 当前用户名(Environment.UserName) 未知 "." 未知 -1 未知 -1 未知 "Document" 未知 "HeaderText" 未知 "FooterText" 许可证编号 GUID bytes 过期时间(Ticks) 未知 2 未知 -1 版本列表 "V5V6" 产品版本 "PERM" ``` ### License算法(7.7.15之后) 搜索字符串 ``Licensed to``可以找到关键验证位置 使用xml存储License信息 License格式 ```xml ``` 关键字段 LicenseManager.LicenseKind 如果=1,并且注册名称不为空的话,检查授权数量,如果也同时=1,则为单用户授权,否则为多用户授权 ![](markdown-assets/2023-06-05-19-34-34-image.png) 关键算法 ![](markdown-assets/2023-06-05-17-26-06-image.png) ### Patch策略 搜索以下字符串(7.7.15版本,以前的版本应该也适用) BgIAAACkAABSU0ExAAQAAAEAAQDXOFZtugmJgpEuap2hC7zyDVEKZh/TFGsiR0loDYYQyzA52CRrqSdmTcTw2AgiAAJazu/lRYmFpn4wIvuDCgz/fJyYGF81v+NqUhySpYgT+RBw84vF5H3yQBq0OXmTXy2w4PqQKapWvt7FAw6eDXpC538/RxJU5tReqGCStwVy4Q== 然后替换为(来自7.6.6版本) BwIAAACkAABSU0EyAAQAAAEAAQBFtstFzq2GgWryQbNhAZqCv7RQAvmQx6TEri2WPjEn5iTMOd8o1gM4a+ba7ZJ9+Hk3FIM82l4St5JfdMRKTfg//pd1f+DowAIZq290+p07YMcVfEJoIbKixYJyGn3ouuk0zhflBA64NfIF5hR3lNTJUP67DNfV6SB9V6TJdzdUtxWg8u2yzJLy0PSOxV8LLeTRKB+S2e8K5217fpcCoJSxl9nSA1CmSqdFEfUpROuWR62zJde9VfmPCG3QnXivY99xGQ1/8ofBZj/0+/jXhoEzMSe34VBfrnxM/n9G0acg62cDTP3bls4GT/E8lNVQqEnXNxULNceZ3xbbbamFbRfSXVR9eZLyGFGKBXgUpxkVgmhjLNQM8nMmviykUmjQGOD+Na0OGSj6ytwZnelszJeWMXQUUK7kOHrFjVL3j3H0wuFZnCwsd1w/LzEHC3wSqEhzQR62FGRAX/FarhgK7PMDekCfBal32Q42zzHkr32CyS84dbc7LqjiwAMgukUN76lzoUOdKlQqLBxINfDf/CgylzYDd7VoMpEj+JGpaK71/QKuI8uwcO9RXzr4bhJI5BKAKztHK+6zwdtK4oe/tWdYkeGKnhodr3JXAqLPDB14lqLI/pNeQAHeb86RdjvqF6Hl2+mJj2KGh9N2NKBrDLG9GotbP+f3grrjWnm+dYjS9s3yRfdaPqS8/sIINsrdWjcqGuarxM84R8bmKNSnSVyRK/DUFIGyeLuSxpOR1a4I6pMR1zK//joATgKQ3y7Uqyk= ![](markdown-assets/2023-06-05-20-32-11-image.png) ![](markdown-assets/2023-06-05-20-33-22-image.png) 修改前,搜索结果有4处,其中需要注意,只需要替换前三处的值,最后一处,即函数原型为``internal static void smethod_6(Guid guid_0)``的这个,应将整个函数nop掉,因为这个函数的作用是校验被加载程序集publicKey,以确定文件是否被修改,所以必须被patch掉.否则会报错(TypeLoadException). ![](markdown-assets/2023-06-05-21-25-55-image.png) 此外修改后在7.7.15版本输入时会有一个类型加载异常,暂不清楚原因.解决办法为patch掉UIProgram中的ProcessException函数(直接return,函数原型 internal static void ProcessException(Exception ex, bool reportThread = false)) ![](markdown-assets/2023-06-05-21-50-43-image.png) 搞定 ![](markdown-assets/2023-06-05-21-52-09-image.png) 原程序程序集PublicKey(LINQPad.UI.assemblies.Resources.dll) ACQAAASAAACUAAAABgIAAAAkAABSU0ExAAQAAAEAAQC1/JDnAn9nhx53Oo/eiTjIHdQCumW5IB1gWT6WxJJlHoicwT8UFeu1P6wRMa4L0zPF7mAhZy2XGOoxqK69DaAHLyXYfbpvyQ/9WY7U2jXkTDmMRUMH6OM7hCYUPa7J9ZaDb5fI90dQ5ZdcZOIYn0Xe9GsqKxJHrcNlK/XDCAVdqQ==