Md5加密中文的坑

本文探讨了MD5加密过程中遇到的针对中文字符的特殊问题,分析了原因并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到过加密中文参数,一直都是用一个通用的类来加密

public static String MD5(String str)  
    {  
        MessageDigest md5 = null;  
        try  
        {  
            md5 = MessageDigest.getInstance("MD5"); 
        }catch(Exception e)  
        {  
            e.printStackTrace();  
            return "";  
        }        
        char[] charArray = str.toCharArray();  
        byte[] byteArray = new byte[charArray.length];  
          
        for(int i = 0; i < charArray.length; i++)  
        {  
            byteArray[i] = (byte)charArray[i];  
        }  
        byte[] md5Bytes = md5.digest(byteArray);  
          
        StringBuffer hexValue = new StringBuffer();  
        for( int i = 0; i < md5Bytes.length; i++)  
        {  
            in
<think>好的,用户想了解小程序逆向工程的详细过程,包括脱壳流程、示例代码、加密解密相关的内容,比如key和iv的定位,还有路由和请求过程的分析。首先,我需要回忆一下小程序的结构和相关技术。 小程序通常是指微信小程序,它们的主包是.wxapkg文件。逆向工程的第一步通常是获取这个包文件,可能需要root手机或者利用模拟器导出。然后进行解包和反编译,得到源代码。不过微信小程序可能会被加密或者压缩,这时候就需要脱壳处理。脱壳可能需要使用工具如unveilr或wxapkgUnpacker,或者手动分析加密方式,找到解密函数进行动态调试。 接下来是分析代码结构。小程序的代码一般包括app.js(入口)、页面组件、配置文件等。反编译后的代码可能是压缩过的,需要格式化工具美化代码,便于阅读。用户可能需要示例代码,可以举一个反编译后的页面结构示例,比如Page函数定义的页面逻辑,包括data、生命周期函数、事件处理等。 关于加密解密,小程序可能会对通信数据进行加密,常见的如AES加密,需要找到key和iv。key和iv可能硬编码在代码中,或者动态生成。需要分析网络请求的代码,定位加密函数的位置。例如,在wx.request的调用前后可能有加密解密的处理。这里可以举例说明如何搜索关键词如CryptoJS.AES.decrypt或encrypt来定位相关代码。 路由和请求过程的分析需要查看app.json里的页面配置,了解页面跳转逻辑。网络请求部分则要关注wx.request的调用,查看请求参数如何构造,是否有签名或加密。可能需要抓包工具如Charles配合,对比请求数据和反编译代码,分析加密算法。 用户提到的示例代码和中文注释,需要确保代码的正确性,比如展示如何解包、解密,或者如何提取key和iv。同时,要注意使用正确的LaTeX格式,比如数学公式用$包裹,独立公式用$$。 还需要考虑用户可能的实际需求,比如他们是否想自己进行逆向分析,或者了解如何保护自己的小程序。因此,在回答中可以加入一些注意事项,比如法律风险和技术难点。 最后,生成相关问题,帮助用户进一步探索。例如,如何防止小程序被逆向,或者常见的加密方法有哪些优化手段。确保问题与用户查询相关,并且有引导性。</think>### 小程序逆向工程详解 #### 1. 脱壳流程 微信小程序主包格式为`.wxapkg`,逆向工程通常包含以下步骤: 1. **获取小程序包**:通过手机Root权限导出,或使用模拟器工具(如MuMu/夜神)+文件管理器定位路径`/data/data/com.tencent.mm/MicroMsg/{hash}/appbrand/pkg/` 2. **解包工具处理**:使用`wxapkgUnpacker`或`unveilr`工具解包 ```python # 示例解包代码片段 import wx_decrypt wx_decrypt.wxapkg_unpack('input.wxapkg', 'output_dir') ``` 3. **反编译JS代码**:使用`wcsc`反编译工具处理`.wxss`,`wcc`处理`.wxml`,得到近似源码结构[^1] #### 2. 关键代码分析 反编译后代码通常包含以下结构: ```javascript // app.js 入口文件(示例) App({ onLaunch() { console.log("初始化完成"); this._initNetwork(); // 初始化网络模块 }, _initNetwork() { wx.request({ url: 'https://api.example.com/login', data: this._encryptPayload({user: 'test'}), // 加密函数定位点 success: res => this._handleResponse(res) }); }, _encryptPayload(data) { return CryptoJS.AES.encrypt(JSON.stringify(data), '密钥key', {iv: '偏移量iv'}); // 硬编码密钥示例 } }); ``` #### 3. 加密解密分析 - **定位关键参数**: - 搜索关键词:`CryptoJS.AES`、`encrypt`、`decrypt` - 示例AES加密函数调用: $$E(x) = AES\_CBC(plaintext=x, key=k, iv=v)$$ - 通过动态调试(Xposed+FRIDA)可提取内存中的`key/iv` - **动态注入示例**: ```javascript // FRIDA Hook代码(截取加密参数) Interceptor.attach(CryptoJS.AES.encrypt, { onEnter: function(args) { console.log("Key:", args[1].toString()); console.log("IV:", args[2].iv.toString()); } }); ``` #### 4. 网络请求分析 1. **抓包定位**:使用Charles/Fiddler捕获HTTPS请求 2. **请求链路追踪**: - 在反编译代码中搜索`wx.request` - 分析请求参数构造过程(如签名算法`sign=md5(params+timestamp)`) 3. **路由解析**:查看`app.json`中`pages`配置,匹配页面跳转逻辑 #### 5. 技术难点与风险 - **代码混淆**:变量名缩短、控制流平坦化(需使用AST反混淆工具) - **法律风险**:逆向工程需遵守《计算机软件保护条例》第17条[^1] - **动态防护**:部分企业级小程序使用VMP加固,需定制脱壳机
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值