基于Java特性的安卓客户端广告拦截和用户管理系统设计与实现


摘要

本文介绍了一种基于Java特性的安卓客户端广告拦截和用户管理系统的设计与实现方法。通过Xposed框架改变Class运行逻辑,实现对广告的拦截和屏蔽,并通过无障碍功能自动点击广告的“跳过”按钮。客户端采用授权方式进行用户管理,后端使用SpringBoot框架结合Nginx,配合Redis和MySQL等技术,设计了分布式系统以应对大量用户的请求,保障系统的高效和安全运行。

关键词

Java,Xposed,广告拦截,SpringBoot,Nginx,Redis,MySQL,安全加密

1. 引言

在移动互联网应用中,广告是开发者重要的收入来源,但对用户体验产生了较大影响。为了解决这一问题,本系统设计了一种基于Java特性的广告拦截方案,通过Xposed框架和无障碍功能来拦截广告,保障用户的体验。同时,通过构建高效安全的后端系统,实现对用户和设备的管理。

2. 系统架构

系统主要分为客户端和后端两部分。客户端负责广告拦截和用户交互,后端负责数据存储、用户认证和业务逻辑处理。

2.1 客户端设计

客户端通过Xposed框架对应用程序的Class进行修改,以达到广告拦截的目的。在遇到加密软件(如360加密、梆梆加固等)时,客户端通过Application.attachBaseContext方法获取真实的dex和class文件,从而实现对广告的拦截。此外,通过无障碍功能实现自动点击广告的“跳过”按钮,提高用户体验。

2.1.1 Xposed框架实现

客户端利用Xposed框架对目标应用的Class进行动态修改,以达到拦截广告的目的。以下是示例代码:

public class AdBlocker implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if (!lpparam.packageName.equals("com.target.ad.app")) return;

        XposedHelpers.findAndHookMethod("com.target.ad.AdClass", lpparam.classLoader, "showAd", new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                // 拦截广告逻辑
                param.setResult(null);  // 拦截广告显示
            }
        });
    }
}

2.1.2 无障碍功能实现

在无法通过Xposed框架完全拦截广告的情况下,使用安卓无障碍功能自动点击广告的“跳过”按钮:

public class AccessibilityService extends android.accessibilityservice.AccessibilityService {
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        // 实现自动点击“跳过”按钮逻辑
    }

    @Override
    public void onInterrupt() {
        // 中断处理
    }
}

2.2 用户授权机制

客户端采用邮箱注册授权机制,一个账号最多可授权5个设备,赞助金额达到10元及以上才能获得使用资格。注册和授权通过邮件验证码进行验证,确保用户的合法性和安全性。

2.3 后端设计

后端采用SpringBoot框架,结合Nginx服务器,使用Redis进行缓存管理,MySQL进行数据存储,并设计了分布式系统以应对大量用户请求,保障系统的高效运行。

2.3.1 用户认证和授权

用户在注册时需验证身份,服务器通过SMTP发送邮件到注册邮箱,用户输入验证码通过后才能继续注册和授权设备。找回密码也采用同样的方式。

2.3.2 安全加密

账号的密码存储采用高强度算法加密,保障用户隐私安全。加密算法如下:

public static @NotNull String password(@NotNull String password, @NotNull String key) throws Exception {
    if (key.length() < 8) key += key;
    return md5(sha1(Arrays.toString(des(password.getBytes(), key.substring(0, 8).getBytes()))));
}

2.3.3 邮件发送服务

后端服务发送邮件的代码实现如下:

@Service
@RestController
public class MailService {
    private final JavaMailSender mailSender;
    private final TemplateEngine templateEngine;

    public MailService(JavaMailSender mailSender, TemplateEngine templateEngine) {
        this.mailSender = mailSender;
        this.templateEngine = templateEngine;
    }

    public void send(String to, String sender, String title, String verificationCode) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(sender + " <support@hujiayucc.cn>");
        helper.setTo(to);
        helper.setSubject(title);
        Context context = new Context();
        context.setVariable("verificationCode", verificationCode);
        String html = templateEngine.process("email-code", context);
        helper.setText(html, true);
        mailSender.send(message);
    }
}

邮件模板:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>小宇网络工作室</title>
</head>
<body>
<p>尊敬的用户,您的验证码是:<strong th:text="${verificationCode}"></strong>,10分钟内有效。</p>
</body>
</html>

3. 系统性能与安全

为了应对大量用户的访问,后端系统采用了分布式设计,通过Redis缓存减少数据库访问频次,提升系统性能。同时,密码采用高强度加密算法存储,确保用户信息安全。

4. 结论

本文设计并实现了一种基于Java特性的安卓客户端广告拦截和用户管理系统,通过Xposed框架和无障碍功能实现广告拦截,并结合SpringBoot、Nginx、Redis和MySQL等技术,构建了高效、安全的后端系统。该系统在保证用户体验的同时,保障了系统的高效运行和数据的安全性。

参考文献

【Github】Fuck-AD


推荐阅读:

BaseCTF Writeup: 原神,启动

Android操作系统对Android/data访问路径判断存在逻辑缺陷

评 论
avatar
Cheese
  • Chrome
  • Android
好诶~
2024-06-20 18:05 回复