目的:C#实现小程序包wxapkg文件解密算法。

工具:vs2015+百度 .net版本选择2.0(环境依赖低)
备注:已知有python版本,有点重复造轮子。但exe的不用其它依赖,双击打开就能用岂不美哉!

首先我们通过GitHub大神获得小程序包已知加密算法:

PC端微信把wxapkg给加密,加密后的文件的起始为V1MMWX。

加密方法为:

首先pbkdf2生成AES的key。利用微信小程序id字符串为pass,salt为saltiest 迭代次数为1000。调用pbkdf2生成一个32位的key
    取原始的wxapkg的包得前1023个字节通过AES通过1生成的key和iv(the iv: 16 bytes),进行加密
    接着利用微信小程序id字符串的倒数第2个字符为xor key,依次异或1023字节后的所有数据,如果微信小程序id小于2位,则xorkey 为 0x66
    把AES加密后的数据(1024字节)和xor后的数据一起写入文件,并在文件头部添加V1MMWX标识

已知参数:
微信小程序ID
salt:saltiest
iv:the iv: 16 bytes
已知加密/解密方法:
pbkdf2
AES
异或

那我们在电脑C:\Users\Administrator\Documents\WeChat Files\Applet\目录随便找一个微信小程序包:
然后vs里创建个项目,画一个按钮和一个文本框。然后定义已知参数:

 string wid = "wx94af8311484aa69a";byte[] iv = Encoding.UTF8.GetBytes("the iv: 16 bytes");string salts = "saltiest";

通过搜索引擎获取几个需要的函数:

搜索关键词:
c# PBKDF2
c# 文件读写 byte
c# AES byte

当然并非直接可用,需要部分修改完善。但基本改动不大,省去很多时间,起码不用看c#从入门到精通了,整理修改得到如下代码:

public static byte[] AESDecrypt(byte[] inputdata, byte[] iv, byte[] strKey)
{SymmetricAlgorithm des = Rijndael.Create();des.Key = strKey;des.IV = iv;byte[] decryptBytes = new byte[inputdata.Length];using (MemoryStream ms = new MemoryStream(inputdata)){using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read)){cs.Read(decryptBytes, 0, decryptBytes.Length);cs.Close();ms.Close();}}return decryptBytes;
}
public byte[] PBKDF2(string wxid,string salts) {byte[] salt = Encoding.UTF8.GetBytes(salts);//RNGCryptoServiceProvider cryptoProvider = new RNGCryptoServiceProvider();//cryptoProvider.GetBytes(salt);Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(wxid, salt, 1000);return pbkdf2.GetBytes(32); // 改为32位
}
//读取文件到byte[]
private byte[] FileContent(string fileName)
{using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)){try{byte[] buffur = new byte[fs.Length];fs.Read(buffur, 0, (int)fs.Length);return buffur;}catch (Exception ex){throw ex;}}
}//利用byte[]数组写入文件
protected void writerFile(byte[] array,string fileName)
{              //创建一个文件流FileStream fs = new FileStream(fileName, FileMode.Create);//将byte数组写入文件中fs.Write(array, 0, array.Length);//所有流类型都要关闭流,否则会出现内存泄露问题fs.Close();
}

首先我们获取key

byte[] key = PBKDF2(wid, salts);

然后解密头部1023字节

byte[] dataByte = FileContent("__APP__.wxapkg");
byte[] originData = AESDecrypt(dataByte.Skip(6).Take(1024).ToArray(),iv,key); //从第7个字节开始获取1024字节然后AESDecrypt

解密,再提取解密后的前1023字节,至此头部的解密完成,那么对不对呢,我们已知有python版的,那么我们就打印出来key和解密后的base64编码(为了方便比较统一编码)


剩下的就是把1024字节以后的与xorkey异或解密加上上面的头部写入即可。方法如上:重复搜索整理,相信大家已经掌握!由于本帖着重讨论方法而非源码,因此不再赘述!

拙见:编程重在解决问题的方法和思路而非编程本身,互联网真是知识的海洋,当然也有坑!
优势:有网能上天入地
缺陷:断网懵逼

参考资料:
https://www.cnblogs.com/ldyblogs/p/Byte.html
https://bbs.csdn.net/topics/394385963
https://blog.csdn.net/weixin_30794851/article/details/98793268

搜索编程的艺术之C#实现微信小程序包解密相关推荐

  1. windows模拟微信小程序_【原创】PC微信小程序包解密工具C#版无需root或模拟器

    本帖最后由 daimaguo 于 2020-12-25 10:18 编辑 提示:鉴于有网友回复不知道干什么用的,因此有必要重新修改一次,写上完整的使用说明,说白了就是获取线上小程序源码的辅助工具,电脑 ...

  2. [node.js]PC端微信小程序包解密

    原来发布在掘金,搬过来好了. 微信小程序在PC端是加密存储的,如果直接打开是看不到什么有用的信息的,需要经过解密才可以看到包内具体的内容.本文使用nodejs实现解密算法,主要涉及到crypto, c ...

  3. dwcs6怎么添加搜索框_一文教会你微信小程序搜索怎么用、怎么优化

    生活中我们常常会用到微信小程序,但很多人不知道该如何搜索.找到小程序:而有些已经做了自己的小程序的商家,也不懂怎么提升自己的微信小程序搜索效果.所以下面就跟大家科普下这两个问题. 1.怎么搜索微信小程 ...

  4. 最新版2023免费设计艺术签名多种模式微信小程序源码 支持微信流量主功能

    某交易网站上卖500元的源码,免费设计艺术签名,支持微信流量主 下载链接 网盘源码   密码:3lev 背景 近年来,微信小程序已经成为了移动互联网领域中的一个重要平台,它可以帮助开发者轻松地开发和发 ...

  5. 微信小程序加密解密 C# 以及 填充无效,无法被移除错误的解决方案 Padding is invalid and cannot be removed

    微信小程序加密解密 C# 以及 填充无效,无法被移除错误的解决方案 Padding is invalid and cannot be removed 参考文章: (1)微信小程序加密解密 C# 以及 ...

  6. 如何获取微信小程序包

    下载一个夜神模拟器 并在模拟器中下载微信 打开并登陆微信,访问小程序等小程序加载 完成则可以获取微信小程序的pak包 打开Amaze 文件管理 点击文件根目录 依次访问 data/data/com.t ...

  7. java实现微信小程序加密数据解密的代码怎么写

    前言 微信小程序好坑啊!java明明是用户量最大的编程语言,可是都2021年了,他的小程序文档到现在都没有更新上java实现加密数据解密算法.... 微信小程序官方文档如下: 服务端获取开放数据 | ...

  8. Golang 微信小程序加密数据解密算法实现

    Go 语言 微信小程序加密数据解密算法实现 代码实现 本实现参考官方PHP例程实现,Go代码实现如下: func DecryptData (app_id, session_key, iv, encry ...

  9. 微信小程序密文解密工具

    微信小程序密文解密工具 小程序对于敏感信息采用了加密,如果想得到明文必须解密,官方上提供了几种语言的demo,唯独没有java版的,这是在搞事情啊 因此在此提供一个java版的解密工具类 此工具类需要 ...

最新文章

  1. plotly可视化绘制多子图(subplots)共享坐标轴
  2. Oracle维护常用SQL语句
  3. android 蓝牙耳机 判断,Android实现蓝牙耳机连接
  4. 在内地城区经济发展中冒头,长沙雨花是如何做到的?
  5. vivo手机解锁工具_屏幕指纹优势凸显,vivo持续研发致力打造全屏指纹解锁
  6. GMPC:一个 MPD 客户端
  7. git拉取请求_向需要的开源项目提供拉取请求的礼物
  8. jQuery 查找父元素
  9. JavaScript用法(1)
  10. 【计算机组成原理】计算机系统概论
  11. layui 下拉框多选数据_智慧职教mooc2020大数据基础课后答案
  12. 前端响应式布局与Bootstrap栅格系统快速了解与应用
  13. Sobel 边缘检测 matlab代码实现
  14. irving - 初学python
  15. 新势力新名片-上海度普新能源通过ASPICE CL2评估!
  16. markdown语法教学(for萌新版)
  17. 微信小程序搜索php,如何解决微信小程序没有模糊搜索功能
  18. http://bigwhite.blogbus.com/logs/1347304.html
  19. EMC 重新注册license
  20. 基于Cython编译整个Python项目并保留原项目结构

热门文章

  1. 小米校招编程题:数组乘积、异形数、朋友圈
  2. 李亚涛:python知道长尾关键词挖掘工具
  3. office2013安装包
  4. java vtk 三维_[WPF VTK]三维图形开发基础(四)
  5. 计算机系统自动撮合成交的原则,如何进行计算机撮合成交?计算机撮合成交有哪些方式?...
  6. php使用淘宝IP库接口获取 IP所属地和运营商
  7. replace()中的/g是什么意思?
  8. 机器学习之分类、回归、标注问题
  9. 映美Jolimark CFP-535G 打印机驱动
  10. JavaWeb 图书管理系统(数据库综合实验)