Ivanti EPMM恶意监听器技术分析与检测指南

本文详细分析了针对Ivanti端点移动管理系统的恶意监听器,包括两个恶意软件集的完整技术分析、功能机制、检测规则和应急响应指南,帮助组织识别和防御相关威胁。

恶意监听器针对Ivanti端点移动管理系统的技术分析

执行摘要

网络安全和基础设施安全局(CISA)从一个组织获得了两个恶意软件集,这些组织因网络威胁行为者利用CVE-2025-4427和CVE-2025-4428漏洞入侵Ivanti端点管理器移动版(Ivanti EPMM)而受到损害。每个集合都包含恶意监听器的加载程序,使网络威胁行为者能够在受感染的服务器上运行任意代码。

受影响产品

Ivanti EPMM,版本11.12.0.4及更早版本、12.3.0.1及更早版本、12.4.0.1及更早版本、12.5.0.0及更早版本。(Ivanti于2025年5月13日提供了补丁并披露了漏洞。)

关键行动

  • 使用妥协指标(IOC)和检测签名来检测活动,识别恶意软件样本
  • 通过尽快升级Ivanti EPMM版本到最新版本来防止入侵
  • 通过将移动设备管理(MDM)系统视为具有额外限制和监控的高价值资产(HVA)来防止入侵

妥协指标

有关此恶意软件的IOC可下载副本,请参见:MAR-251126.r1.v1.CLEAR。

检测

此恶意软件分析报告包含YARA和SIGMA规则。 有关此恶意软件的SIGMA规则可下载副本,请参见:AR25-260A/B SIGMA YAML。

目标受众

  • 组织:所有拥有本地Ivanti EPMM系统的组织
  • 角色:数字取证分析师、事件响应者、漏洞分析师、系统管理员

引言

网络安全和基础设施安全局(CISA)从一个组织获得了两个恶意软件集,共五个文件,网络威胁行为者在该组织中利用CVE-2025-4427 [CWE-288:使用替代路径或通道进行身份验证绕过]和CVE-2025-4428 [CWE-‘代码注入’]在Ivanti端点管理器移动版(Ivanti EPMM)部署中获得初始访问权限。

大约在2025年5月15日,概念验证发布后,网络威胁行为者通过链接这些漏洞获得了运行EPMM的服务器的访问权限。网络威胁行为者针对/mifs/rs/api/v2/端点发送HTTP GET请求,并使用?format=参数发送恶意远程命令。这些命令使威胁行为者能够收集系统信息、下载恶意文件、列出根目录、映射网络、执行脚本创建堆转储,并转储轻量级目录访问协议(LDAP)凭据。

CISA分析了网络威胁行为者写入/tmp目录的两个恶意文件集。每个恶意软件集都通过允许网络威胁行为者在受感染的服务器上注入和运行任意代码来实现持久性。

CISA鼓励组织使用此恶意软件分析报告中的妥协指标(IOC)和检测签名来识别恶意软件样本。如果识别出,请遵循本恶意软件分析报告中事件响应部分的指导。此外,组织应确保尽快运行最新版本的Ivanti EPMM。

恶意软件摘要

CISA分析了两个恶意软件集:

  • 集合1包含以下恶意文件:web-install.jar、ReflectUtil.class和SecurityHandlerWanListener.class

  • 集合2包含以下恶意文件:web-install.jar和WebAndroidAppInstaller.class

  • 集合1的web-install.jar称为加载程序1

  • 集合2的web-install.jar称为加载程序2

每个集合包含一个加载程序和恶意监听器,使网络威胁行为者能够在受感染的服务器上注入和运行任意代码。

集合1以下列方式协同工作:

  • 加载程序1包含并加载ReflectUtil.class
  • ReflectUtil.class在Apache Tomcat中注入和管理SecurityHandlerWanListener
  • SecurityHandlerWanListener.class拦截特定的HTTP请求并处理它们以解码和解密有效载荷,这些有效载荷创建一个新的类,网络威胁行为者可以执行该类来运行任意代码

集合2以下列方式协同工作:

  • 加载程序2包含并在运行时加载WebAndroidAppInstaller.class
  • WebAndroidAppInstaller.class拦截和处理特定的HTTP请求,从请求中检索和解密密码参数,定义和加载一个新的恶意类,加密和编码新的类输出,并生成带有加密输出的响应

恶意软件交付

网络威胁行为者分段交付此恶意软件,将加载程序1和2分成多个Base64编码的段[T1027.004]。他们通过单独的HTTP GET请求交付每个段,然后使用Java表达式语言(EL)注入写入每个块并使用追加模式(通过true参数)将它们附加在一起。

对于每个加载程序,行为者的第一个GET请求创建文件并写入块1。他们随后的请求将块附加到现有文件。以下是行为者GET请求的示例。

1
"GET /mifs/rs/api/v2/featureusage?format=${"".getClass().forName("java.io.FileOutputStream").getConstructor("".getClass(), "".getClass().forName("[Z").getComponentType()).newInstance("/tmp/web-install.jar", true).write("".getClass().forName("java.util.Base64").getMethod("getDecoder").invoke(null).decode("[BASE64_CHUNK]"))

此参数创建/追加恶意软件段到以下文件: .newInstance("/tmp/web-install.jar", true).

然后写入以下解码的Base64块: .write("".getClass().forName("java.util.Base64").getMethod("getDecoder").invoke(null).decode("[BASE64_CHUNK]")).

此技术用于防御规避——它使恶意软件在传输到系统时能够逃避基于签名的检测和大小限制。整体上,此技术结合了分块编码用于规避和文件追加操作用于重建。

恶意软件元数据

集合1

表1至表3显示了分析的恶意软件的元数据。

表1. 加载程序1

字段
文件名 web-install.jar
大小 30996字节
类型 JAR
MD5 e33103767524879293d1b576a8b6257d
SHA1 c2046523f1cb487a473b0a46a5a4a957f1b3200a
SHA256 c1f60ca5a5f7b94ab7122718a44b46de16c69d22c2eb62ce2948cab14bc78d50
SHA512 004b71ebeb4808b6dfdc4e58b95c4b307985c08118c45c02a34cd56ff697259199698989af0725d63802dfc785a72e416d2db5875edd1a0fa80ae01a282b2007
ssdeep 384:kaD+TLeDOl+mDcDFNUaD+TLeDOl+mDcDFNUaD+TLeDOl+mDcDFNUaD+TLeDOl+ms:z6Pl+mwj6Pl+mwj6Pl+mwj6Pl+mw3
7.951890

表2. ReflectUtil.class注入器恶意软件

字段
文件名 ReflectUtil.class
大小 11886字节
类型 编译的Java类数据,版本49.0(Java 1.5)
MD5 6ec2169312feb9fde0b17e244b32c37d
SHA1 6d7e85862f925e83f6d0c29e291765548fac721a
SHA256 065c1c2fb17ba1c3f882bead409215df612673cd455698768ed71412f9190ba3
SHA512 4cd26b298b448db6b26d91b8cf7ac169d693a0dad4f184742463db872b809b91d462ab4659bb21474578e3202bfc92b0db18716db6b4c3c24b3f9e7f2fccce27
ssdeep 192:KuZ4E9i44LYcyHCi3uFl0xEHqQ+k5bUW0sbh3aUfPuS6GZz:Ku79BP/3uFygq49V0stKEuSpz
6.258794

表3. SecurityHandlerWanListener.class恶意监听器

字段
文件名 SecurityHandlerWanListener.class
大小 4690字节
类型 编译的Java类数据,版本49.0(Java 1.5)
MD5 5e9d283b483b8d5c637baf7cfdda0e08
SHA1 8b87a881f6f81afb596d3f98abef4225315e26bf
SHA256 b1b1cf33b8d3da35293d6b74c378f0cd9452a4351e26d07c896c4d9a8257ef89
SHA512 07956b3a830bd0885202d9bc7a5b5a5927acf1c5584830ebc1011849f41b1077c3d6e3c2a6e94e36a338fc6b540c4b736751775e7069df4b257fa3786c1140a2
ssdeep 96:bFlm4Dt94EugELCBt+qRAVfOTqM8+U00RO:Blz94ExtlRAITqGQO
5.690466

集合2

表4至表5显示了分析的恶意软件的元数据。

表4. 加载程序2

字段
文件名 web-install.jar
大小 8728字节
类型 JAR
MD5 32f5c3c1582a77c004b1511c77454678
SHA1 2a96ce17ed8a025dd72f3729c247dfdb5b0a19a4
SHA256 b618057de9a8bba95440f23b9cf6374cc66f2acd127b3d478684b22d8f11e00b
SHA512 ec3880dfdc23a06cc1d97153963c3b0bd64db0469069e8dc3395101d12c65bcdcf87e5eac967ddf0b6be7e1dd6e8faaa233224f9f76a90f44f0e9df320d051a3
ssdeep 192:omBb/dSBuj9MLFgWfXsea1Xld+LXxzRlRX+pi+n9PshE6w0Tipbg8:j/T9MLFgWfcnVlSzspic9kCPxpB
7.923820

表5. WebAndroidAppInstaller.class恶意监听器

字段
文件名 WebAndroidAppInstaller.class
大小 16120字节
类型 编译的Java类数据,版本52.0(Java 1.8)
MD5 8387a7ce9f2520d8956747fd247b19af
SHA1 9808ab3ddfb9ab4fe3af1b5d1f6a638bc03788e0
SHA256 df501b238854d6579cafebeba82581a728e89ed1f6cd0da54c79ef4eb6f4f9fd
SHA512 a51943a8381e67aca4b8296c9df0b05450525b5b27efbf873fd54a7f68febb503e1eb088d287e3561137fd33d3772dd879a3f00b09285a67f215f7a420e7ffcd
ssdeep 384:iI+1BxqQ3evK5c7aIUnKzaxckO05xiZMQn5JI3c+AK8:iImfqQ3z/nbax1
5.950145

恶意软件功能

集合1

这组恶意软件包含一个加载程序、一个管理器和一个恶意监听器。

加载程序1

加载程序1是一个Java归档(JAR)文件,包含[T1027.009]并在运行时加载编译的Java类文件ReflectUtil.class。加载程序1将ReflectUtil.class伪装成org.apache.http包的一部分[T1036]。参见图1了解ReflectUtil.class的层次文件路径。

ReflectUtil.class管理器

ReflectUtil.class操作Java对象以在Apache Tomcat(运行在同一受感染服务器上)中注入和管理恶意监听器SecurityHandlerWanListener。执行时,该文件:

  • 绕过Java开发工具包(JDK)模块限制
  • 迭代对象及其上下文
  • 尝试通过使用getClassName()返回硬编码字符串org.junit.SecurityHandlerWanListener在JUnit环境或框架中加载SecurityHandlerWanListener类[T1620]

如果SecurityHandlerWanListener类未加载,因为ReflectUtil.class首次执行时未找到,ReflectUtil.class通过使用Base64字符串catch块(图2)处理错误,以Base64解码、gzip解压缩并加载类SecurityHandlerWanListener。

Base64字符串:

  • 返回类SecurityHandlerWanListener的Base64编码和gzip压缩的字节码

  • 以两种方式之一解码和解压缩[T1140]类字节码(参见图3):

    • 首先使用sun.misc.BASE64Decoder调用decodeBuffer
    • 如果第一次尝试失败,则使用java.util.Base64调用getDecoder
  • 调用ClassLoader的defineClass方法从解压缩的字节码加载类

一旦类SecurityHandlerWanListener被加载,ReflectUtil.class:

  • 创建类的新实例并将其作为新监听器返回
  • 检索当前监听器列表,将新监听器添加到此列表,并更新应用程序的监听器列表
  • 检查evilClassName是否已注入到应用程序的事件监听器列表中,以避免多次注入或确认先前的注入。(CISA没有关于监听器evilClassName的额外信息。)

SecurityHandlerWanListener.class

这个编译的Java类文件是一个恶意监听器,它拦截特定的HTTP请求并处理它们以解码和解密有效载荷,这些有效载荷动态创建并执行一个新类。

该文件使用ClassLoader设置一个自定义servlet监听器,该监听器基于字符串Pass、Header Name和Header Values拦截HTTP请求[T1071.001]。具体来说,当收到新的HTTP请求时,servlet监听器检查请求是否包含字符串pass 7c6a8867d728c3bb、Header Name Referer和Header Value https://www[.]live.com。

如果字段匹配,该文件创建一个HashMap来存储请求、响应和会话对象。该文件还会话中存储密钥7c6a8867d728c3bb。

然后该文件检索、解码和解密Base64编码的有效载荷:

  • 该文件通过从请求的输入流(request.getReader().readLine())读取一行来检索有效载荷
  • 该文件使用Base64解码该行
  • 该文件使用高级加密标准(AES)密码对象和存储的密钥解密解码的数据

该文件将解密的数据传递给名为g的方法,该方法定义并创建一个新的Java类文件。网络威胁行为者可以在设备上执行该类以运行任意代码。

潜在影响:此监听器可能允许网络威胁行为者:

  • 在服务器上注入和执行任意代码,实现后续活动和持久性
  • 通过拦截和处理HTTP请求来窃取数据

集合2

这组恶意软件包含一个加载程序和一个恶意监听器。

加载程序2

这个JAR文件包含并在运行时加载编译的Java类文件WebAndroidAppInstaller.class。

JAR文件将类文件伪装成com.mobileiron.service包的一部分。参见图5了解WebAndroidAppInstaller.class的层次文件路径。

WebAndroidAppInstaller.class

这个编译的Java类文件是一个恶意监听器,它拦截和处理特定的HTTP请求,从请求中检索和解密密码参数,定义和加载一个新的恶意类,加密和编码新的类输出,并生成带有加密输出的响应。

监听器首先从Java ServletContext检索请求和响应对象。然后,该文件检查请求的Content-Type以确保它不为null并包含字符串application/x-www-form-urlencoded。

如果满足这些条件,该文件从请求中检索密码参数。如果数据不为null且长度大于零,则密码参数值使用具有硬编码密钥3c6e0b8a9c15224a的AES算法进行Base64解码和解密[T1573.001]。

如果解密的数据不为空,解密的数据定义并实现一个新类。该文件使用相同的硬编码密钥3c6e0b8a9c15224a对新类输出进行AES加密,然后进行Base64编码[T1027.013]。

然后该文件生成存储在密码参数(来自初始HTTP请求)和硬编码密钥中的数据的消息摘要算法5(MD5)哈希,并检查哈希值是否存储在新分配的字节数组ByteArrayOutputStream中。该文件创建一个PrintWriter对象来生成响应,其中包含计算的MD5哈希值的前16个字符,后跟新加载类的Base64编码和AES加密输出以及MD5哈希值的剩余部分。

潜在影响:此监听器可能允许网络威胁行为者:

  • 在服务器上注入和执行任意代码,实现后续活动和持久性
  • 通过接收响应和执行结果来窃取数据

检测

Yara规则

部署表6中的CISA创建的YARA规则以检测恶意活动。

表6. YARA规则

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
rule CISA_251126_01 : trojan hides_artifacts
{
meta:
author = "CISA Code & Media Analysis"
incident = "251126"
date = "2025-07-23"
last_modified = "20250724_1615"
actor = "n/a"
family = "n/a"
capabilities = "hides-artifacts"
malware_type = "trojan"
tool_type = "unknown"
description = "Detects malicious jar filter samples"
sha256_1 = "c1f60ca5a5f7b94ab7122718a44b46de16c69d22c2eb62ce2948cab14bc78d50"
strings:
$s0 = { 6F 72 67 2F 61 70 61 63 68 65 2F 68 74 74 70 2F 63 6C 69 65 6E 74 }
$s1 = { 2F 77 6F 2F 52 65 66 6C 65 63 74 55 74 69 6C 2E 63 6C 61 73 73 }
$s2 = { 83 2E 9D 42 02 A3 81 42 02 B3 C7 57 34 C4 A8 21 }
$s3 = { 8C 8E C0 B6 14 0E 92 08 89 EE EB 1A 11 7D F4 4E }
$s4 = { 5B 97 FF F6 12 C9 16 F5 17 C8 5B 5F 44 0E 07 30 }
$s5 = { A9 21 59 ED 8E 7A 28 D6 29 FA E3 D0 4C 3D 0F CE }
$s6 = { 5A BD F7 24 E8 66 5F 07 2F 7C 0C 0E A9 E3 8D C5 }
$s7 = { 05 1B AE 97 B1 88 FF 01 16 EF 3F 44 9E 5F 43 AE }
condition:
all of them
}

(其他YARA规则内容省略以保持简洁)

SIGMA规则

部署表7中的CISA创建的SIGMA规则以检测恶意活动。

表7. SIGMA规则

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
title: Detects Artifacts Based on MAR-251126, Ivanti EPMM CVE-2025-4427 and CVE-2025-4428
incident: 251126
tlp: CLEAR
id: 83df757f-54e7-44a0-be21-ae2306ca3240
status: test
description: Detects abused URL paths and suspicious commands used by Threat Actors on Ivanti Endpoint Manger Mobile (EPMM). Based on MAR-251126 as well as Unauthenticated Remote Code Execution Vulnerabilities CVE-2025-4427 and CVE-2025-4428.
references:
    - 'MAR-251126'
    - 'https://projectdiscovery.io/blog/ivanti-remote-code-execution'
    - 'https://labs.watchtowr.com/expression-payloads-meet-mayhem-cve-2025-4427-and-cve-2025-4428/'
    - 'https://www.wiz.io/blog/ivanti-epmm-rce-vulnerability-chain-cve-2025-4427-cve-2025-4428'
    - 'https://threatprotect.qualys.com/2025/05/20/cisa-warns-of-ivanti-epmm-unauthenticated-remote-code-execution-vulnerabilities-cve-2025-4427-cve-2025-4428/'
    - 'https://profero.io/blog/ivanti-epmm-attacks'
    - 'https://github.com/rapid7/metasploit-framework/blob/26156dfac2e01379eb858a87aa85e2ecfea929ff/modules%2Fexploits%2Fmulti%2Fhttp%2Fivanti_epmm_rce_cve_2025_4427_4428.rb'   
author: CISA Code & Media Analysis
date: 2025-08-08
modified: 2025-08-13
tags:
    - cve.2025.4427
    - cve.2025.4428
logsource:
    product: cma
detection:
    keywords:
        - 'GET'
    keywords_1:
        - '/api/v2/*'
    keywords_2:
        - 'sh -i'
        - 'invoke'
        - 'java'
        - '/dev/tcp/'
        - 'getRuntime'
        - '.jar'
        - '.class'
        - 'evilClassName'
        - 'ping'
        - 'dig'
        - 'curl'
        - 'wget'
        - 'fetch'
        - 'echo'
 
    keywords_3:
        - 'chmod'
    keywords_4:
        - '+x'
        - 'a+r'
        - '755'
        - '/tmp'
 
    keywords_5:
        - '/mi/tomcat/webapps/mifs/401.jsp'
        - '/mi/tomcat/webapps/mifs/css/css.css'
        - '/mi/tomcat/webapps/mifs/session.jsp'
         - '/mi/tomcat/webapps/mifs/baseURL.jsp'
         - '065c1c2fb17ba1c3f882bead409215df612673cd455698768ed71412f9190ba3'
         - 'b618057de9a8bba95440f23b9cf6374cc66f2acd127b3d478684b22d8f11e00b'
         - 'c1f60ca5a5f7b94ab7122718a44b46de16c69d22c2eb62ce2948cab14bc78d50'
         - 'df501b238854d6579cafebeba82581a728e89ed1f6cd0da54c79ef4eb6f4f9fd'
         - '1b1dda5e8e26da568559e0577769697c624df30e'
         - 'ac389c8b7f3d2fcf4fd73891f881b12b8343665b'
         - '19b4df629f5b15e5ff742c70d2c7dc4dac29a7ce'
         - 'f780151c151b6cec853a278b4e847ef2af3dbc5d'
         - 'dce8faf5fcf5998b6802995914caa988ee1ebd92'
         - 'aa2cfeeca6c8e7743ad1a5996fe5ccc3d52e901d'
         - '2bd61ce5bdd258c7dcbef53aedb1b018b8e0ae26'
         - '82.132.235.212'
         - '37.219.84.22'
         - '88.194.29.21'
         - '27.25.148.183'
         - '83.229.126.234'
         - '91.193.19.109'
         - '47.120.74.19'
         - '100.26.51.59'
         - '150.241.71.231'
         - '75.170.92.132'
         - '5.181.159.149'
         - '45.38.17.43'
         - '75.170.92.132'
 
    condition: keywords and keywords_1 and keywords_2 or keywords and keywords_1 and keywords_3 or keywords_3 and keywords_4 or keywords_5
 
falsepositives:
    - Rate of FP low-moderate with some strings.
    - Use this rule in an infected environment/logs.
    - Analyst may need to make adjustments to the query as required.
level: high

事件响应

如果检测到此恶意软件或类似恶意软件,CISA建议组织:

  1. 隔离或使可能受影响的主机离线
  2. 收集和审查工件,如运行进程/服务、异常身份验证和最近的网络连接
  3. 捕获受影响主机的完整取证磁盘映像以与CISA共享
  4. 如果初步调查(步骤2)发现威胁行为者的访问受限(例如,他们没有横向移动或提升权限),则提供新的帐户凭据。如果调查发现威胁行为者具有更广泛的访问权限或可能横向移动,请遵循组织的事件响应计划启动威胁狩猎、遏制和驱逐措施
  5. 向CISA报告入侵:
    • 通过CISA的24/7运营中心(contact@cisa.dhs.gov或1-844-729-2472)或CISA的事件报告系统报告入侵
    • 使用CISA的恶意软件分析提交表单提交包含恶意代码的文件。在开放事件ID字段中包含CISA提供的事件ID号(从报告入侵获得)
  6. 重新映像受感染的主机
  7. 应用缓解措施部分的建议以强化系统

缓解措施

CISA建议组织基于威胁行为者的活动实施以下缓解措施,以改善组织的网络安全态势。这些缓解措施与CISA和国家标准与技术研究院(NIST)制定的跨部门网络安全性能目标(CPG)保持一致。CPG提供了CISA和NIST建议所有组织实施的最低实践和保护集。CISA和NIST基于现有的网络安全框架和指南制定了CPG,以防范最常见和最具影响力的威胁、战术、技术和程序。访问CISA的CPG网页以获取有关CPG的更多信息,包括额外的推荐基线保护。

  • 尽快将Ivanti EPMM版本升级到最新版本
  • 将移动设备管理(MDM)系统视为具有额外限制和监控的高价值资产(HVA)。MDM系统为数千台主机提供提升的访问权限,应被视为具有额外限制和监控的HVA
  • 遵循生产和企业环境中的最佳网络安全实践,包括为所有员工和服务强制实施防网络钓鱼的多因素身份验证(MFA)。有关其他最佳实践,请参见CISA的跨部门网络安全性能目标(CPG)

附录A:MITRE ATT&CK技术

参见表8和表9了解本公告中引用的所有威胁行为者战术和技术。有关将恶意网络活动映射到MITRE ATT&CK框架的帮助,请参见CISA和MITRE ATT&CK的MITRE ATT&CK映射最佳实践和CISA的Decider工具。

表8. 防御规避

技术标题 ID 使用
混淆文件或信息:交付后编译 T1027.004 网络威胁行为者分段交付恶意软件,将其分成多个Base64编码的段。行为者使用Java EL注入写入每个块并使用追加模式(通过true参数)将它们附加在一起
混淆文件或信息:嵌入式有效载荷 T1027.009 加载程序1包含ReflectUtil.class
混淆文件或信息:加密/编码文件 T1027.013 WebAndroidAppInstaller.class使用硬编码密钥对类输出进行AES加密和Base64编码
伪装 T1036 加载程序1将ReflectUtil.class伪装成org.apache.http包的一部分。加载程序2将WebAndroidAppInstaller.class伪装成com.mobileiron.service包的一部分
反射代码加载 T1620 ReflectUtil.class将代码反射加载到Java进程中,以向Apache Tomcat服务器添加恶意监听器
反混淆/解码文件或信息 T1140 ReflectUtil.class解码和解压缩类字节码

表9. 命令与控制

技术标题 ID 使用
应用层协议:Web协议 T1071.001 SecurityHandlerWanListener.class拦截HTTP请求。WebAndroidAppInstaller.class拦截和处理特定的HTTP请求
加密通道:对称加密 T1573.001 WebAndroidAppInstaller.class使用AES算法和硬编码密钥解码Base64密码参数值
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计