看雪论坛
发新帖
6

[分享]Source Insight 4.0.0086 Patched

MistHill 2017-2-14 22:08 40972

如果你觉得软件有用,请购买正版。发布这个纯属娱乐。
转载请注明出处,谢谢!


2017/05/02 更新

1. 安装原版软件:Source Insight Version 4.0.0086 - April 27, 2017

2. 替换原主程序:sourceinsight4.exe
3. 导入授权文件(Import a new license file):si4.pediy.lic

本次更新主要解决了Windows系统用户名含日文或中文等非ANSI字符时,创建“工程/项目”列表或打开“工程/项目”报错的问题。
Patched sourceinsight4.exe:

     Size     Date    Time   Checksum  Name
---------  ---------- -----  --------  ----
  2867720  2017-04-27 23:15  07C1C004  sourceinsight4.exe


2017/04/10 更新

好尴尬哦,一个注册对话框几天搞不定!

1. 黑名单比对的来源除了以前的"si4update.dat"文件(动态),还增加了静态的:硬编码在应用程序中。感谢@netsd (L#183)!

2. 尽管我不愿意相信,但是它确实会以10分钟的间隔,在网络可用的情况下,联网请求激活。感谢@suixue (L#188)!

这次应该可以了,请重新下载:sourceinsight4.exe(CRC32:0x74FF09E8)。

     Size     Date    Time   Checksum  Name
---------  ---------- -----  --------  ----
  2861856  2017-04-05 18:52  74FF09E8  sourceinsight4.exe


2017/04/08 更新

抱歉,昨天4.0.0085的Patch(CRC32:0xB6F4EDFB)有问题,会出注册对话框。请重新下载:sourceinsight4.exe(CRC32:0x637B65B1)。

     Size     Date    Time   Checksum  Name
---------  ---------- -----  --------  ----
  2861856  2017-04-05 18:52  637B65B1  sourceinsight4.exe


2017/04/07 更新

1. 安装原版软件:Source Insight Version 4.0.0085 - April 5, 2017

2. 替换原主程序:sourceinsight4.exe

3. 导入授权文件(Import a new license file):si4.pediy.lic

这次(PublishDate="2017-4-5")列入黑名单的序列号有12项,包括ZeNiX的。

     Size     Date    Time   Checksum  Name
---------  ---------- -----  --------  ----
  2861856  2017-04-05 18:52  B6F4EDFB  sourceinsight4.exe


2017/02/27 21:25 更新

1. 安装原版软件:Version 4.0.0084 - Feb 26, 2017

2. 替换原主程序:sourceinsight4.exe

3. 导入授权文件(Import a new license file):si4.pediy.lic


修改了:1) 程序中用于License签名验证的RSA Public Key(2048 bit);2) 黑名单检查。

     Size    Date   Time   Checksum  Name
---------  -------- -----  --------  ----
  2841600  26-02-17 22:01  0353BAC6  sourceinsight4.exe
      904  14-02-17 21:11  BA8EBB5A  si4.pediy.lic




上传的附件:
本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (244)
linhanshi 2017-2-14 22:23
2
Thanks...
ZSYL 2017-2-15 00:32
3
感谢分享。亲测可用。不过好久没用这个看源代码了,一直在用Understand,知道的人不多,感觉功能要比SourceInsight强大
linhanshi 2017-2-15 00:54
4
Scientific Toolworks Understand ?
zhimingcom 2017-2-15 08:50
5
Understand很久前用过,好像对中文支持不佳,中文路径都不支持
wxq 2017-2-15 08:54
6
强大,支持一下,感谢分享。
redacker 2017-2-15 09:03
7
tks pubkey是明文, 请问你是用什么工具计算签名的?
1
lhglhg 2017-2-15 10:15
8
4.0不支持中文,好麻烦呀
小菜鸟一 2017-2-15 10:54
9
感谢   XP下测试通过
ZSYL 2017-2-15 12:22
10
Yes
ZSYL 2017-2-15 12:24
11
现在支持的还不错,支持中文路径,工程中中文乱码的问题可以在编码里面改成GB2312或者GBK,然后再重新扫描下工程就OK
6
MistHill 2017-2-15 13:52
12
很高兴林版又回来主持工作了!

The Return of linhanshi
6
MistHill 2017-2-15 13:59
13
谢谢你的经验。我是不太会用,最近看到好几个人在问,试着弄了一下。

从安装包的大小看,v4比v3应该功能增强不少:
Version 4.0.0080   19.88 MB
Version 3.5.0083    5.94 MB

可看看官网的New Features。
linhanshi 2017-2-15 13:59
14
感謝提供的工具...
linhanshi 2017-2-15 14:04
15
一直在使用 你沒有發現?論壇就有
Scientific.Toolworks.Understand.v4.0.870.Incl.Keygen-AMPED
_http://bbs.pediy.com/showthread.php?t=214922&highlight=Understand
ZSYL 2017-2-15 14:12
16
8错8错,一直在用847的版本,现在又可以更新了,哈哈.多谢斑竹
6
MistHill 2017-2-15 15:00
17
程序里用的是Windows Cryptography APIs,没有用到其他库。
最初想偷懒,直接用OpenSSL的命令行工具,不知哪里没整对,就是不正确。也许两者实现的细节确实不同,OpenSSL签的,自己可以通过验证,但API就过不了。
没办法,只好老老实实按程序的实现用APIs走其逆过程。
MSDN上那个例子“Example C Program: Signing a Hash and Verifying the Hash Signature”写得不好,又参考其他代码才弄好了。

在授权文件里含有硬件信息,这个信息实际上是我测试虚拟机的,担心在其他机器上激活不了。
现在看来,本地激活并没有进行检查,应该是一个漏洞。它只通过签名来检查这些信息的正确性和完整性。在在线激活时,才比较硬件信息。

在chm里有这么一段:
When you activate a license, Source Insight sends the information you provided, plus a hardware fingerprint to our licensing system over a secure SSL connection so we can match the license to the machine. You can still make most hardware changes without invalidating the installation. We respect your privacy, and we specifically do not share your information with any third party.

另外,它的Deactivation功能比较人性化:
If you decide to stop using Source Insight, or want to use your license on a different machine, you should first deactivate your license on your old machine by selecting Help > Manage License, and selecting "Deactivate License". This reduces your activation count so that you can activate it on another machine. A single license gives you up to two machine activations.


再说下它的序列号,先看看授权类型:
[FONT="Courier"]Source Insight 4.0 – Single User                 $239.00
Source Insight 4.0 – 5 License Pack            $1,150.00
Source Insight 4.0 – 10 License Pack           $2,190.00
Source Insight 4.0 – 20 License Pack           $4,180.00

Source Insight 4.0 Upgrade for Single User       $119.00
Source Insight 4.0 Upgrade – 5 Pack              $575.00
Source Insight 4.0 Upgrade – 10 Pack           $1,090.00
Source Insight 4.0 Upgrade – 20 Pack           $2,080.00[/FONT]

序列号的有些字符是有特殊意义的,用某些位的字符来区分授权类型。
比如Trial的第一部分是S4TR;如果某位是"U",表明这是一个升级序列号,Upgrade比直接购买要便宜,在线激活的Wizard还要求输入旧版的序列号。
最后一部分的4个字符是前面3部分的一个Checksum,应该是一个自定义算法。
CoCoShen 2017-2-15 17:16
18
楼主很强大,谢谢啦
CoyLiu 2017-2-15 18:37
19
感谢林大
沧海天涯 2017-2-15 18:39
20
给力~~~~~~~~~~~~~~
不追浮云的人 2017-2-15 19:17
21
Understand 阅读分析不错,输入加注释都难了
天涯一鸿 2017-2-15 19:39
22
我试了一下用它搞个linux kernel直接吃掉了10G内存……一般人玩不动……
沧海天涯 2017-2-15 19:52
23
支持,不过只能用微软拼音~~ win10测试通过~~
zenix 2017-2-15 20:35
24
糟糕,这么一来我的 License Faker 都没机会发布了。

上传的附件:
六卖神剑 2017-2-15 22:00
25
请教一下楼主SI4的注册机制,是不是即使序列号正确也需要联网激活呢
ZSYL 2017-2-15 23:06
26
这玩意儿确实吃内存,10G有点吓人了。。。我linux版本2.4.0,吃了400M内存
6
MistHill 2017-2-15 23:21
27
[QUOTE=zenix;1464040]糟糕,这么一来我的 License Faker 都没机会发布了。

[/QUOTE]

大Z谦虚了,好久不见!
6
MistHill 2017-2-15 23:23
28
注册机制大概是这样子:
1. 如果文件si4.lic存在,a) 检查序列号的有效性,b) 用advapi32.CryptVerifySignatureW对注册信息进行签名校验。
如果没有问题,说明已经激活了,不会进行联网。

2. 如果文件si4.lic不存在,或是有问题。用户有三个选择:
a) 用购买的序列号在线永久激活;
b) 在线激活30天试用授权;
c) 导入授权文件。这适用于无法联接或不允许联接到Internet的机器,用户需要通过邮件获得授权文件的。

联网激活时会发送用户的硬件信息,以此来增加或减少服务器上该序列号对应的激活计数。
显然,因为验证服务器上保存了每个授权的硬件信息,试用授权到期后无法再次激活。
1
Ericky 2017-2-16 00:18
29
先膜拜大牛.。再下载软件用。。
sood 2017-2-16 08:35
30
谢谢楼主分享
1
lhglhg 2017-2-16 08:55
31
4.0显示中文注释,要如何设置呀?请教大牛!!
天涯一鸿 2017-2-16 09:11
32
linux 4.4 刚分析那会确实吃了10G,之后再打开只要3G就行了,nice
hally 2017-2-16 09:22
33
browse project symbols 和look up References 用不了,Relation窗口也不起作用,还有IS 4的中文乱码不知道怎么解决?
redacker 2017-2-16 09:39
34
我看了是winapi校验的,犯懒没去实现一遍.. 以为你有什么工具可以模拟这流程校验.
最后4个字节的校验我分析出来了
static unsigned char TABLE_1[] = {
	0x23 ,0xDD ,0x78 ,0xB5 ,0x33 ,0x6F ,0xD4 ,0xF9 ,0xA6 ,0xE8 ,0xCC ,0x7C ,0x9F ,0xB3 ,0x22 ,0xDA,
	0x32 ,0xDF ,0x71 ,0xB7 ,0x61 ,0x3D ,0x6B ,0x57 ,0xD7 ,0xA1 ,0x34 ,0x38 ,0xF2 ,0xE1 ,0xF3 ,0xB8,
	0x1A ,0x80 ,0xF5 ,0xFE ,0x91 ,0x01 ,0x3C ,0x73 ,0x93 ,0x48 ,0xA0 ,0xE0 ,0x94 ,0xAA ,0x39 ,0x8F,
	0x58 ,0xE2 ,0x31 ,0x0B ,0xBB ,0xCE ,0x4C ,0xD2 ,0x56 ,0xC2 ,0x5E ,0x27 ,0xB6 ,0xFB ,0x65 ,0xAE,
	0x55 ,0x60 ,0xBD ,0x10 ,0x86 ,0xF7 ,0xC1 ,0x88 ,0x12 ,0xED ,0x67 ,0xC4 ,0x74 ,0x30 ,0x1B ,0xBC,
	0x9A ,0xB0 ,0xEF ,0x36 ,0xC5 ,0x72 ,0x5B ,0x7E ,0x54 ,0x2C ,0x0F ,0xF6 ,0xA9 ,0x85 ,0x2A ,0xB1,
	0x37 ,0xF1 ,0x2F ,0x4E ,0xE7 ,0x6A ,0x75 ,0xA8 ,0x26 ,0xEB ,0x3F ,0x6C ,0x69 ,0x20 ,0x87 ,0x62,
	0x8D ,0x68 ,0xA5 ,0xFA ,0x3A ,0x04 ,0x21 ,0x1F ,0xAC ,0x05 ,0xA4 ,0x76 ,0x11 ,0x70 ,0x9E ,0x46,
	0x24 ,0x5D ,0xC6 ,0xE4 ,0x95 ,0x82 ,0x1C ,0xBA ,0x59 ,0x09 ,0xD9 ,0x44 ,0x98 ,0x92 ,0x07 ,0xAF,
	0xA7 ,0x41 ,0x96 ,0x90 ,0xB4 ,0x42 ,0x63 ,0x99 ,0xD0 ,0x4D ,0x97 ,0xBE ,0x40 ,0xCF ,0x84 ,0xE5,
	0x1D ,0x5A ,0x0C ,0x7F ,0xC7 ,0xEA ,0xEE ,0xEC ,0x00 ,0xD5 ,0x49 ,0x2D ,0x51 ,0xAD ,0xB9 ,0x89,
	0x77 ,0x52 ,0x3E ,0x8C ,0xE6 ,0xFF ,0x15 ,0xDE ,0x6D ,0x14 ,0xA2 ,0xCD ,0xA3 ,0xD6 ,0x17 ,0x81,
	0xC8 ,0x45 ,0x4B ,0x35 ,0x0A ,0x0D ,0xFC ,0x9D ,0x16 ,0x3B ,0xD3 ,0x7D ,0xD1 ,0xF4 ,0xFD ,0xCA,
	0x25 ,0x06 ,0x6E ,0xF8 ,0x5F ,0xBF ,0x8A ,0x7B ,0x50 ,0xD8 ,0x79 ,0x9C ,0xAB ,0x43 ,0x53 ,0xCB,
	0x8E ,0x4F ,0xE3 ,0xC9 ,0x8B ,0xDC ,0x5C ,0xC0 ,0x1E ,0x9B ,0x18 ,0x02 ,0x47 ,0x03 ,0x2B ,0x0E,
	0x66 ,0x4A ,0xB2 ,0xF0 ,0xE9 ,0x19 ,0x29 ,0x7A ,0xC3 ,0x08 ,0x83 ,0xDB ,0x64 ,0x13 ,0x2E ,0x28,
};


void HashPT3(char* src, int mlen, char* dst) {
	char* TABLE_STR = "KV96GMJYH7QF5TCW4U3XZPRSDN";
	unsigned char byte1, byte2, byte3;
	int i = 0;

	for(i = 0; i < 4; i++) {
		byte1 = src[0];
		byte1 += i;
		byte1 &= 0xff;

		byte2 = TABLE_1[byte1];
		//
		byte1 = 1;
		if(byte1 > mlen) {
			//goto;
		}
		
		//loop1
		for(; byte1 < mlen; byte1++) {
			byte3 = src[byte1];
			byte3 ^= byte2;
			byte2 = TABLE_1[byte3];
			//printf("round %02x %02X\n", byte1, byte2);
		}

		byte1 = byte2 % 0x1a;
		byte1 = TABLE_STR[byte1];
		dst[i] = byte1;
	}
}
zenix 2017-2-16 10:21
35
在联网验证失败或是断网的情况下,它会生成一个临时的本地 Lic ,里面也包含了签名。
我在想,也许可以利用程序本身来帮我们计算正确的签名。
六卖神剑 2017-2-16 10:46
36
谢了,原来SI4还需要对序列号联网激活呢,本想用ida分析加密算法没必要了
gagmeng 2017-2-16 14:13
37
我尝试用.NET patch公钥后算signature也不匹配。软件用的是crypt32.dll中的API,也在MSDN上找到了大神你说的代码,不知可否分享下你参考的其他代码的链接,谢谢。
6
MistHill 2017-2-16 14:45
38
6
MistHill 2017-2-16 14:47
39
弄明白OpenSSL的问题了。

[FONT="Courier"]1. 签名
openssl.exe dgst -sha1 -sign myprivate.pem -out mySig.sha1.bin myMSG.txt
2. 验证
openssl.exe dgst -sha1 -verify mypublic.pem -signature mySig.sha1.bin myMSG.txt
3. 编码
openssl.exe enc -base64 -in mySig.sha1.bin -out mySig.base64.txt[/FONT]


第二步OpenSSL验证显示"Verified OK",没有问题。但第三步Base64编码的签名放进si4.lic,签名验证失败!

原来,OpenSSL是Big Endian的,而CryptoAPI要求Little Endian。
即OpenSSL签名的结果mySig.sha1.bin是一个Big Endian的binary文件,按字节reverse一下,成为Little Endian,再编码就OK了。
6
MistHill 2017-2-16 15:01
40
嗯,我在追它的HWiD来源时,故意断掉网络,也发现这个:
[FONT="Courier"]<!--
	Source Insight 4.x License File

	DO NOT EDIT THIS FILE. Doing so will render it unusable.

	This license was created for:

		whoever
		
		me@foo.com

-->
<SourceInsightLicense>
	<LicenseProperties
		ActId="L555209330011"
		Serial="S4TR-1702-0933-0011"
		LicensedUser="whoever"
		Organization=""
		Email="me@foo.com"
		Type="Trial"
		Version="4"
		MinorVersion="0"
		Date="2017-02-15"
		Expiration="2017-03-17"
	/>
	<Signature
		Value="hLjV2GNExg+wG+VaAu5P4XR9gy8g0OBFDegDp5GQ1Is3aREIOfu7ClWY94h+Hwn/eh7xUzDCUBTZ62eblyFHQRJ5q6PbsiXeWDs4Y***NMm2Q3tcFlTicBfPDJPnyDrcjWrj6Y/Ms5XDXktNct/NEAT0+hPydhhdvfNZoF/HhgE="
	/>
</SourceInsightLicense>[/FONT]

这就有意思了,如果程序里有私钥,程序都不用改!
作者不至于出现低级失误吧,我再看看。
刘国华 2017-2-16 23:50
41
非常感谢分享
redacker 2017-2-17 16:39
42
追出来没? 我现在本机的就不弄这么复杂了,直接HOOK掉CryptVerifySignatureW函数.lic随便改.
不过私钥这个挺有意思的.
6
MistHill 2017-2-17 18:10
43
感谢ZeNix的提醒!
再次分析的结果:程序里不存在私钥!

本地激活(activated locally)
断网时激活Trial,会进行本地激活。一个为用户贴心的设计,但可被利用!

请看我上面帖出的样本si4.lic,貌似这个本地激活文件是经过“签名”的。
我们知道“签名”和“签名验证”是通过“公钥体系”来实现的,现实中不应该、也不可能暴露私钥,所以实际上它的“本地激活”是使用的对称算法,“签名”和“签名验证”都用的是Sub_00402B00(RVA: 00002B00)这个算法。
应该是个自定义算法,用到常数1961和1968,非常有意思。

因为是对称加密/解密,现在我们可以不用替换PublicKey,直接用原版软件,利用程序自身来构造一个有效的本地激活文件,最长可以试用90天,到期后再做一个新的!
Trial最大有效期90天,Beta最长为200天。由序列号区分是Trial还是Beta。不改程序,没办法用Beta。

但是有个问题,这个文件是绑定机器的,所以我没有办法做一个通用的给大家,有能力的可以自己试试。

让程序自己生成这个si4.lic,有两行要注意:
[FONT="Courier"]ActId="L555209330011"
Serial="S4TR-1702-0933-0011"[/FONT]

激活ID中的"L555"表示本地激活,"209330011"根据本机“硬件信息”计算的一个Hash,要检查的!Hash是一个DWORD值,转为十进制字符串。
序列号一定是"S4TR",表示试用版,"1702"是激活的年/月,"0933-0011"同HWiD Hash,取后8位。
HWiD Hash的计算同样使用Sub_00402B00,输入由三部分组成:
[FONT="Courier"]1. 系统卷的VolumeName GUID
2. 用户的SID(Security Identifier)。这在Windows 7及以上会有问题,当前用户和“以管理员身份运行”时,程序取到的SID是不同的,造成“签名验证”失败。我觉得这是个失误,应该取计算机的SID,而不是用户SID!
3. 计算机名[/FONT]

其它就随便改了,在它验证时,Sub_00402B00调用后将它加密好的0x80字节转为Base64编码,放到si4.lic里就好了!

用原版有点不方便,程序启动时要点一下"Continue"。

试用有效期设为再多也没用,有个地方要对其检查,强行在激活日期上加90(0x5A)。
上传的附件:
值得怀疑 2017-2-19 22:02
45
ZSYL 感谢分享。亲测可用。不过好久没用这个看源代码了,一直在用Understand,知道的人不多,感觉功能要比SourceInsight强大
我用  Understand  怎么有些c++  源码分析不了···  不太正确··  Delphi有些也是!你会有这个情况吗·! 
eastlhu 2017-2-21 13:17
46
非常感谢!可以用。
阿瑟的风格 2017-2-21 23:29
47
已出新版本4.0.82    更新中文输入问题。麻烦再破解下
6
MistHill 2017-2-22 10:41
48
阿瑟的风格 已出新版本4.0.82 更新中文输入问题。麻烦再破解下
已更新!
linhanshi 2017-2-22 12:17
49
Thanks...
1
FadeTrack 2017-2-22 17:47
50
学习了
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 知道创宇带宽支持 | 微信公众号:ikanxue
Time: 0.015, SQL: 12 / 京ICP备10040895号-17