【逆向系列】7-某加速验证码识别-密码加密逆向

免责声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在微信公众号【小白逆向】联系作者立即删除!

前言

此次将尝试对登录框进行逆向处理,并且使用dddd进行验证码识别。

逆向目标

  • 某加速登录:登录密码加密
  • 逆向首页:aHR0cDovL3d3dy4xNXl1bm1hbGwuY29tL3BjL2xvZ2luL2luZGV4
  • 逆向接口:aHR0cDovL3d3dy4xNXl1bm1hbGwuY29tL3BjL2xvZ2luL2NoZWNr
  • 脱敏处理(base64编码)
  • 涉及知识点:rsa、验证码是识别

网络抓包分析

1、打开调试面板了后,在三个输入框中随便输入信息。

【逆向系列】7-某加速验证码识别-密码加密逆向


在网络面板中找到check结尾的包。
2、u[password]的结果为加密的,u[veryCode]为输入的验证码,并且还有一个_csrfToken也是类似加密的形式



【逆向系列】7-某加速验证码识别-密码加密逆向



u[password]逆向分析思路

1、根据发起程序进入,断下断点
2、扣取相关加密代码
3、环境补充,本地还原

x-apiKey逆向分析

1、在initiator中,进入index的文件中

【逆向系列】7-某加速验证码识别-密码加密逆向


2、在其上几行位置,找到rsa加密代码,并断下断点


var public_key="00bdf3db924714b9c4ddd144910071c282e235ac51371037cf89fa08f28b9105b6326338ed211280154c645bf81bae4184c2b52e2b02b0953e7aa8b25a8e212a0b";
var public_length="10001";
var rsa = new RSAKey();
rsa.setPublic(public_key, public_length);
var res = rsa.encrypt($('#password').val());


【逆向系列】7-某加速验证码识别-密码加密逆向


3、重新提交表单,断住后进入rsa.encrypt函数
进入函数后,在rsa.js文件中,这里扣取整个文件的代码,然后将步骤2中的代码复制到扣取的代码的最后,改写下var res = rsa.encrypt("sadfajl");,运行调试
4、根据报错信息,在控制台输入相关函数,进入函数中将整个js文件扣取下来放到最前面,一直重复整个过程即可
扣取的js文件大致有: rsa.js、jsbn.js、rng.js、prng4.js
报错navigator未定义的话,在文件的最开头定义navigator即可


navigator = {
    appName"Netscape"
}

5、代码扣取成功运行截图

【逆向系列】7-某加速验证码识别-密码加密逆向



_csrfToken分析

经过反复验证,_csrfToken在一定时间下是保持不变的。同时它来源于index文件件中,所以可以使用正则进行匹配出来。

【逆向系列】7-某加速验证码识别-密码加密逆向



数据获取流程

  • 获取验证码图片进行验证码识别;
  • 获取_csrfToken;
  • 密码加密;
  • 携带相关数据,发起请求。

总结

代码示例,不能直接运行:

# **************************************
# --*-- coding: utf-8 --*--
# @Time    : 2022-12-10
# @Author  : white
# @FileName: 某加速.py
# @Software: PyCharm
# **************************************
import requests
import execjs
import io
import re
import ddddocr
def sign():
    '''登录操作'''
    # 先请求token以及cookie,请求验证码时,要带上这两者,后端会将验证码与token关联起来
    get_Token_cookie()
    url = 'http://www.15yunmall.com/pc/login/check'
    data = {
        "u[loginType]""name"# phone代表手机号, name代表用户名
        "u[phone]": username,
        "u[password]": get_pwd(),
        "u[veryCode]": get_code(),
        "u[token]""",
        "_csrfToken": _csrfToken
    }
    res = session.post(url, headers=headers, data=data)
    # print(res.request.headers)
    status_code = {
        '31''恭喜,登陆成功。',
        '32''登陆失败。',
        '33''用户名或密码错误。',
        '35''该用户已被管理员锁定。',
        '311''该账号已绑定设备,请在绑定的设备登陆。',
        '20001''验证码填写错误!'
    }
    # 返回的字符串中被添加了特殊字符,导致不能直接比较
    # xefxbbxbf这个是我通过将返回的字符进行二进制编码后得到的
    n = b'xefxbbxbf'.decode('utf-8')
    num = res.text.replace(n, '')
    for k, v in status_code.items():
        if k == num:
            print('响应结果:', v)

    # print(num)

sign()

成功截图:

【逆向系列】7-某加速验证码识别-密码加密逆向


代码已在github开源:
https://github.com/puboop/reverse/



原文始发于微信公众号(小白逆向):【逆向系列】7-某加速验证码识别-密码加密逆向

版权声明:admin 发表于 2022年12月11日 上午10:01。
转载请注明:【逆向系列】7-某加速验证码识别-密码加密逆向 | CTF导航

相关文章

暂无评论

暂无评论...