背景
我需要通过python脚本每周从Amazon的销售商中央门户中提取报告给我们的多个客户。我试图避免网络司机,因为他们的不一致,错误的性质跨不同的OSes (从经验)。因此,我认为这将是一个有趣的小项目(也许最终也是徒劳无益的锻炼)尝试反向工程sellercentral.amazon.com的登录过程。这个过程并不困难,除了初始登录表单中的两个字段:password
和metadata1
。下面将详细讨论password
字段。metadata1
字段似乎采用了类似的技术,同时引入了每隔几秒钟更改一次的额外障碍。当我监视metadata1
值时,它似乎是使用各种浏览器度量的一个大型json对象生成的。但是,一次只做一件事,所以我将集中讨论这篇文章中的密码加密问题,并在以后的文章中关注metadata1
。
说到重点
在表单提交时,password
字段中的值将使用本文中进一步讨论的技术进行加密。得到的加密值然后替换密码字段中的值,并重命名字段encryptedPwd
。
我的发现
到目前为止,我一直在检查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"
});
通过遍历代码,我能够找到算法的更多细节。
*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
在后面的过程中,我能够找到以下内容,我假设这些参数是根据上面的加密规范进行处理的参数,但我不知道如何达到这一点。
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回购),我发现以下三部分似乎是我所需要的。不过,我不知道从这里往哪里走。
# 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
(在我看到一致性的地方添加了空格):
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
生成过程的一部分。它们从以下几行开始:
encryptedPwd
相关)将加密事件侦听器添加到表单提交操作中metadata1
进程)metadata1
值的地方(来自第332行)metadata1
内容为前缀发布于 2021-09-21 20:50:19
metadata1
是用XXTEA加密的。我编写了一个Python脚本来对metadata1
进行解码和编码。这可以找到这里。
https://stackoverflow.com/questions/67139708
复制相似问题