本次攻击中,黑客通过利用市场合约中的claimRewards函数实现重入质押,以此提高staking合约的余额。具体步骤如下:1. **创建攻击合约**:黑客首先创建了一个专门用于实施攻击的合约。2. **利用官方factory构建市场合约**:接着,黑客通过官方提供的factory,构建了与被攻击市场合约对应的实例。3. **调用批量收获奖励函数**:黑客调用了staking合约的batchHarvestMarketRewards函数,对特定市场进行了奖励更新。4. **触发重入漏洞**:在奖励更新过程中,系统回调了攻击合约的claimRewards函数,从而实现了重入。在此过程中,黑客利用闪电贷获取的资产进行质押,导致staking合约的资产数量失衡。5. **提取多余资产**:攻击者将质押后的多余资产提取出来,归还闪电贷以获取收益。总结而言,黑客巧妙地利用了市场合约中的设计缺陷,通过重入攻击手段,成功盗取了Penpie协议的大量加密资产。