【问题标题】:Reverse engineering Javascript behind Google+ button对 Google+ 按钮背后的 Javascript 进行逆向工程
【发布时间】:2013-05-30 05:31:43
【问题描述】:

我正在尝试模拟 google+ 按钮。在 LINK 的某些代码中,它将会话 id 转换为某种哈希值。我发现会话 id 名称是 SAPISID 并且转换后的哈希名称是 SAPISIDHASH ,谁能告诉我哪部分代码做哈希部分。任何帮助将不胜感激。我已经连续花了 6 个小时,仍然没有任何线索:(

例如 VUOyLIU22fNPz2ko/AbGsxW03_WHoGjaJq is SAPISIDf17aa630b9b9a105dad437b0fedcafe429f6fca2 is SAPISIDHASH 。在 php 中,我尝试了所有类型的 hash..nothing 匹配。

【问题讨论】:

  • 哈希是 40 个十六进制数字字符,所以它可能是一些数据的 SHA-1 hash。究竟什么数据是任何人的猜测......
  • 这不仅是任何人的猜测......而且这意味着他们会竭尽全力确保没有人能够猜测它。
  • ripemd160 也有 40 个字符.. 我已经尝试了所有的哈希值.. 代码做了一些符号替换我猜.. 所以需要找到它的作用
  • ...也猎捕这只鸭子

标签: javascript


【解决方案1】:

胜利!至少对我来说好?。我正在寻找的SAPISIDHASH 是 API 控制台中的一个。相当大的工作自动化,完全合法。 我发现的是当前 JavaScript 毫秒时间戳上的 SHA1 加上您当前的SAPISID 来自您的 cookie 以及域来源。为了 为了使我的请求生效,我必须在请求中包含以下标头:

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 值的方式 (几年后我知道)......与你的不同,但也许我会帮助一些人 有一天会出现其他年轻的优秀黑客。

【讨论】:

  • 如果你想笑,新的 Creator Manager 似乎也在使用 SAPISIDHASH :如果你愿意,另一个挑战^^
  • 谢谢,你是最棒的。我用不同的 API 得到了相同的分辨率
  • 非常感谢@Dave。你节省了我的时间:)
  • 非常感谢!有效!蟒蛇:sha1(' '.join([str(int(time.time())), cookie['SAPISID'].coded_value, 'https://subdomain.google.com']).encode()).hexdigest()
【解决方案2】:

所有功劳归于戴夫·托马斯。

我只是想澄清一下,对于 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 String to SHA1

【讨论】:

    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2011-12-08
    • 2010-09-22
    相关资源
    最近更新 更多