Metadata Fixer 分析历程

仅供学术参考,不鼓励非法使用

🔍 第一阶段:初始侦察
目标识别:Google Photos Metadata Fixer - 一个声称能恢复Google Takeout元数据的付费工具
初步分析:使用IDA Pro对exe进行反编译
发现:32位NSIS安装程序,包含临时目录创建和文件解压逻辑
🎯 第二阶段:架构理解
关键发现:在另一个代码片段中识别出Electron框架特征
electron::fuses::IsRunAsNodeEnabled
64位程序,与安装程序分离
架构确认:传统安装程序 + Electron应用的组合
📦 第三阶段:深入挖掘
ASAR解包:成功提取app.asar文件
意外发现:
软件套壳了GPL协议的ExifTool
包含未删除的changelog
代码经过webpack打包和混淆
🔐 第四阶段:验证机制分析
关键代码定位:
javascript
const Ue = "https://license.metadatafixer.com"
// 客户端验证逻辑
弱点识别:
客户端验证
Redux状态管理未加密
IPC通信可拦截
✅ 第五阶段:成功破解
实施:修改验证逻辑
结果:程序成功运行,成功不付费处理文件
📊 技术收获
多层封装:PE → Electron → ASAR → Minified JS
安全反模式:客户端验证的典型案例
道德讽刺:付费软件违规使用开源工具

🎓价值
现代应用架构分析的完整流程
多层混淆突破的实践经验
软件许可验证机制的安全性研究素材
开源协议违规检测的真实案例

💡 感悟
"客户端逻辑基本是完全不可防范的,毕竟连IDA都能被破解”

2025.8.4 1129
惊人的发现他的校验有点高级,导致需要写个假的服务器,懒得逆向了

from flask import Flask, jsonify, request
import uuid

app = Flask(__name__)

@app.route('/redeem', methods=['POST'])
def redeem():
    # Always return the same response regardless of request content
    response = {
        "error": None,  # In Python, None is equivalent to null in JSON
        "data": {
            "email": "user@example.com",
            "licenseKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
    }
    
    return jsonify(response)

# Handle other methods on /redeem endpoint
@app.route('/redeem', methods=['GET', 'PUT', 'DELETE'])
def redeem_method_not_allowed():
    return jsonify({"error": "Method not allowed"}), 405

@app.route('/is-valid', methods=['GET'])
def is_valid():
    # Always return empty object regardless of query parameters
    # Query parameters like licenseKey and email are ignored
    return jsonify({})

# Optional: Add a simple health check endpoint
@app.route('/', methods=['GET'])
def health_check():
    return jsonify({"status": "running"})

if __name__ == '__main__':
    # Run the server on 127.0.0.1:5000 by default
    app.run(host='127.0.0.1', port=5000, debug=True)
posted @ 2025-08-01 13:57  peterzh6  阅读(13)  评论(0)    收藏  举报