吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3685|回复: 16
收起左侧

[Web逆向] RPC 百度登录RSA免扣调用实战

  [复制链接]
天空宫阙 发表于 2021-12-26 14:08
本帖最后由 天空宫阙 于 2021-12-26 14:08 编辑

RPC 百度登录RSA免扣调用实战记录

完整代码在github自取

https://github.com/skygongque/Spider/tree/master/21-RPC%E7%99%BE%E5%BA%A6%E7%99%BB%E5%BD%95%E5%85%8D%E6%89%A3%E5%AE%9E%E7%8E%B0RSA%E5%AE%9E%E6%88%98%E8%AE%B0%E5%BD%95

感谢志远大佬的逆向课程
案例网站 百度登录 https://www.baidu.com/

目标使用RPC 免扣代码实现RSA加密

使用的工具或环境

chrome 开发者工具 Overrides 映射线上代码到本地

python 库 websockets

核心思路

手动定位到e.RSA.encrypt将其导出到window,并与本地5000端口的websocket服务器建立连接,后续加密只要发送到websocket服务器,就可以得到加密的结果

流程图
Snipaste_2021-12-26_14-05-13.png

websocket服务器代码

起到桥梁的作用,内部逻辑简单,只是把消息转发给非发送方的其他客户端(python 或browser)

import asyncio
import websockets
""" 
websocket 服务端

"""
connected = set()

async def server(websocket, path):
    # Register.
    connected.add(websocket)
    try:
        async for message in websocket:
            for conn in connected:
                # 发送消息到非发送方的所有客户端
                if conn != websocket:
                    # await conn.send(f'Got a new MSG FOR YOU: {message}')
                    print("Got",message)
                    await conn.send(message)
    finally:
        # Unregister.
        connected.remove(websocket)

start_server = websockets.serve(server, "localhost", 5000)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

browser

chrome 开发者工具 Overrides 映射线上代码到本地

注意获取权限时点击允许

并在网站设置那里勾选,允许加载不安全内容 ,相比于wss ws被浏览器视为不安全

网站设置

网站设置

网站设置

网站设置

定位密码加密的方法注入以下代码,作用是导出加密代码到window并连接websocket服务器,实现onmessage方法

image-20211226131528775.png

// 将百度登录的RSA 加密代码导出到windows
// 与app.py 建立的websocket 连接

!(function () {
    window.zhiyuan = e;
    var ws = new WebSocket('ws://localhost:5000');
    ws.onopen = function (evt) {
        console.log('Connection open ...');
        ws.send('Hello WebSockets!');
    };
    ws.onmessage = function (evt) {
        var password = evt.data;
        var encrypt_password = window.zhiyuan.RSA.encrypt(evt.data);
        console.log('password=' + password + '; encrypt_password=' + encrypt_password);
        ws.send('password=' + password + '; encrypt_password=' + encrypt_password);
    };
})();

注入部分完整代码位于文件injected_baidu.js

python  客户端调用示例

 import asyncio
 import websockets

 # 获取事件循环
 loop = asyncio.get_event_loop()

 async def hello(message):
     # 连接 websocket 并发送消息 获取相应
     async with websockets.connect("ws://localhost:5000") as websocket:
         await websocket.send(message)
         return await websocket.recv()

 def get_encrypt(message):
     print(loop.run_until_complete(hello(message)))

 if __name__ =="__main__":
     for i in range(1000):
         get_encrypt(str(i))

效果

image-20211226134219735.png

python调用成功




image-20211226134326254.png

免费评分

参与人数 13威望 +1 吾爱币 +32 热心值 +10 收起 理由
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
bhh2048 + 1 谢谢@Thanks!
schoolyears + 1 热心回复!
timeni + 1 + 1 谢谢@Thanks!
zhczf + 1 我很赞同!
xhj666 + 1 + 1 我很赞同!
月牙儿 + 1 + 1 用心讨论,共获提升!
笙若 + 1 + 1 谢谢@Thanks!
神枪泡泡丶 + 2 + 1 用心讨论,共获提升!
sapin + 1 + 1 用心讨论,共获提升!
Establish + 1 我很赞同!
aa530416 + 1 + 1 热心回复!
weimeicn + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 天空宫阙 发表于 2021-12-27 17:10
LePay 发表于 2021-12-27 00:26
大佬 我想问一下
1.这个有什么应用场景吗?
2.免扣是指的什么

主要用于爬虫。
目的是拿到浏览器运行过程中的方法(此处是密码加密的rsa算法)供其他程序调用。
因为浏览器的环境完整,代码没有修改,只注入了代码就可以使用,从而免抠。这种方法可以做到一定程度的并发,但效率比不上扣js代码在nodejs中运行,但效率优于selenium这类自动化工具
 楼主| 天空宫阙 发表于 2021-12-26 20:25
yufd1986 发表于 2021-12-26 18:51
这个确实好用,之前还用代{过}{滤}理模式替换文件,这样方便多了。

确实可以用中间人的方法或谷歌的调试工具自动注入代码
Airey 发表于 2021-12-26 14:49
马甲下的蛋 发表于 2021-12-26 14:54
很强大,谢谢分享哦
yufd1986 发表于 2021-12-26 18:51
这个确实好用,之前还用代{过}{滤}理模式替换文件,这样方便多了。
LePay 发表于 2021-12-27 00:26
大佬 我想问一下
1.这个有什么应用场景吗?
2.免扣是指的什么
对前端不太了解,希望大佬解答一下,谢谢大佬。
月牙儿 发表于 2021-12-27 10:53
学习一下~
xhj666 发表于 2021-12-27 11:06
很有用的
ptzhuf 发表于 2021-12-27 11:07
这个秀啊!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 00:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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