论坛风格切换
正版合作和侵权请联系 sd173@foxmail.com
 
  • 帖子
  • 日志
  • 用户
  • 版块
  • 群组
帖子
购买邀请后未收到邀请联系sdbeta@qq.com
  • 1840阅读
  • 0回复

[求助-软件问题]通过枚举KEY实现自动解密XOR shellcode [复制链接]

上一主题 下一主题
离线王者
 
发帖
*
今日发帖
最后登录
1970-01-01
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-10-30 11:04:15
<!-- 通过枚举KEY实现自动解密XOR shellcode -->
<!-- Written by glacier_lk -->
<!-- Build090515 -->
<title>XOR KEY Detective v1.0</title>
<center>
<input value="AutoDetection" type=button onclick=(txt.value=AutoXor())><br>
<font color="#FF0000">请输入完整的shellcode(至少确保链接部分的完整!):</font><br>
<textarea id=txt rows="33" cols="85"></textarea>
</center>
<script>
function AutoXor()
{
     jnh=txt.value;//保存一份输入值。
    for(j=0;j<255;j++)
     {
        if(j==0)
         {
             lk=shellcode();
         }
        else
        {
             lk=xorshellcode(jnh,j);
         }
        if(lk.search("http://")!=-1)//包含“http://”字符串。
        {
             txt.value=lk;
            if(confirm("Abort Detecting?"))
             {
                 txt.value=lk;
                 alert("Detected XOR KEY:0x"+j.toString(16));
                return lk; //包含“http”且用户同意终止继续运行程序则返回结果。
            }
            else
            {
                 txt.value=jnh;//包含“http://”但用户不允许终止程序,则替换掉刚才的解密结果。
            }
         }
     }
}

function shellcode()
{
   string=txt.value;
   txt.value=""
  ustr=unescape(string);
  var code,str="";
  var high,low=0;
   glacierlk="";
  for(var i=0;i<ustr.length;i++)
   {
     code=ustr.charCodeAt(i);
     low=code%256;
     high=(code-low)/256;
    
     glacierlk+=(String.fromCharCode(low)+String.fromCharCode(high));
   }
  return glacierlk;
}

function xorshellcode(str,key)//带XOR密钥的shellcode解密
{
     lk=str.split("%u");//去除“%u”并分解掉字符串。
    glacierlk="";
    for(i=0;i<lk.length;i++)//对字符串中的每个字段进行XOR处理。
    {
         glacierlk+=xors(lk,key);
     }
     glacierlk=replaceNull(glacierlk);//在转换为字符前,去掉空字符。
    glacierlk=unescape(glacierlk);//转换字符。
    return glacierlk;
}

function xors(strs,key)
{
     str1=strs.substr(0,2);//shellcode低位
    str2=strs.substring(2);//shellcode高位
    str1=(parseInt(str1,16)^parseInt(key,10));
     str1=str1.toString(16);
    if(str1.length<2)
     {
         str1=new Array(3-str1.length).join("0")+str1;
     }
     str2=(parseInt(str2,16)^parseInt(key,10));
     str2=str2.toString(16);
    if(str2.length<2)
     {
         str2=new Array(3-str2.length).join("0")+str2;
     }
     strs="%"+str2+"%"+str1;
    return strs;
}

function divide2(ss)
{
    return ss.substring(2);
}

function replaceNull(strs)
{
     Strstr = strs;
     SourStr = ""
    ObjStr = ""
    strs = VBreplace(Strstr,SourStr,ObjStr);
    return strs;
}
</script>

<script language="VBScript">
Function VBreplace(Strstr,SourStr,ObjStr)
   VBreplace = replace(Strstr,SourStr,ObjStr)
End Function
</script>