网马总是想方设法的混淆代码,混淆到看不懂为止,然而通篇阅读一篇代码确实是头疼的事情,所以,有必要针对不同加密,自己写函数来解密。
文中提及网马代码可在此下载(密码safelab):
http://cid-a6b213403dbd59af.skydrive.live.com/self.aspx/.Public/Sample/malicious.zip

这是一个国外网马,可以看到代码被加密到看不懂的地步,不过很快就能找到解密算法,因为最后的字符操作太明显了,而且找到类似加密的密文:
sggk://35.744.838.09/wzgz/a/vc.ksk?s=vc7
(可以使用Redoce的引号数据提取->合并行)
这样,根据它的算法,我们可以写一个小的C程序(Java跟C语法很近嘛,不用改多少的)

#include <stdio.h>

void Decode(char *Lfp5){
   int k;char Lfw3;
   for(k=0;k   { Lfw3 = Lfp5[k];
     if (Lfw3==32){Lfw3=35;}
     else if (Lfw3==35){Lfw3=32;}
     else if (Lfw3==59){Lfw3=64;}
     else if (Lfw3==64){Lfw3=59;}
     else if (Lfw3==37){Lfw3=42;}
     else if (Lfw3==42){Lfw3=37;}
     else if (Lfw3>=97 && Lfw3<=122)
     {Lfw3=Lfw3-97;Lfw3=25-Lfw3;Lfw3+=97;}
     else if (Lfw3>=65 && Lfw3<=90)
     {Lfw3=Lfw3-65;Lfw3=25-Lfw3;Lfw3+=65;}
     else if (Lfw3>=48 && Lfw3<=57)
     {Lfw3=Lfw3-48;Lfw3=9-Lfw3;Lfw3+=48;}
     printf("%c",Lfw3);}
     printf("\n");}

void main(){
 Decode("sggk://35.744.838.09/wzgz/a/vc.ksk?s=vc7");
 Decode("sggk://35.744.838.09/wzgz/a/vc.ksk?s=vc2");
 getch();}


其实是一个很简单的字符替换算法,执行一下就能看到结果了!
结果如下: