首页
论坛
课程
招聘
[原创]SMC之抛砖引玉(VC++6.0)
2009-6-25 17:50 8165

[原创]SMC之抛砖引玉(VC++6.0)

2009-6-25 17:50
8165
SMC是什么意思?它的英文名叫“Self Modifying Code”,顾名思义,就是“代码自修改”
先来个简单的,来改数据
CString cs1,cs2; 
cs1="123456789"; 
cs2="abcdefghi"; 
__asm 
{ 
  mov esi,cs1//A函数地址 
  mov edi,cs2//B函数地址 
  mov ecx,9h 
  rep movsb 
} 
MessageBox(cs2); 

通过MOVSB命令来改变数据
下面来看怎样代码:
void CSMCDlg::OnOK() 
{
	msgboxB();
	BOOL (CSMCDlg::*pa)(void)=&CSMCDlg::msgboxA;
	BOOL (CSMCDlg::*pb)(void)=&CSMCDlg::msgboxB;
	 	__asm
	 	{
	 		mov esi,pa
	 		mov edi,pb
			mov ecx,pb
			sub ecx,esi//长度要注意,这里因为A.B写得很近所以可以这样得出
			rep movsb
		}
	msgboxB();	
}
BOOL CSMCDlg::msgboxA()
{	
	::MessageBox(m_hWnd,"123456789","LILI",0);
	return true;
}
BOOL CSMCDlg::msgboxB()
{
	::MessageBox(m_hWnd,"987654321","LILI",0);
	return true;
}
#pragma comment(linker, "/SECTION:.text,ERW")//.text段一定要改成可读写

这就是SMC的基本原理,用一段代码来覆盖别一段代码(注意代码的长度)
希望大家给点建议!

【看雪培训】《Adroid高级研修班》2022年夏季班招生中!

收藏
点赞0
打赏
分享
最新回复 (14)
雪    币: 1570
活跃值: 活跃值 (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
柳州小林 活跃值 2 2009-6-25 17:54
2
0
先占个位,以后有什么新的关于SMC的心得就写在这里
当然也希望大家谈谈自己对SMC的心得!
-----------------------------------------------------------------------------
今天想了个笨办法,来得到函数的(机器码的)长度:
BOOL CSMCDlg::msgboxA()
{	
	::MessageBox(m_hWnd,"123456789","LILI",0);
	return true;
}
int CSMCDlg::Aend()
{
	return 0;
}

.......................
其它代码
.........................

BOOL CSMCDlg::msgboxB()
{
	::MessageBox(m_hWnd,"987654321","LILI",0);
	return true;
}
int CSMCDlg::Bend()
{
	return 1;
}

在一个函数(A)的结尾写一个无用的函数(Aend),并取得它的地址,两个地址相减,就得到了函数(A)的长度
void CSMCDlg::OnOK() 
{
	int Alen,Blen;
	msgboxB();
	BOOL (CSMCDlg::*pa)(void)=&CSMCDlg::msgboxA;
	BOOL (CSMCDlg::*pb)(void)=&CSMCDlg::msgboxB;
	int (CSMCDlg::*paend)(void)=&CSMCDlg::Aend;
	int (CSMCDlg::*pbend)(void)=&CSMCDlg::Bend;//这两个函数的代码不能一样,否则会被VC++优化,变成两个指针指向同一地址
	__asm
	{
		mov eax,pa
		mov ebx,paend
		sub ebx,eax
		mov Alen,ebx
		mov eax,pb
		mov ebx,pbend
		sub ebx,eax
		mov Blen,ebx
	 	mov esi,pa
	 	mov edi,pb
		mov ecx,Alen//这里长度应该不会有错误了的
		rep movsb
	}
	msgboxB();	
}
上传的附件:
雪    币: 1570
活跃值: 活跃值 (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
柳州小林 活跃值 2 2009-6-26 22:42
3
0
一下就沉下去了,顶起来!
是不是大家对SMC这东西不太感冒
雪    币: 141
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
潇夜雨 活跃值 2009-6-26 23:54
4
0
谢谢,思想值得学习呀
雪    币: 326
活跃值: 活跃值 (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
快雪时晴 活跃值 4 2009-6-27 10:19
5
0
写的很好,正好学习

SMC是不是有限制,只能是CODE段可写
雪    币: 313
活跃值: 活跃值 (22)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
keheng 活跃值 1 2009-6-27 10:41
6
0
看了你写的这些,稍有点感觉,但是还中不是很懂它的意思。。。功底太差。。
雪    币: 1570
活跃值: 活跃值 (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
柳州小林 活跃值 2 2009-6-27 14:47
7
0
#pragma comment(linker, "/SECTION:.text,ERW")//.text段一定要改成可读写
.text就是代码段,一般是不可写的,用了以上就可写了.
雪    币: 1570
活跃值: 活跃值 (10)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
柳州小林 活跃值 2 2009-6-27 14:48
8
0
我也是略知一二,哪里不懂,说出来,大家讨论讨论!
雪    币: 60
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
yzcyn 活跃值 2009-7-8 14:24
9
0
这种方法实际意义在那?
雪    币: 214
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rsa 活跃值 2009-7-8 20:20
10
0
ShellCode的自解码 还算SMC啊?
雪    币: 2
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风吹雪 活跃值 2009-7-8 22:17
11
0
学习中   正需要
雪    币: 118
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chenyeyws 活跃值 2009-7-11 09:47
12
0
好东西,顶一个.
雪    币: 202
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
snowshow 活跃值 2009-7-11 14:42
13
0
留名
雪    币: 1470
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
bithaha 活跃值 5 2009-7-11 17:23
14
0
smc 在碰到多线程的时候咋办
雪    币: 412
活跃值: 活跃值 (66)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
大头和尚 活跃值 2009-11-4 23:17
15
0
最近刚刚接触到SMC,跟LZ学习下。
游客
登录 | 注册 方可回帖
返回