我想让程序能修改自己的代码段,请问有没有办法实现?

PDD123 2016-03-16 09:32:49
主要是为了阻碍静态反编译。
我就是想把关键代码修改了,然后在程序一开始运行,就把它修改回来。
...全文
362 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2016-03-17
  • 打赏
  • 举报
回复
函数 加密 , 执行前 解密
Saleayas 2016-03-17
  • 打赏
  • 举报
回复
看看 LastError 是什么? 很多时候,就是权限的问题。
PDD123 2016-03-17
  • 打赏
  • 举报
回复
引用 2 楼 CharlesSimonyi 的回复:
用VirtualProtect改了代码段所在内存的保护属性,就可以随便读写了。 防止静态反汇编最方便的办法就是加壳了。
typedef int (* returnInt)();

int return0()
{
	return 0;
}

//////////////////////////////////////////////////////
	union
	{
		returnInt lpfun;
		char * lpchar;
	};

	lpfun=return0;


	DWORD oldProtect;
	if(VirtualProtectEx(AfxGetInstanceHandle(),lpfun,10,PAGE_READWRITE,&oldProtect))
		AfxMessageBox("DDD");

	CString str;
	str.Format("%d",lpchar[0]);
	AfxMessageBox(str);
	lpchar[0]=4;
	str.Format("%d",lpchar[0]);
	AfxMessageBox(str);
一直不成功,VirtualProtectEx执行失败,求指点,请问还有其他什么注意点么?
PDD123 2016-03-17
  • 打赏
  • 举报
回复
引用 6 楼 CharlesSimonyi 的回复:
改变本进程的内存属性用VirtualProtect就行了,你要用VirtualProtectEx的话,第一个参数是进程句柄,用GetCurrentProcess()来获取。另外最好把属性改成PAGE_EXECUTE_READWRITE,如果改成PAGE_READWRITE的话代码段的这段内存会变成不可执行,有可能出现一些异常。
谢谢,能修改了。
encoderlee 2016-03-17
  • 打赏
  • 举报
回复
改变本进程的内存属性用VirtualProtect就行了,你要用VirtualProtectEx的话,第一个参数是进程句柄,用GetCurrentProcess()来获取。另外最好把属性改成PAGE_EXECUTE_READWRITE,如果改成PAGE_READWRITE的话代码段的这段内存会变成不可执行,有可能出现一些异常。
encoderlee 2016-03-16
  • 打赏
  • 举报
回复
用VirtualProtect改了代码段所在内存的保护属性,就可以随便读写了。 防止静态反汇编最方便的办法就是加壳了。
孤客天涯 2016-03-16
  • 打赏
  • 举报
回复
只能依赖于监护进程了,不要就是加壳防反编译

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧