簡體   English   中英

Google+按鈕后面的逆向工程Javascript

[英]Reverse engineering Javascript behind Google+ button

I am trying to simulate google+ button.In Somepart of code at LINK ,It converts the session id into Some kinda hash.What i found is session id name is SAPISID and the converted hash name is SAPISIDHASH, Can anyone tell me which part of code做 hash 部分。 任何幫助將不勝感激。我已經連續花了 6 個小時,仍然沒有任何線索:(

例如VUOyLIU22fNPz2ko/AbGsxW03_WHoGjaJq is SAPISIDf17aa630b9b9a105dad437b0fedcafe429f6fca2 is SAPISIDHASH 在 php 中,我嘗試了所有類型的 hash.. 沒有匹配項。

勝利。 至少對我來說好SAPISIDHASH我正在尋找的 SAPISIDHASH 是 API 控制台中的那個。 相當大的工作自動化,完全合法。 我發現的一個是當前 JavaScript 毫秒時間戳上的 SHA1 加上來自 cookie 的當前SAPISID加上域來源。 為了使我的請求生效,我必須在請求中包含以下標頭:

Authorization:SAPISIDHASH 1439879298823_<hidden sha1 hash value>

和:

X-Origin:https://console.developers.google.com

我假設的第一個 header 告訴服務器您的時間戳和您的 SHA1 值。 第二個(如果你不包括它就中斷)告訴它在 SHA1 算法中使用的來源。 我通過挖掘和調試大量縮小的 JS 找到了該算法。注意在值之間附加了空格 偽代碼基本上是:

sha1(new Date().getTime() + ' ' + SAPISID + ' ' + origin);

至少這就是我在 2015 年(幾年后我知道)在我的用例中獲得SAPISIDHASH價值的方式......與你的不同,但也許有一天我會幫助其他一些年輕的優秀黑客。

所有學分都歸功於戴夫·托馬斯。

我只是想澄清一下,對於 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;
    }
}

Java 中 sha1 的來源: Java 字符串到 SHA1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM