猴毛-cookie共享

猴毛-cookie共享

有时候感觉好多事情都挺巧的,开发同学反馈有一个黑产程序想看看能不能找出是利用的是什么漏洞。

黑产工具分析

在mac虚拟机中运行提示运行异常,竟然是Python的,我的乖乖,要不说巧呢,之前写过一个检测工具(用Python写一个Windows下的检测工具)就是用Python编译成exe的。

在Windows的虚拟机里面运行是正常的,看起来“大兄弟”应该不是在mac arm架构环境下生成的exe。

Python生成的exe文件通常是通过工具(如PyInstallerpy2exe等)将Python脚本打包成可执行文件。这些工具在打包时可能会对源代码进行一定程度的混淆或加密,但大多数情况下,仍然可以通过反编译的方式还原出原始的Python代码。用到的工具如下:

工具名称用途安装命令
pyinstxtractor解包 EXEpip install pyinstxtractor
uncompyle6反编译 pycpip install uncompyle6
pycdc替代反编译器编译源码
010 Editor二进制分析官网下载

反编译大概是下面的流程:

使用pyinstxtractor(pyinstxtractor.py 是一款经过优化和bug修复的工具,专门设计用于解包由PyInstaller制作的.exe可执行文件)

找出黑产工具使用的Python版本,大概是Python3.8

对main.pyc进行解码,使用conda安装一个Python3.8的环境

pip install uncompyle6
uncompyle6 -o main.pyc

使用deepseek分析main.py代码逻辑

main.py深入分析

main.py解码出来后使用deepseek进行修复,分析获取token逻辑,把黑产获取token的逻辑修复补全,完整代码如下所示:

import base64, hashlib, requests, json
from DrissionPage import ChromiumPage, ChromiumOptions
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

def get_system_info():
    try:
        cpu_list = [cpu.Name.strip() for cpu in wmi.WMI().Win32_Processor() if cpu.Name]
        cpu_info = ",".join(cpu_list) if cpu_list else "No CPU Detected"
    except Exception as e:
        cpu_info = "cpu_info"

    try:
        disk_list = [disk.Model.strip() for disk in wmi.WMI().Win32_DiskDrive() if disk.Model]
        disk_info = ",".join(disk_list) if disk_list else "No Disk Detected"
    except Exception as e:
        disk_info = "disk_info"

    return cpu_info, disk_info

def hash_system_info(cpu_info, disk_info):
    hash_source = "".join(cpu_info) + "".join(disk_info) + "abc101010"
    final_hash = hashlib.md5(hash_source.encode()).hexdigest()
    return final_hash

def getDeviceCode():
    cpu_info, disk_info = get_system_info()
    return hash_system_info(cpu_info, disk_info)



class AESEncryption:
    def __init__(self) -> None:
        self.key = "306nqkc8tdgcnj22"
        self.iv = "32rcxuqcak6jtgfv"

    def encrypt(self, plaintext):
        cipher = AES.new(self.key.encode(), AES.MODE_CBC, self.iv.encode())
        encrypted = cipher.encrypt(pad(str(plaintext).encode(), AES.block_size))
        return base64.b64encode(encrypted).decode()

    def decrypt(self, ciphertext):
        decoded = base64.b64decode(str(ciphertext))
        cipher = AES.new(self.key.encode(), AES.MODE_CBC, self.iv.encode())
        decrypted = unpad(cipher.decrypt(decoded), AES.block_size)
        return decrypted.decode()
    
def getToken(kami):
        device_code = getDeviceCode()
        AES1=AESEncryption()
        url = AES1.decrypt("YZXBaiwYiPHEeLn5WwDvFGDLRnDt+TowJfVVcACTXYuqZdBj8Ah8eMVvDeJTQVtA")
        print("Token URL ", url)
        print("卡密", kami)
        data = json.dumps({'kami':kami, 
         'device_code':device_code})
        data = AES1.encrypt(str(data))
        r = AES1.decrypt(requests.post(url, data=data).text)
        _json = json.loads(r)
        print(_json)
        if _json["status"] == 200:
            return (True, _json)
        return (False, _json)


if __name__ == "__main__":
    cookie_result=getToken("YD_BEWIBRI7LE")
    print(cookie_result)

使用视频广告里面的卡密,运行结果和视频广告里面过期时间是一致的,证明代码还原这块应该是对的。

进一步分析main.py,可以看到对方是利用cookie共享的方式来实现共享VIP,下一步就是看看是否可以复现这种黑产技术手段。

class BrowserAutomation:
    def __init__(self):
        self.page = None
        self.browser_path = self.get_browser_path()
        if not self.browser_path:
            messagebox.showinfo("未找到浏览器", "未找到 Edge 或 Chrome 浏览器,请安装后重试。")
            exit()
        self.aes = AESEncryption()

    def get_browser_path(self):
        try:
            with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe") as key:
                return winreg.QueryValue(key, None)
        except FileNotFoundError:
            try:
                with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msedge.exe") as key:
                    return winreg.QueryValue(key, None)
            except FileNotFoundError:
                return None

    def init_browser(self):
        """
        初始化浏览器页面配置。
        """
        co = ChromiumOptions().set_browser_path(self.browser_path)
        co.set_user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0")
        self.page = ChromiumPage(addr_or_opts=co)

    def set_cookies(self, cookie_string):
        """
        设置浏览器的 cookies。
        """
        if self.page:
            self.page.set.cookies(cookie_string)
        else:
            raise RuntimeError("浏览器页面尚未初始化,请检查浏览器路径或配置。")

    def open_url(self, url):
        """
        打开指定的 URL。
        """
        if self.page:
            self.page.get(url)
        else:
            raise RuntimeError("浏览器页面尚未初始化,请检查浏览器路径或配置。")

    def close_page(self, kami):
        while True:
            try:
                if not self.page:
                    break
                time.sleep(1)
            except Exception as e:
                print(e)
                break

Cookie是什么

首先要明白cookie是什么,以及浏览器如何使用cookie。

Cookie 可让浏览器存储少量用户信息,以便在多次请求中“记住”某些内容。Cookie 有多个用途:

  • 会话管理
    允许网站识别用户,例如在不同网页中保持已登录状态。
  • 个性化
    存储用户偏好设置(例如语言、主题或最近查看的内容),以便自定义网站体验。
  • 跟踪
    过去,Cookie 一直被用于跨网站跟踪用户行为,以便投放定向广告和用于其他用例。

Cookie 主要用于标识符,而不是直接存储信息。

复现代码

我把自己的cookie用Cookie-Editor插件复制出来,从mac Chrome导出来cookie的json

导入到虚拟机Windows环境的Chrome,可以看到能直接登录。

用代码实现和黑产工具一样的功能,开启浏览器-注入cookie-实现登录,具体如下:

写在最后

在网络安全的世界里,攻防对抗从来都是一场没有终点的马拉松。这次对黑产程序的分析,让我深刻体会到黑产技术的快速发展和复杂性。表面上看,它只是利用了Cookie这一小小的“通行证”,但背后却隐藏着对系统漏洞的精准把握和对用户行为的深度模仿。这提醒我们,无论是开发者还是普通用户,都不能掉以轻心。

安全的本质是一个动态博弈的过程。攻击者不断寻找新的突破口,而防御者则需要时刻保持警惕,修补漏洞、升级防护机制。正如孙悟空的猴毛虽然强大,但终究离不开主人的法力支持;黑产程序再狡猾,也必须依赖系统中存在的薄弱环节。如果我们能从源头上加强系统的安全性,就能让这些“猴毛”失去效力。

哲学上讲,“魔高一尺,道高一丈”不仅是对技术发展的总结,更是对网络安全理念的最佳诠释。无论黑产如何变化,只要我们坚持技术创新、提升安全意识,就一定能在这场博弈中占据上风。

最后,不妨思考一个问题:在这个数字化时代,你是否已经为自己的“金箍棒”加装了“紧箍咒”?毕竟,只有未雨绸缪,才能真正守护我们的数字世界

留下回复

error: Content is protected !!