1 Star 5 Fork 6

pedoc / LinqPadCrack

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
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存储路径发生了变化,路径计算函数

// 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))

保护信息

尝试使用 de4dot-reactor-6.7 去混淆后,可以找到关键代码LicenseManager.Register LicenseManager.GetLicensee等

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格式

<Root>
<Code></Code>
<Licensee></Licensee>
</Root>

关键字段

LicenseManager.LicenseKind

如果=1,并且注册名称不为空的话,检查授权数量,如果也同时=1,则为单用户授权,否则为多用户授权

关键算法

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=

修改前,搜索结果有4处,其中需要注意,只需要替换前三处的值,最后一处,即函数原型为internal static void smethod_6(Guid guid_0)的这个,应将整个函数nop掉,因为这个函数的作用是校验被加载程序集publicKey,以确定文件是否被修改,所以必须被patch掉.否则会报错(TypeLoadException).

此外修改后在7.7.15版本输入时会有一个类型加载异常,暂不清楚原因.解决办法为patch掉UIProgram中的ProcessException函数(直接return,函数原型 internal static void ProcessException(Exception ex, bool reportThread = false))

搞定

原程序程序集PublicKey(LINQPad.UI.assemblies.Resources.dll)

ACQAAASAAACUAAAABgIAAAAkAABSU0ExAAQAAAEAAQC1/JDnAn9nhx53Oo/eiTjIHdQCumW5IB1gWT6WxJJlHoicwT8UFeu1P6wRMa4L0zPF7mAhZy2XGOoxqK69DaAHLyXYfbpvyQ/9WY7U2jXkTDmMRUMH6OM7hCYUPa7J9ZaDb5fI90dQ5ZdcZOIYn0Xe9GsqKxJHrcNlK/XDCAVdqQ==

空文件

简介

暂无描述 展开 收起
C#
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/pedoc/linq-pad-crack.git
git@gitee.com:pedoc/linq-pad-crack.git
pedoc
linq-pad-crack
LinqPadCrack
master

搜索帮助