4

JS逆向-叮当快药 sign 加密分析

 1 year ago
source link: http://xianyucoder.cn/2019/09/16/%E6%AF%8F%E6%97%A5JS-%E5%8F%AE%E5%BD%93%E5%BF%AB%E8%8D%AF-MD5/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

JS逆向-叮当快药 sign 加密分析

2019-09-16

|

2019-09-30

| js逆向

| 0

| 692次阅读

7.7k

|

13 分钟

今日份的网站

aHR0cDovL3d3dy5kZGt5LmNvbS9jb21tb2RpdHkuaHRtbD9kZGt
5Y2FjaGU9YTdiMTllODc5ZDJmMmYyNzlkMzU2ZjVhZmE2ZDVjZmY=

这个网站的加密比较简单,是那种新手做过一遍就对 JS 逆向充满信心的小练手。

先分析请求,看看需要的参数有没什么搞头【图1-1】

图1-1

比较明显的是 sign 其他的参数好像没有什么特别的地方。

先定位 sign 的位置【图1-2】

图1-2

直接搜索参数就看到结果了,点击搜索的结果文件在文件内再搜索一次,可以看到有 3 个结果。【图1-3】

图1-3

到这里就看到 sign 的加密了。

接下来继续分析逻辑,这里的 sign 值是 yy的值是通过MD5(f)获取的,而f又是t.get("method") + p + r的结果,经过一通分析,可以的得到下面的逻辑:

var l = t.keys().sort(), p = "";
l.length;
for (var g in l) {
var m = l[g];
p += m + t.get(m)
}
sign = md5(t.get("method") + p + r)

接下来只需要把我们不知道的值通过断点的方式调试出来,这个加密我们就完成解密了。

所以先给不知道的值打上断点,不清楚就打上断点不要怕麻烦,像【图1-4】这样。

图1-4

重新请求一下,就进入到我们打的断点里了,我们可以通过在 console 中打印变量的值来理解逻辑。【图1-5】

图1-5

明白需要的变量的值之后,我们就可以开始扣取 JS 或者用 Python 复写加密的逻辑了。

因为这次的加密比较简单,我们试试用 Python 复写一遍加密。(主要是 Python 的 md5 用起来蛮舒服的)

这里的逻辑比较简单没啥好分析的,我就直接上代码了。

import time
from hashlib import md5
def get_sign():
timeStamp = time.time()
localTime = time.localtime(timeStamp)
strTime = time.strftime("%Y-%m-%d %H:%M:%S", localTime)

l = ["method", "orderTypeId", "orgcode", "pageNo", "pageSize", "plat", "platform", "shopId", "t", "v",
"versionName"]
t = {
'method': 'ddsy.product.query.orgcode.product.list.b2c',
'orderTypeId': '0',
'orgcode': '010502,010503,010504,010505,010506,010507',
'pageNo': '1',
'pageSize': '100',
'plat': 'H5',
'platform': 'H5',
'shopId': '-1',
# 't': '2019-9-23 22:4:16',
't': '{}'.format(strTime),
'v': '1.0',
'versionName': '3.2.0'
}
p = ''
for i in range(0, 11):
m = l[i]
p += m + t.get(m)
f = t['method'] + p + '6C57AB91A1308E26B797F4CD382AC79D'
print(f)
sign = md5value(f).upper()
print(sign)
return sign


def md5value(s):
a = md5(s.encode()).hexdigest()
return a

到这里其实就没有什么难度了,直接带入 sign 请求就完事了。【图1-6】

图1-6

blogWechatIMG1956.jpeg
煌金 wechat
扫描关注公众号,回复「1024」获取为你准备的特别推送~
  • 本文作者: 煌金 | 微信公众号【咸鱼学Python】
  • 本文链接: http://www.xianyucoder.cn/2019/09/16/每日JS-叮当快药-MD5/
  • 版权声明: 本博客所有文章除特别声明外,均采用 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK