首页
社区
课程
招聘
[旧帖] [讨论][讨论]AES算法如此应用于加壳程序中好不好 0.00雪花
发表于: 2009-7-1 20:10 1436

[旧帖] [讨论][讨论]AES算法如此应用于加壳程序中好不好 0.00雪花

2009-7-1 20:10
1436
初学加壳,一点不成熟的设想,请大家指教:
    首先说明我已经做的:我应用了AES-256算法于一个简单的加壳程序中,就是对新增加的壳区块(外壳第二段中)、.text区块、.data区块进行了AES-256加密,然后在新增加的壳区块第一段(没加密)中还原外壳第二段,然后在外壳第二段还原已加密过的代码区块和数据区块。
    AES算法的密钥是我输入的一串32字节字符,经过密钥扩展,得到了256字节的一个密钥表。由于这个AES算法是网上找的标准的AES算法,我只对S-box表进行了修改,对密钥扩展函数没进行修改,所以256字节的密钥表前32字节即是我输入的原始密钥,该表后面的224字节都是根据此32字节演变过来的。该表最后被我保存在外壳第一段中,解密函数中直接引用该表参与运算。用OD可以轻松找到此密钥表,进而得到原始密钥。为了进一步提高AES算法的保护强度,我准备对密钥表开刀。
    
    这是我准备做的,不知有没有一点作用:
    加密时我对新增加的壳区块(包括第一段和第二段(此时AES算法尚未加密该部分))在内存中的数据进行CRC32校验,将得到8个字节的校验值,将此校验值扩展为32字节,当作AES算法的原始密钥,经过密钥扩展生成新的密钥表。加密算法使用该表,但是解密算法并不直接调用该表。因为并不将该密钥表写入加壳后的PE文件,所以外壳第二段中要解密.text区块、.data区块时,首先调用CRC32校验生成校验值,然后经历相同的过程生成密钥表,并取该密钥表以解密.text区块、.data区块。这样做的好处是防止有人脱壳时修改外壳第二段的代码(AES解密函数运行之前有反调试器代码逼迫脱壳者在内存中修改此反调试代码以顺利继续调试),这样生成的CRC32校验值就会错误,那么当然就不能解密.text区块、.data区块了。
    也许有人会说,在外壳第二段运行过程中,外壳第二段的内存镜象本身也在改变,但是我想改变的应该是一些定义变量的内存空间,代码本身应当不变,所以对外壳区块的校验应该剔除所以的“外壳所定义要用到的变量”。
    为了迷惑下有些对算法极不熟悉的脱壳者,可以将原来的AES算法密钥表保留以误导他们。
    
    如果以上的做法可行,那么现在我就不清楚如何做才能强迫脱壳者“只有在分析完我的AES算法后才能脱掉我的壳”。听说应该用一种很简单的加密算法,在运行该代码前先解密,运行完后重新加密,这样做能有效干扰DUMP,不知道行不行。
    
    耐心听我这么多废话的同学,特别感激,不知道怎么就写了这么多,嘿嘿。  
另:
    6月1日,有副论主Inva发给我一个邀请码,可能是因为我之前一个回复,里面提及了NGA论坛,莫非该大大是NGAer,pediy中偶相逢,相当惊奇。可惜由于上个月毕业设计弄了半天才得了个良,居然没空上论坛看看,邀请码已到期,可悲可叹,想写点加壳代码苦于缺少可借鉴的资料又不知道能写好不。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没人想说点什么吗,过几天估计要开始这样写代码了,设想如果就不现实的话会郁闷死人的。大家看看,给点意见嘛。
2009-7-2 19:59
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
3
看完了, 没明白LZ要表达什么。
第一次听说把AES算法融于加壳软件中。

期待LZ的代码。某些时候代码比语言更容易看懂。
2009-7-2 20:24
0
游客
登录 | 注册 方可回帖
返回
//