0
点赞
收藏
分享

微信扫一扫

代码保护壳的优化(实现客户端隐藏壳跳转代码)

清冷的蓝天天 2022-02-09 阅读 49

通过调试我们之前加壳后的程序。

发现从这个代码执行过后,跳转到了一个新的模块

这个函数又是返回一个地址 然后跳转到新的模块

跳过去第一句又是pop,所以有经验的人很容易看出来其端倪 。(这个壳相当于什么都没有保护)

 我们可以对这段代码进行加密,比如可以用vm虚拟机的技术

也可以将这段代码删掉,开头就变成int3,int3就会崩溃,到了异常的检测,在壳处理程序里再对这个异常检测里面去恢复整个过程,这样分析难度就大大增加了。

我们就把这段代码删掉,利用异常机制,然后让它自动跳转。

在PushCode函数 AddCode 函数 中参数添加 是否隐藏的参数

信息映射到UI层。

增加结构体成员 是否隐藏标志位

typedef struct CODEContext
{
	unsigned start;
	bool	 hide;
	unsigned short r_couent; //重定位信息
	unsigned short len;		//代码长度
}*PCODEContext;

再将写入这块客户端代码扩上if 

 if (!hide)
    {
        memcpy(buffer, _AsmCode, 11);//写入客户端跳转带代码
    char* _pushIndex = _AsmCode + 3;//修改序号
	_pushIndex[0]++;//
	}
	_dataHead += sizeof(CODEContext);

这样就删除了客户端原本的代码自己添加的那段代码

ShellExecute(this->GetSafeHwnd(), L"open", OutFilePath, NULL, NULL, SW_SHOW);//添加自动打开文件夹

接下来就要在注入的模块中接管异常来实现对壳程序代码的恢复

举报

相关推荐

0 条评论