首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确地模拟这种加密方法以为encryptedPwd字段生成适当的值?

如何正确地模拟这种加密方法以为encryptedPwd字段生成适当的值?
EN

Stack Overflow用户
提问于 2021-04-17 15:13:21
回答 1查看 1K关注 0票数 11

背景

我需要通过python脚本每周从Amazon的销售商中央门户中提取报告给我们的多个客户。我试图避免网络司机,因为他们的不一致,错误的性质跨不同的OSes (从经验)。因此,我认为这将是一个有趣的小项目(也许最终也是徒劳无益的锻炼)尝试反向工程sellercentral.amazon.com的登录过程。这个过程并不困难,除了初始登录表单中的两个字段:passwordmetadata1。下面将详细讨论password字段。metadata1字段似乎采用了类似的技术,同时引入了每隔几秒钟更改一次的额外障碍。当我监视metadata1值时,它似乎是使用各种浏览器度量的一个大型json对象生成的。但是,一次只做一件事,所以我将集中讨论这篇文章中的密码加密问题,并在以后的文章中关注metadata1

说到重点

在表单提交时,password字段中的值将使用本文中进一步讨论的技术进行加密。得到的加密值然后替换密码字段中的值,并重命名字段encryptedPwd

我的发现

到目前为止,我一直在检查javascript文件并逐步遍历代码序列,并了解了以下内容:

  • 他们正在使用一个专有的SiegeCrypto.js脚本作为主要的密码库(围城是亚马逊的安全侵入和安全团队)& SubtleCrypto是生成encryptedPwd - SiegeCrypto的过程的一部分,它首先在AuthenticationPortalSigninNA.js中找到,并声明了基本的初始加密定义:
代码语言:javascript
运行
复制
SiegeCrypto.addProfile("AuthenticationPortalSigninNA", {
  "password": {dataType: "AuthPortalSigninPasswordNA", requiresTail: false},
});
...
SiegeCrypto.addDataType({
    "dataTypeId": "AuthPortalSigninPasswordNA",
    "jwkPublicKey": {"kty":"RSA","e":"AQAB","n":"gXXZV1VqZ6k_uQtyJNJy5q-qvKdqrXJNgKUO1aYc1UPBVqlhCP0GPxf-0GSo-LEtArgcbF8-j6_vSLSqztYxxF8og--rB8zAyZ8DXZaugX-UiJDQnoJL_HtXKuwIm9U7oEPoeD6H4ZDcfbsPj77xVn7UA2-a90N4aZqMC8EIfXIy1tqSbSPnxPOaiEmy8xGtG-L3RdCyc7TL0Swd_f0_DjRT6ip91IBlCmquoa-xJgZ9e44PVH4AwdyssiV4ZLEZ5yFcE0zcRb_62kx_TQptidbJ4nHocFVjmUW9YsrAWeKrBmOGZEjO4vbATYs1Yf4vgcH7Ix61EPR5sbDP4SlBWQ"},
    "providerId": "si:md5",
    "keyId": "56d14edce8e2cb6c6842c59ddaee426e"
});

通过遍历代码,我能够找到算法的更多细节。

代码语言:javascript
运行
复制
*profile* (used by SiegeCrypto)
- password: {dataType: "AuthPortalSigninPasswordNA", requiresTail: false}
*publicKeyProvider* (added as a DataType to SiegeCrypto)
- keyId: 56d14edce8e2cb6c6842c59ddaee426e
- providerId: si:md5
*wrapKey*
- wrappingAlgorithm
  - name: RSA-OAEP
  - hash: SHA-256
  - modulusLength: 2048
  - publicExponent: [1, 0, 1]
*Additional Fields*
name: aes_128_gcm_iv12_tag16
encryption: AES-GCM
ivLength: 12
keyLength: 128
tagLength: 128

在后面的过程中,我能够找到以下内容,我假设这些参数是根据上面的加密规范进行处理的参数,但我不知道如何达到这一点。

代码语言:javascript
运行
复制
cipherMessage: Uint8Array(413) [1, 128, 0, 20, 124, 132, 165, 153, 149, 96, 94, 4, 210, ...]
messageHeader:
- algorithmId: 20
- contentType: 2
- encryptedDataKeys: [{"keyInfo": "56d14edce8e2cb6c6842c59ddaee426e"}]
- encryptionContext: {}
- frameLength: 12
- headerIvLength: 12
- messageId: Uint8Array(16) [124, 132, 165, 153, 149, 96, ...]
- type: 128
- version: 1

通过查看亚马逊的Amazon (Python回购),我发现以下三部分似乎是我所需要的。不过,我不知道从这里往哪里走。

代码语言:javascript
运行
复制
# algorithm, mode, data_key_length, iv_length, auth_length, auth_key_length=0
EncryptionSuite.AES_128_GCM_IV12_TAG16 = (algorithms.AES, modes.GCM, 16, 12, 16)

# algorithm_id,  encryption, message_format_version
AlgorithmSuite.AES_128_GCM_IV12_TAG16 = (0x0014, EncryptionSuite.AES_128_GCM_IV12_TAG16, 0x01)

# encryption_type, algorithm, padding_type, padding_algorithm, padding_mgf
WrappingAlgorithm.RSA_OAEP_SHA256_MGF1 = (EncryptionType.ASYMMETRIC, rsa, padding.OAEP, hashes.SHA256, padding.MGF1)

问题

有人能利用上面的加密技术提供一个简短的python片段,并给出解释,这样我就可以看到encryptedPwd字段值是如何生成的吗?下面是一个要演示的虚拟密码: Blamazon123

上面虚拟密码的两个示例值为encryptedPwd (在我看到一致性的地方添加了空格):

代码语言:javascript
运行
复制
AYAAF  P/a2u8yLSNjLWzPRIi0Bac  AAAABAAZzaTptZDUAIDU2ZDE0ZWRjZThlMmNiNmM2ODQyYzU5ZGRhZWU0MjZlAQ  Brthm+db6k/Oo832X/5U+JtXcBrVnCetjOnvcypG5ZZ6xZr0rXDDMctQevThwGjGYqOOQTy6tFALgMHnjWC2bcBBtyKMhUflpCjGTRodjE7btdqrgExEr07k1ErejaQ1vAW8hQSedfsQR3gyWxJcKKlQ91B4CYO5UMMJzevQyln0SASh5MLW6xOHMnjwdHI8aKFw2ErcvIFg5OpqCDSIyPjifvxkSTue7gJ3fB0ACda04EA5wxmkRteCF753kVGYNBD0h9eOHCPcCm/Y7bWoJAelvqu/U/LxAPkl216deDko4oxjVqLeRy/IExbx6cdEDT7zu0U7HROhvstu8TZE1f  AgAAAAAMAAAADAAAAAAAAAAAAAAAA  O0Gt/txLoiiXlGQcb5dyFn/////  AAAAAQAAAAAAAAAAAAAAAQAAAAv  LEJ4zlnbivrzliBrcFGIsPBU3srfmTu91dw4=
AYAAF  L1E3ydr57mIKpAQtOrAPsE  AAAABAAZzaTptZDUAIDU2ZDE0ZWRjZThlMmNiNmM2ODQyYzU5ZGRhZWU0MjZlAQ  AUJX+8tRKZESh1o09BLe6Qj13iuyP5Kb2IC/ipA1mRlWIQtIYApU8792+f5U2x8wv7rTVHcKM8wnFXP2I78PCbo4kXwV5Q6JE99bV4BP+5YnzB1YI6XUgrZ2ubm1wcSV3W1K3OhMogcXIbWjeEjKj2WmpVgSgCXKS6+Z6GxMnE+hArZlNIATYojL7IlLPR5kiGzN4pq86gLzGbfcG2at1MNQ5DdrJtktixLJPU1oFwCtT4AFfy6kiGfoepN+VE0AK0ysMyX3FY7QaI9qLtuA20zQX52NbLzG/qSENYohHzgvOOVzCIr4uwyJ3uXSA0kKXEJ4IbWmQ+k30cotoWRSJW  AgAAAAAMAAAADAAAAAAAAAAAAAAAA  NUNRLibdfG4P1ac0dL8Ka//////  AAAAAQAAAAAAAAAAAAAAAQAAAAv  4vyjW2MLIuuBm8D1c41v5ZwEQFk8k/p4GOss=

添加附加源代码和分析

主要负责生成metadata1字段的javascript文件可以找到这里。我已经解密了我看到的函数,它们是metadata1生成过程的一部分。它们从以下几行开始:

  • 1827 (与encryptedPwd相关)将加密事件侦听器添加到表单提交操作中
  • 332调度加密步骤的核心生成函数。
  • 789 & 810创建用于生成
  • 1839年计算校验和(用于metadata1进程)
  • 2540是返回metadata1值的地方(来自第332行)
  • 2672和2704是我注意到这封电子邮件被转换成十六进制值的地方,该值在加密前以metadata1内容为前缀
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-21 20:50:19

metadata1是用XXTEA加密的。我编写了一个Python脚本来对metadata1进行解码和编码。这可以找到这里

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67139708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档