谷歌如何加密/混淆http响应以使其几乎无法用肉眼看到?

时间:2011-06-12 08:42:10

标签: ajax obfuscation

对于任何特定搜索谷歌即时ajax返回此:

{
    e: "tGj0TZ-XLaXh0QGyw7nuDA",
    c: 1, 
    u: "http://www.google.com/s?hl\x3des\x26xhr\x3dt\x26q\x3dque\x26cp\x3d3\x26pf\x3dp\x26sclient\x3dpsy\x26source\x3dhp\x26aq\x3d\x26aqi\x3d\x26aql\x3d\x26oq\x3d\x26pbx\x3d1\x26bav\x3don.2,or.r_gc.r_pw.\x26fp\x3daee70eb115de80e6\x26biw\x3d1440\x26bih\x3d653\x26tch\x3d1\x26ech\x3d4\x26psi\x3dWWb0TYasBu_q0QGW5IjmAg.1307862617656.1",
    d: "[\x22que\x22,[[\x22que\x22,0,\x220\x22],[\x22que\\u003Cb\\u003E es el amor\\u003C\\/b\\u003E\x22,0,\x221\x22],[\x22que\\u003Cb\\u003Epasa\\u003C\\/b\\u003E\x22,0,\x222\x22],[\x22que\\u003Cb\\u003E me dices\\u003C\\/b\\u003E\x22,0,\x223\x22],[\x22que\\u003Cb\\u003E significa mi nombre\\u003C\\/b\\u003E\x22,0,\x224\x22]],{}]"
} 
{
    e: "tGj0TZ-XLaXh0QGyw7nuDA",
    c: 0,
    u: "http://www.google.com/s?hl\x3des\x26xhr\x3dt\x26q\x3dque\x26cp\x3d3\x26pf\x3dp\x26sclient\x3dpsy\x26source\x3dhpx26aq\x3d\x26aqi\x3d\x26aql\x3d\x26oq\x3d\x26pbx\x3d1\x26bav\x3don.2,or.r_gc.r_pw.\x26fp\x3daee70eb115de80e6\x26biw\x3d1440\x26bih\x3d653\x26tch\x3d1\x26ech\x3d4\x26psi\x3dWWb0TYasBu_q0QGW5IjmAg.1307862617656.1",
    d: "" 
}

通过此响应,页面会刷新结果。谷歌使用什么样的方法来实现这个级别的加密/混淆(我不确定在这种情况下使用哪个术语)

1 个答案:

答案 0 :(得分:3)

对此没有任何混淆。它只是编码,因此它可以在JavaScript字符串中传输而不会破坏它。

在JavaScript字符串中,您可以使用转义序列来表示字符:\xFF以编码 ISO-8859-1 字符,使用\uFFFF来编码 Unicode < / em>字符。例如,\x3d是等号=\u003C is the less-than symbol <(在内部,所有JavaScript字符串都是Unicode)。

这里有两个对象文字,可用于创建实际对象。试试JavaScript控制台。

var test = {
    e: "tGj0TZ-XLaXh0QGyw7nuDA",
    c: 1, 
    u: "http://www.google.com/s?hl\x3des\x26xhr\x3dt\x26q\x3dque\x26cp\x3d3\x26pf\x3dp\x26sclient\x3dpsy\x26source\x3dhp\x26aq\x3d\x26aqi\x3d\x26aql\x3d\x26oq\x3d\x26pbx\x3d1\x26bav\x3don.2,or.r_gc.r_pw.\x26fp\x3daee70eb115de80e6\x26biw\x3d1440\x26bih\x3d653\x26tch\x3d1\x26ech\x3d4\x26psi\x3dWWb0TYasBu_q0QGW5IjmAg.1307862617656.1",
    d: "[\x22que\x22,[[\x22que\x22,0,\x220\x22],[\x22que\\u003Cb\\u003E es el amor\\u003C\\/b\\u003E\x22,0,\x221\x22],[\x22que\\u003Cb\\u003Epasa\\u003C\\/b\\u003E\x22,0,\x222\x22],[\x22que\\u003Cb\\u003E me dices\\u003C\\/b\\u003E\x22,0,\x223\x22],[\x22que\\u003Cb\\u003E significa mi nombre\\u003C\\/b\\u003E\x22,0,\x224\x22]],{}]"
};

console.dir(test);

收益率(在谷歌浏览器中)

Object
    c: 1
    d: "["que",[["que",0,"0"],["que\u003Cb\u003E es el amor\u003C\/b\u003E",0,"1"],["que\u003Cb\u003Epasa\u003C\/b\u003E",0,"2"],["que\u003Cb\u003E me dices\u003C\/b\u003E",0,"3"],["que\u003Cb\u003E significa mi nombre\u003C\/b\u003E",0,"4"]],{}]"
    e: "tGj0TZ-XLaXh0QGyw7nuDA"
    u: "http://www.google.com/s?hl=es&xhr=t&q=que&cp=3&pf=p&sclient=psy&source=hp&aq=&aqi=&aql=&oq=&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=aee70eb115de80e6&biw=1440&bih=653&tch=1&ech=4&psi=WWb0TYasBu_q0QGW5IjmAg.1307862617656.1"
    __proto__: Object

你可以继续:

console.dir( eval(test.d) );