Lazarus远控组件NukeSped分析

静态信息:

样本md5:9b656f5d7e679b94e7b91fc3c4f313e4

由此可见为假的Adobe Flash Player 的攻击样本

在这里插入图片描述
在这里插入图片描述

样本分析

在这里插入图片描述
通过五个函数,内部调用sub_40159D函数动态获取API函数
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
利用IDA python解密字符串。。

完整python代码

Python> idc.get_segm_name(here())
'.text'
Python> idc.GetDisasm(here())
'call    sub_405060'

Python>idc.print_insn_mnem(here())
'call'
Python>idc.print_operand(here(),0)
'sub_405060'
Python>idc.print_operand(here(),1)
''

idc.get_operand_value(ea,n)获取操作数的值。

在这里插入图片描述

完整python代码

from idaapi import *
import idc

    
from idaapi import *
import idc
def get_string(addr):
  out = ""
  while True:
    if Byte(addr) != 0:
      out += chr(Byte(addr))
    else:
      break
    addr += 1
  return out
  
def get_stringlen(addr):
    out = ""
    while True:
        if idc.get_wide_byte(addr)!= 0:
            out += chr(idc.get_wide_byte(addr))
        else:
            break
        addr += 1
    return addr
    

    
def get_function_argv(addr):
    for x in range(4):
        addr = idc.prev_head(addr)
        print("%08x" %addr)
       
        if idc.print_insn_mnem(addr) == "push" and "offset" in idc.print_operand(addr,0):
            print("GET success")
            print("%08x" %addr)
            return idc.get_operand_value(addr,0)
        else : 
            print("NO")
def get_retn(addr):
    for x in range(4):
        addr = idc.next_head(addr)
        if idc.print_insn_mnem(addr) == "mov":
            print("retn success")
            print("%08x" %addr)
            return idc.get_operand_value(addr,0)
        else :
            print("NO")
            
def Mydecrypt(stringstart,stringend):
    output = ""
    for i in range(stringstart,stringend):
        v3 = idc.get_wide_byte(i)
        print(v3)
        if idc.get_wide_byte(i)<97 or v3 > 122:
            continue
        if idc.get_wide_byte(i) < 101 or v3 >106:
            if idc.get_wide_byte(i)<116 or v3 >121:
                continue
            v4 = v3 - 15
        else :
            v4 = v3 +15
        
        ida_bytes.patch_byte(i,v4)
    for i in range(stringstart,stringend):
        output += chr(idc.get_wide_byte(i))
    return output
    
danger_funcs = ["getapi"] # 需要寻找的函数名
for func in danger_funcs:
    addr = get_name_ea_simple( func )

print("call sub_40159D:%08x" %addr)
cross_refs = CodeRefsTo( addr, 0 )
for addr in cross_refs:
    print("..................")
    print( "%08x" % addr)
    print("get_function_argv start")
    stringstart = get_function_argv(addr)
    print( "%08x" %stringstart)
    stringend = get_stringlen(stringstart)
    result = Mydecrypt(stringstart,stringend)
    print(result)
    idc.set_cmt(stringstart, result, 0)
   
    idc.set_name(stringstart, result, SN_FORCE)
    print("..................") 
    apiaddr = get_retn(addr)
    print("%08x" %apiaddr)
    idc.set_name(apiaddr, result, SN_FORCE)
     

   

已经被修改,伪代码没修改过来,N -> create name anyway,这样就方便静态分析了

在这里插入图片描述

在这里插入图片描述

调用GetModuleFileName获取当前的运行进程路径并将其写入到Run注册表中以实现本地持久化,写入的注册表键值为msnconf

在这里插入图片描述

继续跟到sub_402811函数:

再次调用五个函数动态获取API函数地址

sub_4021EE:

打开文件成功就读取文件到dword_40B498,buffer:0040AEB0,大小0x36Eu,打开文件失败则,memset对dword_40B498地址后0x36Eu大小 区域置零,

在这里插入图片描述

地址布局:

在这里插入图片描述

从unk_40B5A2开始,每0x10填充一个02

之后将IP和端口填充到前面用02分割的内存空间中,填充的02是connect参数sockaddr结构体中的sa_family。
在这里插入图片描述

int  main( )
 {
   printf("%d /n",htons(16));
      return 0;
}
得到的结果是4096
解释如下,数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000。 由于Intel机器是小尾端,存储数字16时实际顺序为1000,存储4096时实际顺序为0010。因此在发送网络包时为了报文中数据为0010,需要经过htons进行字节转换。
数字所占位数小于或等于一个字节(8 bits)时,不要用htons转换

在这里插入图片描述

在这里插入图片描述

sub_402E9C:根据时间因子得到随机数,加上地址,可以从5个ip中随机获取一个,建立socket连接,成功连接尝试向C2发送测试数据,成功,则将0x40B498地址处的内容发送到C2,服务器可根据该请求值判断当前攻击进行到哪一阶段,若失败则休眠60秒后 重新生成随机数再次请求,若第二次请求成功,尝试将0x40B498地址处的内容发送到C2:

在这里插入图片描述

成功上线后,向C2发送0x1243451,接收返回值传入Switch_case中

Switch_case:

在这里插入图片描述

如果有nls文件

在这里插入图片描述

sub_4020F6 :通过时间获得随机数
在这里插入图片描述

​ 若本地存在c_126705.nls文件,该地址将指向文件内容

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/505433.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

扫雷(蓝桥杯)

题目描述 小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下&#xff0c; 在一个二维平面上放置着 n 个炸雷&#xff0c;第 i 个炸雷 (xi , yi ,ri) 表示在坐标 (xi , yi) 处存在一个炸雷&#xff0c;它的爆炸范围是以半径为 ri 的一个圆。 为了顺利通过这片土…

Mac air 个人免费版VMWare Fusion安装及配置教程

Mac air 安装免费版VMWare Fusion教程及问题解决 1、下载VMWare Fusion2、下载wins镜像文件3、开始配置4、出现的问题及解决方法4.1 如何跳过启动时的网络连接4.2 启动后&#xff0c;无法连接网络怎么办4.3 怎么实现将文件拖拽到虚拟机中 当你手上是一台Mac电脑&#xff0c;却需…

【博弈论3——二人博弈的纳什均衡】

1.俾斯麦海之战 2. 零和博弈的定义 零和博弈&#xff08;Zero-Sum Game&#xff09;是一种博弈论的基本概念&#xff0c;指的是在博弈过程中&#xff0c;博弈参与者之间的收益和损失之和总是一个常数&#xff0c;特别是总和为零。即博弈一方的收益必然等于另一方的损失&#x…

RCG自条件是如何添加到 Pixel Generator上的?

在自条件的训练过程中&#xff0c;需要将图像经过Pretrained encoder的表征Rep输入进已有的Pixel Generator上&#xff0c;目前RCG是向四种Pixel Generator上加入了自条件&#xff0c;关于它是如何将rep加到Pixel Generator上的&#xff0c;我来总结一下&#xff1a; 一、Pixel…

[SpringCloud] Feign Client 的创建 (一) (四)

文章目录 1.FeignClientsRegistrar2.完成配置注册2.1 registerDefaultConfiguration方法2.2 迭代稳定性2.3 registerFeignClients方法 1.FeignClientsRegistrar FeignClientsRegistrar实现ImportBeanDefinitionRegistrar接口。 2.完成配置注册 public void registerBeanDefinit…

JQ 查看图片的好插件

效果图 插件官网 https://blog.51cto.com/transfer?https://github.com/fengyuanchen/viewer 使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"utf-8"><link rel"stylesheet" href"css/viewer.c…

攻防世界——catfly

这道题我觉得很难&#xff0c;我当初刷题看见这道题&#xff0c;是唯一一道直接跳过的&#xff0c;现在掌握了一点知识才回来重新看 这道题在linux运行下是这样&#xff0c;我首先猜测是和下面这个time有关&#xff0c;判断达到一定次数就会给我flag 但是我找了好久都没找到那…

(九)信息融合方式简介

目录 前言 一、什么是信息融合&#xff1f; 二、集中式信息融合与分布式信息融合 &#xff08;一&#xff09;集中式融合 &#xff08;二&#xff09;分布式融合 1.简单信息融合 2.CI&#xff08;协方差交叉&#xff09;信息融合 3.无反馈的最优分布式融合 4.有反馈的…

反应式编程(一)什么是反应式编程

目录 一、背景二、反应式编程简介2.1 定义2.2 反应式编程的优势2.3 命令式编程 & 反应式编程 三、Reactor 入门3.1 Reactor 的核心类3.2 Reactor 中主要的方法1&#xff09;创建型方法2&#xff09;转化型方法3&#xff09;其他类型方法4&#xff09;举个例子 四、Reactor …

论文笔记:GPT-4 Is Too Smart To Be Safe: Stealthy Chat with LLMs via Cipher

ICLR 2024 reviewer评分 5688 1 论文思路 输入转换为密码&#xff0c;同时附上提示&#xff0c;将加密输入喂给LLMLLM输出加密的输出加密的输出通过解密器解密 ——>这样的步骤成功地绕过了GPT-4的安全对齐【可以回答一些反人类的问题&#xff0c;这些问题如果明文问的话&…

【C++】set和map

set和map就是我们上篇博客说的key模型和keyvalue模型。它们属于是关联式容器&#xff0c;我们之前说过普通容器和容器适配器&#xff0c;这里的关联式容器就是元素之间是有关联的&#xff0c;通过上篇博客的讲解我们也对它们直接的关系有了一定的了解&#xff0c;那么下面我们先…

蓝桥杯-python-常用库归纳

目录 日期和时间 datetime模块 date日期类&#xff0c;time时间类&#xff0c;datetime日期时间类 定义date&#xff08;年&#xff0c;月&#xff0c;日&#xff09; data之间的减法 定义时间&#xff08;时&#xff0c;分&#xff0c;秒&#xff09; 定义datetime&#xf…

42.HarmonyOS鸿蒙系统 App(ArkUI)实现横屏竖屏自适应

HarmonyOS鸿蒙系统 App(ArkUI)实现横屏竖屏自适应 媒体查询作为响应式设计的核心&#xff0c;在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景&#xff1a; 针对设备和应用的属性信息&#xff08;比如显示…

【Linux】进程实践项目 —— 自主shell编写

送给大家一句话&#xff1a; 不管前方的路有多苦&#xff0c;只要走的方向正确&#xff0c;不管多么崎岖不平&#xff0c;都比站在原地更接近幸福。 —— 宫崎骏《千与千寻》 自主shell命令编写 1 前言2 项目实现2.1 创建命令行2.2 获取命令2.3 分割命令2.4 运行命令 3 源代码…

计算机服务器中了rmallox勒索病毒怎么办?rmallox勒索病毒解密数据恢复

网络技术的不断发展与应用&#xff0c;大大提高了企业的生产运营效率&#xff0c;越来越多的企业开始网络开展各项工作业务&#xff0c;网络在为人们提供便利的同时&#xff0c;也会存在潜在威胁。近日&#xff0c;云天数据恢复中心接到多家企业的求助&#xff0c;企业的计算机…

Python内置函数enumerate()

Python的内置函数enumerate()。在学习过程中遇到了一点小问题。记录一下。 enumerate() 是 Python 中常用的内置函数之一&#xff0c;它可以用来同时遍历序列的索引和对应的值。具体来说&#xff0c;enumerate() 接受一个可迭代对象作为参数&#xff0c;返回一个包含索引和值的…

vuees6新语法

vue的学习网站&#xff1a; https://www.runoob.com/vue2/vue-tutorial.html1.Vue的介绍 学习目标 说出什么是Vue能够说出Vue的好处能够说出Vue的特点 内容讲解 【1】Vue介绍 1.vue属于一个前端框架&#xff0c;底层使用原生js编写的。主要用来进行前端和后台服务器之间的…

Holiday Notice

Holiday Notice 放假通知 要是每个公司都能放假放的多&#xff0c;把加班折算放假落实到位&#xff0c;还怕我们不努力干活&#xff0c;巴不得把全年都干完了&#xff0c;然后休息。

HCIP【GRE VPN配置】

目录 实验要求&#xff1a; 实验配置思路&#xff1a; 实验配置过程&#xff1a; 一、按照图式配置所有设备的IP地址 &#xff08;1&#xff09;首先配置每个接口的IP地址 &#xff08;2&#xff09;配置静态路由使公网可通 二、在公网的基础上创建GRE VPN隧道&#xff0…

HarmonyOS实战开发-如何实现一个简单的健康生活应用(上)

介绍 本篇Codelab介绍了如何实现一个简单的健康生活应用&#xff0c;主要功能包括&#xff1a; 用户可以创建最多6个健康生活任务&#xff08;早起&#xff0c;喝水&#xff0c;吃苹果&#xff0c;每日微笑&#xff0c;刷牙&#xff0c;早睡&#xff09;&#xff0c;并设置任…