某网站异步加密逆向分析
前言
最近碰到一个网站,觉得加密挺简单的,加了断点看混淆后的代码发现找不到加密位置,很多异步的操作。逆向之后顺便做一期文章分享给大家。
· · · · · ·
▼url▲
▼一 了解异步 ▲
在 JavaScript 中,异步编程是一种常见的模式,尤其在处理网络请求等操作时。由于 JavaScript 是单线程语言,异步机制可以让程序在等待某些操作完成时,继续执行其他任务,而不被阻塞。为了解决异步操作中的回调地狱问题,ES6 引入了 Promise 对象,使得异步代码的处理更加清晰、可维护。
什么是 Promise?
Promise 是 JavaScript 提供的一种处理异步操作的对象。它代表一个异步操作的最终结果(成功或失败)。每一个 Promise 对象都处于以下三种状态之一:
pending(进行中):初始状态,异步操作尚未完成,Promise 仍然在等待。
fulfilled(已成功):异步操作成功完成,Promise 的结果可以被获取。
rejected(已失败):异步操作失败,Promise 被拒绝,并伴随一个错误原因。
基本使用
要创建一个 Promise 对象,可以通过传递一个函数给 Promise 构造函数,这个函数接收两个参数:resolve 和 reject,它们分别用于将 Promise 的状态更改为 "fulfilled" 或 "rejected"。
resolve 函数:当异步操作成功时,调用 resolve,并将 Promise 状态从 pending 改为 fulfilled。你可以将成功的结果传递给 resolve,以便后续使用。
reject 函数:当异步操作失败时,调用 reject,并将 Promise 状态从 pending 改为 rejected。你可以将失败的原因作为参数传递给 reject,让它作为错误信息传递出去。
Promise.then()
是 JavaScript 中用于处理 Promise
对象的主要方法之一,它用于在 Promise
状态变为 fulfilled(已成功)时执行后续操作。
▼二 确定目标▲
首先抓包查看加密参数都有什么。
明显请求和结果都加密了
▼三 参数逆向▲
既然请求的body加密了,可以直接找到请求之前的位置,然后打断点往前跟
在Promise.then()
执行的时候意味着异步已完成,进行下一步操作,这里我们在之前打上断点。
打到一个断点里面有data参数,点开看是未加密数据,我们继续往下跟
里面的异步执行队列有6个任务待执行,我们如果一步一步地跟会发现没有进入
到加密位置就直接请求返回了,这里针对异步我们可以进入到上述任务里的方法
里直接加断点就会停止。这里只需要看上面的6个任务里哪个是加密的。
进入到第一个就会发现这里加工了data参数。
跟到加密位置,发现是AES ECB加密,然后直接定位加密的key为
"J8PePfETanyLVsav"。
这里通过网页上测试下加密是否可用,是否有魔改。
实测发现没有魔改可以直接使用。
▼ 四 代码 ▲
from Crypto.Cipher import AES
def encrypt(key, content):
"""
AES加密
key,iv使用同一个
模式cbc
填充pkcs7
:param key: 密钥
:param content: 加密内容
:return:
"""
key_bytes = bytes(key, encoding='utf-8')
# key_bytes += b'x00'
# iv = key_bytes
cipher = AES.new(key_bytes, AES.MODE_ECB)
# 处理明文
content_padding = pkcs7padding(content)
# 加密
encrypt_bytes = cipher.encrypt(bytes(content_padding, encoding='utf-8'))
# 重新编码
result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')
return result
▼ 总结 ▲
可以总结一下异步如何找到加密位置:
先正常跟,然后有个异步队列 挨个执行的,正常一步一步发现不会进到
加密位置,这里可以看异步队列里面的函数可能有加密函数。
大家如果其中有什么问题可以随时和我沟通。大家互相学习。
如果想要获得更多精彩内容可以关注我朋友:
END
我是Ming,热爱技术,喜欢钻研,喜欢分享。是一个希望通过技术改变自己的人。欢迎和大家加微信交朋友。
原文始发于微信公众号(逆向与爬虫的故事):某网站异步加密逆向分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论