zbby 发表于 2023-7-27 01:54

关于某知名游戏公司被挂马的文件分析

本帖最后由 zbby 于 2023-7-27 02:05 编辑

来自某推的消息某知名游戏公司网站被人恶意挂马钓鱼



样本地址:xxxxxxx.xxxx.com/uploads/***%E7%99%BB%E5%BD%95%E6%8E%A7%E4%BB%B6.exe

样本伪装成openvxx的安装包乘机释放后门

外壳分析

逻辑十分清晰,首先使用AES128 循环解密shellcode 然后利用CreateTimerQueueTimer的CallBack参数来跳进shellcode。
我这边选择了修改外壳exe然后进行内存dump(可以看到后面跳转进shellcode的代码已经被我nop掉并修改成死循环了)

然后我们使用工具修复导入表再来看看shellcode

这边我发现这其实是一个dll,这块动态计算地址call到dllmain里去了
给dll分离出来以后很明显的就能看出来这是一个远控

这个dll使用winsocket和c&c服务器通信,使用xor加密

这边是下发指令执行部分(一个巨大的switch)
大概看了一下 功能有 ping 创建文件 读取文件 powershell启动程序等等


相关样本:https://s.threatbook.com/report/file/2244c600f75088d7788cdce77665e2d4805badac9340f16358a38e2de996702e(doc使用漏洞释放exe)https://s.threatbook.com/report/file/fab70a35c7f127519818d59790f5dd97e847a31763793d084fea65496b2c9aca
看雪:https://bbs.kanxue.com/thread-278166.htm

zbby 发表于 2023-7-27 10:44

本帖最后由 zbby 于 2023-7-27 16:50 编辑

powershell执行命令
数据包id: 3 8 9
下发数据: 命令文本
返回数据: 执行结果

写文件
数据包id: 4
下发数据: 文件名 文件数据
返回数据: 执行结果(成功写出返回“OK”)

读文件
数据包id: 5
下发数据: 文件名
返回数据: 文件数据

powershell执行命令2
数据包id: 10 12
下发数据: 命令文本
返回数据: 命令执行数据

ping(似乎是检查连接用的)
数据包id: 11
下发数据: 无
返回数据: 未知

山寨远控客户端(用于获取/解密攻击指令):
import time
import random
import socket

init = False

ip_port = ('47.100.65.182',8081)
sk = socket.socket()
sk.connect(ip_port)

def getdesc(cmdid):
    if cmdid == 3 or cmdid == 8 or cmdid == 9:
      return "powershell执行命令"
    if cmdid == 4:
      return "写文件"
    if cmdid == 5:
      return "读文件"
    if cmdid == 10 or cmdid == 12:
      return "powershell执行命令2"
    if cmdid == 11:
      return "ping检查连接"
    return "unknown"

def xor(data):
    return bytes()

def xor_rnd(rnd):
    result = bytearray()
    for x, y in zip(rnd, b'\x69\xA4'):
      result.append(x ^ y)
    return bytes(result)

while True:
    try:
      if not init:
            timestamp = int(time.time())
            print("timestamp:", timestamp)
            rnd = random.randint(0, 65535).to_bytes(2,byteorder='little', signed=False)
            sk.sendall(rnd + xor_rnd(rnd)) # [随机数(2bytes)] + [之前的随机数 ^ 0x69A4 (2bytes)]
            sk.sendall(xor(b'\x02\x00\x00\x00\x04' + timestamp.to_bytes(4,byteorder='little', signed=False))) #
            init = True
   
      print("--------------------------------------------------")
   
      header_bytes = sk.recv(5)
   
      header = xor(header_bytes)
      cmdid = int.from_bytes(header[:4], 'little', signed=False)
      size = int.from_bytes(header, 'little', signed=False)

      print("cmdid:", cmdid)
      print("desc:" , getdesc(cmdid))
      print("size:", size)
   
      payload_bytes = b''
      while len(payload_bytes) < size:
            payload_bytes += sk.recv(size)
      payload = xor(payload_bytes)
   
      print("payload:", payload)

      sk.sendall(xor(b'\x01\x00\x00\x00\x0B\x00\x00\x00\x07\x73\x75\x63\x63\x65\x73\x73')) # 数据包id(4bytes) + 长度 (1bytes) + 数据(?bytes)
    except:
      print("connection was lost.")
      break

bhleo 发表于 2023-7-27 11:09

辛苦楼主分享

吉祥喵 发表于 2023-7-27 06:05

半夜不睡觉发帖辛苦了!感谢分享

suyi3369 发表于 2023-7-27 07:07

同样适用于其他游戏吗

66fox66 发表于 2023-7-27 07:16

辛苦了楼主,谢谢楼主。

htpidk 发表于 2023-7-27 07:20

平时也上不了这些网站{:1_918:}

lzc970324 发表于 2023-7-27 07:20

半夜不睡觉发帖辛苦了!感谢分享

eleven7607 发表于 2023-7-27 07:48

额 ,没太看懂代码,感谢楼主分享对新手友好

wzyzhuce 发表于 2023-7-27 07:55

学习一下

mmjqzf123 发表于 2023-7-27 08:05

感谢楼主分享

oxf5deb3 发表于 2023-7-27 08:10

感谢楼主分享
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 关于某知名游戏公司被挂马的文件分析