本文只分析当前 APK 样本中的代码、资源和配置。静态分析能说明客户端做了什么,不能单独证明服务器行为、资金去向或运营方意图。未执行登录、下单、充值和提现。
一、样本和分析范围
分析样本为 Toobit 6.1.6 Android APK,包名为 cc.toobit.android,入口类为 io.dcloud.PandoraEntry。应用使用 DCloud / uni-app 技术栈,主要业务逻辑位于 WebView 资源中的 app-service.js。
原始样本 SHA-256:
C6BBAC466162FE7AB94A6BADB75F9BB3880FF409CE20903A51B3812AECE933C9
本次使用 JADX、Apktool 3.0.3、资源搜索和 Smali 搜索进行静态检查。没有连接真实账户,也没有向服务端发起登录、充值、交易或提现请求。因此,本文把结论分成三类:
- 已证实:APK 中存在直接代码、配置或调用证据。
- 未发现:在当前样本和搜索范围内没有找到对应实现。
- 待动态核验:需要服务器响应、运行时流量或链上记录才能确认。
二、先说结论
| 观察项 | 当前结论 | 证据边界 |
|---|---|---|
| 本地后门 | 未发现典型远程 Shell、Accessibility 服务、隐蔽常驻组件或助记词窃取代码。 | 只覆盖当前 APK,不覆盖服务端和后续远程 WGT。 |
| TLS 配置 | CustomTrustMgr 的证书校验方法为空,存在通信完整性风险。 | 需要在运行时确认具体请求是否都经过该管理器。 |
| 业务形态 | 交易、理财和矿机主要通过中心化 HTTP API 完成。 | APK 未出现链上签名和广播流程,不能据此证明后台没有连接外部系统。 |
| AI 智投 | 客户端展示产品、购买、转入转出和收益记录。 | 未发现模型、推理或策略实现,收益来源仍需服务端取证。 |
| 矿机 | 客户端没有真实挖矿所需的算力和矿池逻辑。 | 不能仅凭客户端证明运营方没有任何外部矿池。 |
| 远程更新 | 服务器可下发 WGT 地址,替换 JavaScript 业务代码。 | 需要继续审查更新包内容、签名和发布权限。 |
三、网络层:请求发往哪里
统一请求模块会设置 ba-user-token、token、server: 1、think-lang 和 Accept-Language 等请求头。主要域名会根据当前日期和小时生成前缀。
| 用途 | 基址特征 | 代码用途 |
|---|---|---|
| 普通 API | https://<动态前缀>.toobtc.com | 账户、首页、理财和常规业务 |
| 行情 / K 线 | https://<动态前缀>.toobit-aacn.foo | K 线、深度和成交数据 |
| 合约 API | https://<动态前缀>.toobit-aacn.top | 合约参数、买入、卖出和订单 |
| 图片资源 | https://oss.toobit-aacn.top | 图片和媒体资源 |
| 更新服务 | https://up.upaosoaad.one | 版本信息和 WGT / APK 下载地址 |
动态域名前缀会随小时变化。它可能用于负载切换、流量调度或其他运营设计,单凭 APK 无法判断真实目的。报告记录的只读检查中,当前分析环境无法建立到动态 API 和更新域名的 TCP/HTTPS 连接,也没有得到账户、订单或资金响应。
四、合约交易:客户端更像 API 操作台
合约页面对应 pages/trade/trade,接口模块包含以下请求:
| 操作 | 接口 | 客户端字段 |
|---|---|---|
| 查询参数 | POST /api/contract_order/contractInfo | kline_type |
| 买入 | POST /api/contract_order/buy | kline_type、price、num |
| 卖出 | POST /api/contract_order/sell | orderId |
| 订单列表 | POST /api/contract_order/list | page、pagesize、status、kline_type |
这些请求标记为 isCC: true,发送到合约域名。K 线、深度和成交也来自 HTTP 接口,例如 /api/coin_data/tickerInfo、/kline、/depth 和 /trade。
能确认的是:当前 APK 中的买卖动作是平台接口调用,未发现 EVM、Solana 或 Tron 的 RPC、钱包签名、eth_sendRawTransaction 或类似广播流程。
不能确认的是:后台一定伪造价格、一定没有外部撮合,或者一定拒绝提现。要判定交易真实性,需要将订单响应、结算记录、提现哈希和公开链或交易所流水逐笔对应。
五、AI 智投:名字里有 AI,不等于客户端真的在推理
AI 智投页面主要通过 pages/treasure/treasure、purchase 和 transfer 等页面调用后台 API:
POST /api/coin_management/index:产品列表。POST /api/coin_management/detail:产品详情。POST /api/coin_management/buy:购买产品。POST /api/coin_management/transferIn/transferOut:转入和转出。POST /api/coin_management/managementDynamicList:动态数据。POST /api/coin_change/managementIncomeList:收益记录。POST /api/management_order/list:购买记录。
产品名、结算币、封闭天数、发行量、剩余量、购买范围、价格、收益率和收益币种,都来自列表或详情响应。购买记录的进度条,则用服务器返回的创建时间、到期时间和当前时间在客户端计算。
在当前 APK 中没有发现模型文件、推理库、策略参数、量化计算或本地 AI 决策代码。更准确的描述是:客户端提供了一个中心化理财订单界面,产品逻辑和收益数字由服务器控制。这不等同于证明后台没有真实策略,但界面本身不能证明“AI 投资”真实存在。
六、矿机:客户端没有发现挖矿计算
矿机页面对应 pages/machine/machine,相关记录页会请求矿机列表、租赁和购买记录:
| 操作 | 接口 | 字段示例 |
|---|---|---|
| 矿机列表 | GET /api/miners/index | page、pagesize |
| 租赁 / 购买 | POST /api/miners_order/lease | minersId、price、settlementCoinName、num、fundPassword |
| 购买记录 | POST /api/miners_order/list | page、pagesize、status |
记录页面使用服务器返回的 gained_income、estimated_income 和 num 绘制收益进度。APK 中没有发现哈希循环、矿池地址、Stratum / WebSocket 挖矿协议、工作量证明提交或链上奖励领取逻辑。
所以从客户端证据看,它更像服务器记账的“矿机租赁”产品,而不是手机本地挖矿。要证明外部确有算力,还需要运营方提供可核验的矿池账户、算力曲线、奖励交易和矿池到用户的结算关系。
七、广告、跳转与远程更新
Manifest 中包含 DCloud WebView、下载服务和广告文件 Provider。首页轮播数据来自 /api/index/carouselList,点击后可以打开服务器下发的外部 URL、应用内页面或富文本详情。
静态代码能证明广告素材、轮播链接和落地页存在服务端下发路径,但不能据此证明广告主或商品真实可靠。网页跳转是代码允许的行为,不等于对目标站点背书。
更值得注意的是更新模块会请求 /api/index/appInfo。当版本信息变化时,客户端可以读取 wgtDownloadUrl,通过 plus.runtime.install() 安装 WGT 并重启。WGT 可以替换 WebView 中的 JavaScript 业务代码,意味着服务器具备在不重新发布 APK 的情况下改变业务逻辑的能力。
这是一条供应链风险边界:需要继续确认 WGT 是否有独立签名校验、更新地址是否固定、发布权限由谁掌控,以及更新包是否经过可审计的版本管理。
八、TLS、权限和后门检查
1. TLS 证书校验风险
cc.toobit.android.CustomTrustMgr 中的客户端和服务端证书校验方法为空,getAcceptedIssuers() 返回空数组。DCloud 会按“包名 + .CustomTrustMgr”的规则动态加载它。
如果该管理器实际用于业务请求,就意味着客户端可能接受未经严格验证的证书,中间人可以伪造通信端点。这会影响登录令牌、订单参数和返回数据的完整性。当前报告把它标记为严重通信安全风险,但仍应通过运行时抓包和证书替换测试确认影响范围。
2. 明文和敏感权限
- Manifest 设置了
android:usesCleartextTraffic="true"。 - 声明了
REQUEST_INSTALL_PACKAGES、INSTALL_PACKAGES、READ_LOGS、WRITE_SETTINGS、GET_ACCOUNTS等敏感或历史权限。 REQUEST_INSTALL_PACKAGES存在重复声明。
权限声明不等同于权限已经成功使用,但它扩大了应用需要被审查的范围。尤其是安装权限与远程更新机制结合时,应重点审查更新来源、用户确认流程和包签名。
3. 当前样本中未发现的内容
- 未发现自定义 Accessibility 服务、设备管理员、隐蔽开机自启 Receiver 或远程命令执行入口。
- 未发现助记词、私钥、WalletConnect、MetaMask、EVM / Solana / Tron RPC 或本地交易签名流程。
“未发现”只适用于当前 APK 和已解包资源。服务端逻辑、运行时动态加载内容和后续 WGT 仍然需要单独检查。
九、这份报告能证明什么,不能证明什么
| 问题 | 静态分析能回答的部分 | 仍需补充的证据 |
|---|---|---|
| 是否真实交易 | 客户端是否调用中心化买卖 API,是否包含链上签名。 | 后台撮合、订单结算、提现哈希和公开市场流水。 |
| 是否真实理财 | 客户端展示哪些产品字段,收益是否来自服务器响应。 | 资金托管、投资标的、收益来源和实际赎回记录。 |
| 是否真实挖矿 | 客户端是否有算力、矿池或奖励领取实现。 | 矿池账户、算力证明、奖励交易和结算记录。 |
| 是否存在诈骗 | 发现中心化控制、权限、通信或更新风险信号。 | 完整资金流、运营方行为、用户损失和动态取证。 |
因此,不能把“APK 里没有私钥”理解成平台安全,也不能把“客户端有收益页面”理解成收益真实。软件分析的价值,是把可验证的技术边界先标出来,再指导后续取证。
十、建议的下一步取证
- 使用专用测试账户记录登录、合约下单、理财购买、矿机租赁和提现的完整 HTTP 响应。
- 保存订单号、充值地址、提现地址、提现哈希和时间戳,并与公开区块链浏览器逐笔对照。
- 核对后台显示余额是否能由链上交易、托管记录或公开市场流水独立计算。
- 检查更新接口返回的 WGT / APK 地址、版本号、签名信息和下载后的实际代码变化。
- 在可回滚设备上复现证书校验行为,记录请求是否接受不受信任证书。
- 不要在主账户输入资金密码,也不要用大额资金验证提现流程。
常见问题
这份 APK 分析能证明 Toobit 一定存在诈骗吗?
不能。它能证明客户端的接口、权限和更新逻辑,但不能单独证明服务器账本、资金去向或运营方意图。最终判断需要动态接口、提现记录和资金流水。
Toobit 的矿机功能是在手机上真实挖矿吗?
当前样本没有发现哈希计算、矿池 Stratum 协议、算力提交或链上奖励领取逻辑。客户端更像请求矿机产品和收益记录的界面。
客户端没有私钥就代表资金安全吗?
不代表。没有本地私钥只说明当前样本未发现本地钱包签名。若余额、订单和收益依赖中心化服务器,仍要核验提现规则、资产归属和可审计的资金路径。
结语
这份 Toobit APK 静态报告最重要的发现,不是某一个接口名称,而是整个业务的控制边界:交易、AI 智投和矿机都以中心化 HTTP API 为核心;收益、余额和进度主要由服务器返回;客户端还存在证书校验实现异常与远程 WGT 代码更新能力。
同时,当前样本没有发现典型本地后门、助记词窃取或链上钱包签名流程。这个结果需要和前面的风险一起理解:未发现本地窃取代码,不等于平台资产安全;存在中心化接口,也不等于已经证明运营方违法。
下一步应把静态代码和动态流量、服务器响应、提现记录及公开链数据放在一起验证。先确认事实,再判断风险,这是软件逆向分析最有价值的地方。