【smc代码示例】

smc(self-modifyingcode)动态代码加密技术,指通过修改代码或数据,阻止别人直接静态分析,然后在动态运行程序时对代码进行解密,达到程序正常运行的效果

代码:加密解密4 (17.4)

try
	{
		_asm inc eax // 在十六进制工具中对应0x40  
		_asm dec eax // 在十六进制工具中对应0x48

 
	begindecrypt:

		...........
						
	enddecrypt:
		_asm inc eax // 在十六进制工具中对应0x40  
		_asm dec eax // 在十六进制工具中对应0x48
		return TRUE;

	}
	
	catch (...)
	{
		MessageBoxA(NULL, TEXT("请注册,以获得完整的功能 !"), TEXT("提示"), 0);
		Decrypt(ptr, Size, k);//如注册码不正确,则必须得再次调用Decrypt()将address1和address2之间数据还原
		return FALSE;
	}
void Decrypt(DWORD* pData, DWORD Size, DWORD value)
{
	//首先要做的是改变这一块虚拟内存的内存保护状态,以便可以自由存取代码
	MEMORY_BASIC_INFORMATION mbi_thunk;
	//查询页信息
	VirtualQuery(pData, &mbi_thunk, sizeof(MEMORY_BASIC_INFORMATION));
	//改变页保护属性为读写。
	VirtualProtect(mbi_thunk.BaseAddress, mbi_thunk.RegionSize, PAGE_READWRITE, &mbi_thunk.Protect);

	Size = Size / 0x4; //对数据共需要异或的次数
	//解密begindecrypt与enddecrypt标签处的数据
	while (Size--)
	{
		*pData = (*pData) ^ value;
		pData++;
	}

	//恢复页的原保护属性。
	DWORD dwOldProtect;
	VirtualProtect(mbi_thunk.BaseAddress, mbi_thunk.RegionSize, mbi_thunk.Protect, &dwOldProtect);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值