逆向工程Javascript在Google+按钮后面

use*_*384 9 javascript

我正在尝试模拟谷歌+按钮.在LINK的某些部分代码中,它将会话ID转换为某种哈希.我发现会话ID名称是SAPISID,转换后的哈希名称是SAPISIDHASH,任何人都可以告诉我代码的哪一部分哈希部分.任何帮助将不胜感激.我已经花了6个小时直,仍然没有线索:(

例如VUOyLIU22fNPz2ko/AbGsxW03_WHoGjaJq is SAPISIDf17aa630b9b9a105dad437b0fedcafe429f6fca2 is SAPISIDHASH.在PHP我尝试了所有类型的哈希..没有匹配.

Dav*_*mas 18

胜利!对我来说至少= p我正在寻找的SAPISIDHASH是api控制台中的那个.自动化相当大的工作,完全合法.

无论如何 - >我找到的是当前javascript毫秒时间戳上的SHA1加上你的cookie加上你当前的SAPISID加上域名来源

为了使我的要求工作,我不得不在请求中包含下列头部 Authorization:SAPISIDHASH 1439879298823_<hidden sha1 hash value>X-Origin:https://console.developers.google.com

我假设的第一个标题告诉服务器你的时间戳和你的sha1值.第二个(如果不包括它则中断)告诉它在sha1算法中使用的原点.

我通过挖掘和调试大量的缩小的js来找到算法.注意值之间有空格

伪代码是基本的>

sha1(new Date().getTime() + " " + SAPISID + " " + origin)

这至少是我在2015年的用例中获得SAPISIDHASH价值的方式(几年后我知道)...与你的不同但也许有一天我会帮助其他一些年轻的好黑客

  • 人们如何弄清楚这样的事情?哈哈 (4认同)

aks*_*aks 7

所有学分都归功于戴夫·托马斯。

我只想澄清一下,对于 X-Origin 或 Origin,您不包括“X-Origin:”或“Origin:”

这是一个例子:

public class SAPISIDHASH {

    public static void main(String [] args) {

        String sapisid = "b4qUZKO4943exo9W/AmP2OAZLWGDwTsuh1";
        String origin = "https://hangouts.google.com";
        String sapisidhash = "1447033700279" + " " + sapisid + " " + origin;
        System.out.println("SAPISID:\n"+ hashString(sapisidhash));
        System.out.println("Expecting:");
        System.out.println("38cb670a2eaa2aca37edf07293150865121275cd");

    }

    private static String hashString(String password)
    {
        String sha1 = "";
        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(password.getBytes("UTF-8"));
            sha1 = byteToHex(crypt.digest());
        }
        catch(NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch(UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
        return sha1;
    }

    private static String byteToHex(final byte[] hash)
    {
        Formatter formatter = new Formatter();
        for (byte b : hash)
        {
            formatter.format("%02x", b);
        }
        String result = formatter.toString();
        formatter.close();
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

Java 中 sha1 的源代码: Java String to SHA1