2013-06-03 32 views
7

我想模擬谷歌+ button.In LINK代碼的一部分,它將會話id轉換爲一些有點散列。我發現會話id名稱是SAPISID和轉換後的散列名稱是SAPISIDHASH任何人都可以告訴我哪部分代碼是散列部分的。任何幫助將是appreciated.i已經花了6個小時了,還是沒有頭緒:(逆向工程Javascript背後的Google+按鈕

對於實例VUOyLIU22fNPz2ko/AbGsxW03_WHoGjaJq is SAPISIDf17aa630b9b9a105dad437b0fedcafe429f6fca2 is SAPISIDHASH。在php中我嘗試了所有類型的hash..nothing比賽。

+0

散列是十六進制數字40個字符,所以它可能是一個[SHA-1散列(http://en.wikipedia.org/wiki/SHA-1)的一些數據。確切地說*什麼*數據是任何人的猜測... – maerics

+0

不僅是任何人的猜測......但這意味着他們竭盡全力確保沒有人能夠猜到它。 – djechlin

+0

ripemd160也40字符..我已經嘗試所有的哈希..代碼做一些符號替換我猜..所以需要找到它做什麼 – user2449384

回答

6

勝利!很適合我至少= p SAPISIDHASH我一直在尋找的是在api控制檯。自動化的相當大的工作,完全合法。

反正 - >我發現一個是當前JavaScript毫秒時間戳加上你當前的SHA1 SAPISID從您的Cookie加上域名原產地

In或DER了我的要求工作,我不得不在請求 Authorization:SAPISIDHASH 1439879298823_<hidden sha1 hash value>X-Origin:https://console.developers.google.com

第一頭我想告訴你的服務器時間戳和您的SHA1值以下的標頭。第二個(如果不包含它會中斷)告訴它在sha1算法中使用的起點。

我通過挖掘和調試滾出去噸精縮JS 注有值之間追加的空格中發現的算法

的僞代碼是basiclly>

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

至少我在2015年的使用案例中得到了我的SAPISIDHASH值(幾年後我知道)...與您的不同,但也許我會幫助其他一些年輕的好黑客有一天

+0

謝謝老兄!你是最棒的。 –

2

Dave Thomas的所有學分。

我只是想澄清,對於X-起源,或原產地,你不包括「X-來源:」或「來源:」

下面是一個例子:

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; 
    } 
} 

源SHA1在Java中: Java String to SHA1