开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 6542|回复: 5
收起左侧

[技术专题] 【JS逆向】聚享游RSA | 每日JS

[复制链接]
结帖率:100% (4/4)
发表于 2019-12-10 15:29:42 | 显示全部楼层 |阅读模式   安徽省亳州市
本帖最后由 gg132124 于 2019-12-10 20:43 编辑

由于是站外图片,论坛里好像不显示,图片挂了没办法,
需要看图的可以去原帖看,其实没必要,自己调试一遍就清楚了
原帖在简书:https://www.jianshu.com/p/32*F69df2c7

第一天

JavaScript逆向练习1

0x01 目标网址

http://www.juxiangyou.com/login/index

0x02 定位JS

1. 随便输入账号密码验证码,点击登录,查看提交的参数

1

可以看到,发出了两个请求,第一个是获取key,第二个是登录,在登录包里有加密过 的password参数。

2. Ctrl+Shift+F调出搜索面板,搜索jxy_parameter,有三条结果,依此打开查看,发现第三个才是需要的。直接在这里下一个断点。

2

3. 重新输入账号密码验证码,点击登录,JS被断了下来。F11跟进,或者鼠标悬停在断点处函数名上,点击弹出的内容,也能跳转进去。

3

这里可以看到e就是之前的第一个请求包的返回内容,而n就是待加密的明文密码。加密函数的调用核心就是在这里。

4. 同上,F11跟进,进入一个JSEncrypt.min.js,传入参数为第一步返回的hash + 明文密码

4

这里一看到JSEncrypt,再看一下上下文,可以确认是AES加密(可以百度一下JSEncrypt),那就直接把整个JSEncrypt.min.js拿走,再改写一个调用的函数就行了。

0x03 改写JS

1. 仿照图3的位置,写一个调用函数。

function getrsa(pKey, password) { // 也可以把key写死,这个公钥是不会变的
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(pKey);
    var encrypted = encrypt.encrypt(password);
    return encrypted
}

此时在多数情况下就能正常运行了

2. 练习在Python中调用时发现,这样会报错JSEncrypt is not defined,一下整懵了,尝试直接赋值一个空对象,结果不行,仔细看了一下代码,发现第一部分是在判断客户Duan。

! function(t, e) {
    "function" == typeof define && define.amd ? define(["exports"], e) : e("object" == typeof exports && "string" != typeof exports.nodeName ? module.exports : t)
}(this, function(t) {**函数主体**});

浏览器中调试发现"function" == typeof define && define.amdtrue,那就直接把函数给改一下,把函数主体暴露出来。

var JSEncryptExports = {};
(function(t) { 
    **函数主体**
})(JSEncryptExports);
var JSEncrypt = JSEncryptExports.JSEncrypt;

此时JSEncrypt就是一个构造函数了,接着把上面5中的代码贴在下面,就可以在Python中运行了。

0x04 Python代码

一开始尝试了js2py,报错,可能是js代码比较多,所以又直接改用execjs了。

PS. 其实可以尝试直接调用Python的AES加密库,如果这个JS没改过,结果应该是能用的(也就是另一个思路:JS功能可以通过所使用的语言直接实现)。

# -*- encoding: utf-8 -*-
'''
@File    :   0x01-juxiangyou.com.py
@Time    :   2019/11/06 10:42:43
@Author  :   独孤孤独嘟咕噜犊子
@Version :   1.0
@Link    :   https://www.jianshu.com/u/6a4c6ef97be7
@Desc    :   聚享游www.juxiangyou.com 登录例子
'''

# start

import execjs
import requests
import time
import json

HEADERS = {
    'User-Agent':
    'Mozilla/5.0 (Linux; U; Android 8.0.0; zh-cn; Mi Note 2 Build/OPR1.170623.032) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.1.1'
}
s = requests.Session()
s.headers.update(HEADERS)
imageURL = 'http://www.juxiangyou.com/verify?v={}000'.format(int(time.time()))
keyURL = 'http://www.juxiangyou.com/login/getkey'
loginURL = 'http://www.juxiangyou.com/login/auth'

# 下载验证码
image = s.get(imageURL).content
with open('image.png', 'wb') as f:
    f.write(image)

# 获取公钥
publicKey = s.post(keyURL).json()
jskey = publicKey['key']
jshash = publicKey['hash']

# 登录
username = 'ermao6@qq.com'
password = '******'
varifyCode = input('请输入验证码(当前目录下image.png):')
# varifyCode = '1111'
timestamp = int(time.time() * 1000)

with open('js/0x01-juxiangyou.com.js') as f:  # 坑0x01 相对路径前面不带/,带/不报错但读不出数据
    jscode = f.read()
ctx = execjs.compile(jscode)  # execjs载入js代码
xsign = ctx.call('get', timestamp)  # 坑0x02 这里传入的时间戳为整数型(老版本验证的参数,现在不计算也行)
# xsign = ctx.eval('get({})'.format(timestamp))  # 通过eval调用js代码里的函数
enPass = ctx.call('getrsa', jskey, jshash + password)  # 通过call调用js代码里的函数
data = {
    'jxy_parameter':  # 坑0x03 提交json格式参数需要转成json字符串,否则请求失败
    json.dumps({
        "c": "index",
        "fun": "login",
        "account": username,
        "password": enPass,
        "verificat_code": varifyCode,
        "is_auto": True
    }),
    'timestamp':
    timestamp
}
result = s.post(loginURL, data=data).json()
print(result)  # {'code': 10000} 登录成功

评分

参与人数 2好评 +2 精币 +3 收起 理由
heyuchuan0324 + 1 + 2 新技能已get√
qq137547401 + 1 + 1 可以把图片放到Tao宝上在分享链接,http://api.bika.moe/pi

查看全部评分


发表于 2019-12-12 16:50:13 | 显示全部楼层   浙江省杭州市
可以很强,学习了
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
 楼主| 发表于 2019-12-10 20:45:06 | 显示全部楼层   安徽省亳州市
帖子从站外搬过来太难了,图片都不显示,以后的帖子就少图了,能凑合看就行,主要是记录学习例子
回复 支持 反对

使用道具 举报

结帖率:100% (10/10)

签到天数: 3 天

发表于 2019-12-10 19:22:04 | 显示全部楼层   广东省珠海市
感谢分享  图都挂了   大佬
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
 楼主| 发表于 2019-12-10 17:59:57 | 显示全部楼层   安徽省亳州市
玄冰 发表于 2019-12-10 17:05
图片挂了 可以重新上传吗

我这边看只有第二张图挂了,但是怎么改都不行,差一张问题不大
回复 支持 反对

使用道具 举报

结帖率:82% (18/22)

签到天数: 8 天

发表于 2019-12-10 17:05:32 | 显示全部楼层   广西壮族自治区贺州市
图片挂了 可以重新上传吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表