欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]Source Insight 4.x 补丁

[原创]Source Insight 4.x 补丁

参考了 http://bbs.pediy.com/thread-215669.htm 的帖子,顺手写了个补丁,理论上支持更新。劫持msimg32。工具用的aheadlib,微软的Detours。


代码

	// Patch

	BOOL WINAPI Mine_CryptVerifySignatureW(HCRYPTHASH hHash, const BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR szDescription, DWORD dwFlags)

	{

		return TRUE;

	}

	BOOL (WINAPI *Real_CryptVerifySignatureW)(HCRYPTHASH , const BYTE *, DWORD , HCRYPTKEY , LPCWSTR , DWORD ) = CryptVerifySignatureW;

	enum 

	{

		FACKED_FILE_HANDLE = -2

	};

	HANDLE (WINAPI *Real_CreateFileA)(LPCSTR lpFileName, DWORD dwDesiredAccess, 

		DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) = CreateFileA;

	HANDLE WINAPI Mine_CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, 

		DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)

	{

		LPCSTR lpName = PathFindFileNameA(lpFileName);

		if(lpName && !_stricmp(lpName, "si4update.dat")) 

		{

			if(dwCreationDisposition == OPEN_EXISTING)

			{

				// not exist

				return INVALID_HANDLE_VALUE;

			}

			HANDLE h = Real_CreateFileA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);

			TlsSetValue(m_tlsIdx, h);

			return h;

		}

		else

		{

			return Real_CreateFileA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);

		}

	}

	BOOL (WINAPI *Real_WriteFile)(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED) = WriteFile;

	BOOL WINAPI Mine_WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped)

	{

		if((HANDLE)TlsGetValue(m_tlsIdx) == hFile)

		{

			DWORD newSize = 0;

			// Patch联网下载回来的黑名单,如果不想自动获取升级信息的话,InternetOpenW 直接拦截掉就好了

			PatchBlackList((LPSTR)lpBuffer, nNumberOfBytesToWrite, &newSize);

			return Real_WriteFile(hFile, lpBuffer, newSize, lpNumberOfBytesWritten, lpOverlapped);;

		}

		return Real_WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped);

	}

	BOOL (WINAPI *Real_CloseHandle)(HANDLE) = CloseHandle;

	BOOL WINAPI Mine_CloseHandle(HANDLE hObject)

	{

		if((HANDLE)TlsGetValue(m_tlsIdx) == hObject)

		{

			TlsSetValue(m_tlsIdx, INVALID_HANDLE_VALUE);

		}

		return Real_CloseHandle(hObject);

	}

	HINTERNET (WINAPI *Real_InternetOpenW)(LPCWSTR, DWORD, LPCWSTR, LPCWSTR, DWORD) = InternetOpenW;

	HINTERNET WINAPI Mine_InternetOpenW(LPCWSTR lpszAgent, DWORD dwAccessType, LPCWSTR lpszProxy, LPCWSTR lpszProxyBypass, DWORD dwFlags)

	{

		// 拦截授权的动作,这个会上传机器信息,KEY信息,最后KEY就会被加黑

		if(!_wcsicmp(L"Source Insight", lpszAgent)) { return NULL; }

		// SourceInsight/4.0  这个UA是升级联网的UA

		return Real_InternetOpenW(lpszAgent, dwAccessType, lpszProxy, lpszProxyBypass, dwFlags);

	}	

BOOL PatchBlackList(LPSTR pOrgInfo, DWORD cbInfo, LPDWORD newSize)

{

	//1. base64 decode

	BIN rawInfo;

	rawInfo.resize(cbInfo);

	int rawsize = (int)rawInfo.size();

	if(!Base64Decode(pOrgInfo, (int)cbInfo, &rawInfo[0], &rawsize) || rawsize <= sizeof(HDR)) { return FALSE; }

	//2.decrypt buf

	PHDR hdr = (PHDR)&rawInfo[0];

	if(hdr->size > (int)(rawsize - offsetof(HDR, data))) { return FALSE; }

	for (int i = 0; i < hdr->size; i++)

	{

		int idx = (hdr->key + i)%sizeof(g_decrypt_table);

		hdr->data[i] ^= g_decrypt_table[idx];

	}

	//3. patch black list

	std::tr1::regex re("(<BlackList>)([\\r\\n\\w<>/=\\s\"-]+)(</BlackList>)");

	std::tr1::regex_replace(hdr->data, hdr->data, hdr->data+hdo->size, re, std::string("$1$3"));

	hdr->size = min(hdr->size, (int)strnlen(hdr->data, hdr->size)+1);

	calc_checksum(hdr->data, hdr->size, hdr->key, (LPBYTE)&hdr->checksum, (int)sizeof(hdr->checksum));

	//4. encrypt buf

	for (int i = 0; i < hdr->size; i++)

	{

		int idx = (hdr->key + i)%sizeof(g_decrypt_table);

		hdr->data[i] ^= g_decrypt_table[idx];

	}

	//5.base64buf

	*newSize = cbInfo;

	memset(pOrgInfo, 0, cbInfo);

	Base64Encode(&rawInfo[0], (int)(offsetof(HDR, data)+hdo->size + 1), pOrgInfo, (int*)newSize, ATL_BASE64_FLAG_NOCRLF);

	return TRUE;

}	


补充一下吧:

HOOK CryptVerifySignatureW 过签名校验,和Patch公钥实现的效果是一样的

HOOK CreateFileA 过黑名单的,联网更新之后,他会下载si4update.dat,不让他写入,就不会触发序列号黑名单的逻辑,在这点可以PATCH联网获取到的信息,可以把联网升级的信息PATCH掉。


2017-04-08:  

1.4.00.0085 直接把黑名单编译到程序中了,不仅仅是联网获取,要patch这个逻辑灰常的复杂,最好就是人手一个KEY,然后把网络禁掉,如果还想保持升级的话,用补丁把黑列表去掉最好。

2.注册机是redacker同学的,我直接拿来用了。操作方法就是,选一个KEY,替换si4.lic中的序列号,把补丁文件msimg32放到si的目录,理论上就好了。。

3.有问题估计不会再更新了。老版本已经够用了,新版就是加了一堆对抗逻辑,一堆定时器。代码那叫一个乱。

4.调试的几个关键点

01315320 状态

01315f24 列表

0266DED0

266DDF0

0050BB94 这个地方写入的黑名单列表

sub_439B60 解密加载黑列表

unk_613FF8 加密的黑列表

5.附上我生成的100KEY

S4SV-UFWS-T1LD-Z6NF

S4SV-UFWS-UBCN-DJ4G

S4SV-UFWS-ED7V-MKZD

S4SV-UFWS-DU9E-SGRS

S4SV-UFWS-336A-N6GH

S4SV-UFWS-YP56-FVGD

S4SV-UFWS-0XCA-97YS

S4SV-UFWS-3PB4-UQHK

S4SV-UFWS-WQT3-5VGK

S4SV-UFWS-D8D7-TVUR

S4SV-UFWS-N5J1-WPMS

S4SV-UFWS-JM1X-VZYP

S4SV-UFWS-DM0L-JNP6

S4SV-UFWS-PPVB-36R5

S4SV-UFWS-S8KA-VNFD

S4SV-UFWS-RL8H-937X

S4SV-UFWS-H50D-4NMG

S4SV-UFWS-JC1O-WSZF

S4SV-UFWS-Z149-V9FM

S4SV-UFWS-7ZA6-DYT4

S4SV-UFWS-08P8-GKHN

S4SV-UFWS-SJKI-MYWU

S4SV-UFWS-FB8X-CRHY

S4SV-UFWS-CLC6-K5FK

S4SV-UFWS-OYHB-R354

S4SV-UFWS-X317-J5CN

S4SV-UFWS-OT18-57CT

S4SV-UFWS-ZPDO-7XFZ

S4SV-UFWS-L6D0-MN75

S4SV-UFWS-2GHM-CMC6

S4SV-UFWS-NTC1-Q6PT

S4SV-UFWS-XYL5-J4QY

S4SV-UFWS-I9D2-CWKX

S4SV-UFWS-XWXQ-WM5U

S4SV-UFWS-9X7L-6FS9

S4SV-UFWS-G3IG-V5JV

S4SV-UFWS-G7N3-WT4C

S4SV-UFWS-RGLC-S7QM

S4SV-UFWS-34HX-Z9YQ

S4SV-UFWS-CO74-G94K

S4SV-UFWS-1YGH-D5PP

S4SV-UFWS-W5S0-TURM

S4SV-UFWS-AS9T-FYGM

S4SV-UFWS-U740-6WWD

S4SV-UFWS-5ES4-Y5FJ

S4SV-UFWS-BF9J-WWZV

S4SV-UFWS-FYZY-MHV5

S4SV-UFWS-GNVF-CMC9

S4SV-UFWS-U4PS-3W9Y

S4SV-UFWS-30B2-3CJ5

S4SV-UFWS-SN0U-XWYY

S4SV-UFWS-ARWJ-6ZN3

S4SV-UFWS-9ANW-ZMTF

S4SV-UFWS-HDDR-9TSH

S4SV-UFWS-CW96-TMJ6

S4SV-UFWS-13XS-ZPKM

S4SV-UFWS-IT80-CK7C

S4SV-UFWS-0AH6-XK3N

S4SV-UFWS-1EJQ-5WSU

S4SV-UFWS-E8MT-VFZ3

S4SV-UFWS-UGLL-SRU4

S4SV-UFWS-NLOG-TRS6

S4SV-UFWS-GIC4-U9XF

S4SV-UFWS-Z3WE-KUT4

S4SV-UFWS-V3I4-MCTG

S4SV-UFWS-PVNR-M4R9

S4SV-UFWS-M5JL-CWGP

S4SV-UFWS-4UTN-H7W4

S4SV-UFWS-2OMU-P39K

S4SV-UFWS-XDEB-C9VW

S4SV-UFWS-00JX-9PRP

S4SV-UFWS-U5LI-6HPU

S4SV-UFWS-JZR8-3R44

S4SV-UFWS-8ZW5-FFY7

S4SV-UFWS-3S8H-HTC6

S4SV-UFWS-VPX4-VP9Y

S4SV-UFWS-FIH4-V4ZC

S4SV-UFWS-5F9B-QJVS

S4SV-UFWS-OTRF-N3NN

S4SV-UFWS-A7N5-JVWM

S4SV-UFWS-KOJX-GKG9

S4SV-UFWS-3H9L-9TPC

S4SV-UFWS-LM5K-UZK3

S4SV-UFWS-IKFC-RCDY

S4SV-UFWS-VEQX-DT9Y

S4SV-UFWS-WGAW-N7UG

S4SV-UFWS-XZGL-3NPR

S4SV-UFWS-NQZ8-66XQ

S4SV-UFWS-W08M-5SM4

S4SV-UFWS-XVXQ-MQWN

S4SV-UFWS-UGF1-9JGY

S4SV-UFWS-3GFS-6Z3T

S4SV-UFWS-PJE3-XKXV

S4SV-UFWS-EVNZ-MHDD

S4SV-UFWS-PCXS-U7XP

S4SV-UFWS-M5WB-VMDX

S4SV-UFWS-ULLZ-VCGX

S4SV-UFWS-XVDO-UK3K

S4SV-UFWS-ZM9D-HFNV

S4SV-UFWS-HTO3-ZZ7F

附件是MistHill 同学提供的授权文件,工程文件等。


上传的附件 si4.pediy.lic
si4.zip

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功