主题:流氓联盟欺软怕硬,多链路恶意推广
z3960发表于 2025-08-18 14:52
随着国内互联网的爆发式增长,流氓软件也在不断地发展。其推广手段的不断迭代升级,反映出技术、商业与监管各方之间的复杂博弈。多数流氓软件都具备强制安装,难以卸载,捆绑推广,弹窗广告等恶意行为,通过挟持用户终端资源变现。从合作捆绑到群魔乱舞,网民的觉醒是否让流氓软件黔驴技穷了呢?并不见得,如今流氓软件也具备了“柿子挑软的捏”的特质。会尝试规避有杀软的电脑,规避访问技术论坛的技术人士,甚至规避短时间内成功卸载过流氓软件的用户。一方面我们希望源头处做好监管,一方面我们也希望每个人都能了解到流氓软件的恶行并加以规避。近期,火绒威胁情报中心监测到名为“小蓝鸽极速卸载”软件频繁推广至用户,通过溯源发现其源头有“多标签文件管理器”、“DX强力修复”、“EchoFind 文件搜索”等软件,软件中包含的插件极其相似,分析过程中选择了其中的一个名为“DX 强力修复”的软件进行分析,分析初期发现该软件有锁屏广告,随后发现还会进行桌面弹窗推广、任务栏图标闪烁推广、直接静默安装后展示一定时间弹窗、若错过则保持安装等行为,甚至浏览器访问特定页面时额外跳转至推广页面。其推广行为都是由下发的云控配置决定,且下发的配置中包含各种规避行为,例如规避安全软件、读取浏览器历史记录匹配特定 URL 进行规避等。火绒安全产品可对上述流氓软件进行拦截查杀。查杀图流程图如下:流程图市面上可以下载该软件主要通过三个渠道,分别为联想商店、3DM 以及百度竞价推广。多渠道推广一、样本分析启动插件:“DX 强力修复”软件主进程为 dxrepair.exe,启动初期不仅初始化自身相关,创建软件窗口,还会加载并初始化推广插件或插件必要模块,随后分别执行插件主函数。多个推广插件:插件是以独立文件的形式存储在安装目录下的 Bin 或 Plugins 文件夹下,其中推广相关插件分别有弹窗推广、锁屏推广、任务栏托盘推广、静默下载安装推广、浏览器广告等模块。其他插件例如 cache.dll 和 cachestub.dll 主要是用于云控配置的下载和分发至插件。下图为文件名称所对应的插件功能介绍表:推广插件列表下图是 DLL 类插件的加载并启动的逻辑:插件初始化并启动下图是 PLN 类插件的加载并启动的逻辑:查找 pln 文件并循环调用插件主函数1.1 tpihub.pln(桌面弹窗推广模块)大致流程:该插件的主要功能为弹窗推广,通过请求云控配置获取到弹窗推广模块下载地址列表,随后通过下载地址下载不同的软件推广模块,例如 BlueDove(小蓝鸽)软件被推广方式为独立的模块进行弹窗,若想要推广 A 软件则可以将 A 软件的弹窗推广模块的下载地址和配置信息加入到 tpihub.pln 会请求的云控配置中即可。互斥体创建:插件初始化时会创建互斥体 TpiHubSingleInstance,从而防止冲突。插件初始化防止冲突获取云控配置:随后该模块开始获取云控配置,具体网页链接为 http://base.heheshield.com/p/tpihub,参数为分别有 mid2(机器 ID)、winver(操作系统版本)、appver(主进程版本)、modver(更新模块版本)、pid(下载平台,例如 lx_store 联想商店)、app(主进程名,例如 dxrepair)。后续其他请求云控配置时都会带有这些参数,区别是携带数量的不同。参数获取方式:HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeDXRepair 注册表中获取 mid 字段值和 pid 字段值。利用 MsiGetFileVersionW 函数获取文件版本 appver 与 modver。利用 RtlGetNtVersionNumbers 函数获取操作系统版本 winver。主进程名 app 则是通过主进程文件路径目录名获取。拼接字符串:其中部分字符串通过单字符拼接的方式获取,从而规避静态字符串提取,加大逆向分析复杂度。字符串拼接解析弹窗推广云控配置:获取到的云控配置中含有多个推广模块,本文以 bdtpi.dll(小蓝鸽弹窗推广模块)为示例进行分析,可以看到其中含有模块本地名、模块下载地址、模块哈希值、模块等待秒数,随后该模块对云控配置进行解析并准备下载。弹窗推广云控配置下载并加载获取其中初始化函数地址:随后先获取文件存放路径,随后检查该路径文件的 MD5 值是否与云控配置中的 MD5 值一致,如果不一致则会删掉原文件并通过 tpi_url 下载新的弹窗推广模块并加载该模块,获取其中 CreatePlugin 初始化函数地址。下载并加载初始化函数地址初始化并调用主函数:调用到此步骤时将会转移至 bdtpi.dll 模块内部。初始化并调用主函数1.1.1 bdtpi.dll(弹窗推广模块—小蓝鸽)创建互斥体:该模块也与分发模块类似,初始化时创建互斥体 BlueDoveUnistSingleInstance,只是名称不同,且后续也会等待互斥体,防止出现冲突。创建互斥体获取云控配置:随后开始获取云控配置,请求链接 http://base.heheshield.com/k/bluedove/install 并传入参数 pid(下载平台,例如 lx_store 联想商店)。可以看到其中包含下载链接、执行参数、安装包哈希值、控制弹窗等数据。其中 command 为经过密钥 blowfish 加密(密钥LAG9R1ZFWIS3J2LDHBAWZ50OGSAB99US)与 base64 编码后形成的数据,解密发现是 /S --pid=lite_n3 --optimize --run,其中测试得知 /S 参数为无弹窗静默安装参数。云控配置随后通过云控配置对弹窗频率和规避操作进行控制,最终创建弹窗:检测 BlueDove 是否被安装,若被安装则会等待一天后再检测。检测开机时间,若小于云控配置中 interval_time_ex 时间则过一个小时再检测一次。检测进程,若存在需要规避的进程名则会过 5 分钟再检测一次。检测是否全屏,若是全屏则过 5 分钟再检测一次。检测是否处于不再打扰的时间范围内,测试时云控配置中时间为 30 天,若处于不再打扰的时间范围内则等待至不再打扰时间结束。检测是否处于弹窗冷却期,测试时云控配置中为 1 天,处理方式与上条一致。遍历出 x >= 3 天的时间,x = 当前时间 - 最后一次弹窗时间。最后会初始化并创建弹窗,随后设置一天后再次循环这一流程。创建弹窗窗口按钮:随后窗口中会有 btn_close、btn_inst、dont_show 等按钮,其中 btn_inst 按钮即“立即卸载”按钮,点击该按钮则会执行下载操作。按钮点击事件安装逻辑:随后先检查 Temp 目录下是否存在 bluedove_setup.exe 文件,如果存在则直接删除,随后通过云控配置中 url 下载并计算 MD5 值是否与云控配置中 md5 相同,若不同则删除,相同则返回 True 并执行安装程序。下载安装程序并安装1.2 lckscr.dll(桌面锁屏推广)大致流程:锁屏广告由 lckscr.dll 负责,该模块通过获取云控配置获取到需要锁屏推广的网址,随后通过 cefwebview.exe 并传入网址和全屏横纵坐标,从而进行锁屏展示。初始化:初期会先将软件相关 URL、类名、软件名等信息存储至全局变量中,随后通过读取 AppDataRoamin*****heheyoudunconfig.ini 中读取 lockscreen 项下 enable 字段,如果为 1,则会继续执行。随后会请求至 base.heheshield.com/k/sp 获取锁屏相关云控配置。锁屏推广云控配置例子创建互斥体与云控配置写入共享内存:随后解析云控配置并从中提取 lockscreen_mutex 字段值作为名称创建互斥体,随后利用全局变量获取软件名,并与 6CBA6EFE-0D50-46A5-B68A-114B848B1733_ 拼接为指定文件映射对象的名称并创建内存映射将云控数据写入到其中。创建互斥体与写入共享内存读取云控数据并检查必要字段:随后再通过内存映射对象获取云控数据,解析并判断是否 data->sp 字段下 ids、url(锁屏推广时所打开的网页链接) 等字段数据是否存在,若存在则执行锁屏监听倒计时。这里并非只读取上述字段,也会读取其他频率相关字段并设置锁屏广告频率
回帖(2):全部回帖(2)»