微信小程序反编译教程获取源码

背景:

开发的时候需要一些素材,发现小程序(.wxapkg)里有一些图标或背景图很好看,但又没办法直接获取到(小程序里如果打包时候直接集成进去的fiddler是无法监听到网络请求的),于是研究小程序结构,决定通过代码解放小程序...

开工

厦门植物园 小程序为例

首先打开电脑上小程序的位置

注:为了便于找到可以把小程序先移除再重新打开,这样就会在本地出现一个最新日期的小程序文件

下载文章上部的微信小程序 反编译小工具

点击选择文件按钮选择对应的小程序目录如下图

 点击 打开按钮即可解压,下图中的文件夹即是 小程序反编译后的代码

 

代码解析及原理

这个反编译的原理就是 利用这个文件的一个 组织结构,文件的存储结构进行分析,这个原理是网上网友(代码果)分享的,如果一般人 真的无法知晓这个小程序的编译结构!

第一步 重新组织文件结构

string fileName = openFileDialog.FileName;
byte[] source = this.FileContent(fileName);
string miniAppFlag = Encoding.UTF8.GetString(source.Take(6).ToArray<byte>());
this.textBox2.AppendText("文件选择:" + fileName + "\r\n");
bool needUnEncrypt = miniAppFlag == "V1MMWX";
string appId = this.GetStr(fileName, "Applet\\\\", "\\\\");
if (needUnEncrypt)
{
	if (string.IsNullOrEmpty(appId))
	{
		this.textBox2.AppendText("疑似非小程序,请重新选择!\r\n");
	}
	else
	{
		this.outFileName = "\\" + appId + ".wxapkg";
		this.textBox2.AppendText("文件解密中...\r\n");
		string salts = "saltiest";
		byte[] bytes = Encoding.UTF8.GetBytes("the iv: 16 bytes");
		byte[] strKey = this.PBKDF2(appId, salts);
		byte[] source2 = Form1.AESDecrypt(source.Skip(6).Take(1024).ToArray<byte>(), bytes, strKey);
		byte[] array2 = source.Skip(1030).ToArray<byte>();
		int num = Form1.Asc(appId.Substring(appId.Length - 2, 1));
		int num2 = array2.Length;
		List<byte> list = new List<byte>();
		list.AddRange(source2.Take(1023).ToArray<byte>());
		int num3;
		for (int i = 0; i < num2; i = num3 + 1)
		{
			list.Add((byte)((int)array2[i] ^ num));
			num3 = i;
		}
		this.textBox2.AppendText("解密成功->" + this.outFileName + "\r\n");
		this.writerFile(list.ToArray(), this.AppPath + this.outFileName);
	}
}

第二步 解压缩

FileStream fileStream = new FileStream(this.AppPath + this.outFileName,FileMode.Open);
BinaryReader binaryReader = new BinaryReader(fileStream);
binaryReader.BaseStream.Position = 14;

int fileCount = readInt(binaryReader);
List<WxapkgItem> wxapkgItems = new List<WxapkgItem>();
for (int i = 0; i < fileCount; i++) {
	int nameLen = readInt(binaryReader);
	byte[] buf = new byte[nameLen];
	buf = binaryReader.ReadBytes(nameLen);

	string name = System.Text.Encoding.UTF8.GetString(buf, 0, nameLen);
	int start = readInt(binaryReader);
	int length = readInt(binaryReader);
	wxapkgItems.Add(new WxapkgItem(name, start, length));
}

foreach (WxapkgItem wxapkgItem in wxapkgItems) {
	byte[] file = new byte[wxapkgItem.getLength()];
	binaryReader.BaseStream.Position = wxapkgItem.getStart();
	file = binaryReader.ReadBytes(wxapkgItem.getLength());
	string filepath = this.AppPath + "\\" + appId + wxapkgItem.getName();
	this.textBox2.AppendText(filepath.Replace("\\","/")+ "\r\n");
	writerFile(file.ToArray(), filepath);
}
binaryReader.Close();

总结 

这个小程序的结构也算是行业通用组织结构,类似于谷歌浏览器的插件也是类似结构,放置到运行前端,提升速度,真正核心的还是 小程序 所对应的后端代码,放置在微信里的可以理解为是一套UI图~

转载请注明出处,谢谢!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
微信小程序反编译工具软件.exe是一款专门用于解析和还原微信小程序的工具。由于微信小程序是经过编译的,普通用户无法直接获取其中的源代码。而这款反编译工具则能够将编译后的小程序进行解析,将其中的代码和资源文件提取出来,以便用户进行分析、修改或二次开发。 通过微信小程序反编译工具软件.exe,用户可以打开微信小程序的文件,并查看其中的逻辑代码、样式表、配置文件以及相关资源文件,如图片、音频等。这对于开发者和研究人员来说是非常有用的,他们可以通过分析小程序的源代码,了解小程序的实现原理、设计思路以及技术实现细节,从而更好地进行开发和研究工作。 同时,微信小程序反编译工具软件.exe还提供了一些辅助功能。比如,它可以对提取出来的代码进行格式化和优化,使其更易读、易理解。另外,用户还可以根据需要对代码进行修改或添加新的功能,并重新编译生成可运行的小程序。 需要注意的是,使用微信小程序反编译工具软件.exe进行逆向工程可能涉及到一些法律和道德问题。在使用过程中,应遵守相关法律法规,并尊重原始开发者的权益和劳动成果。同时,未经授权修改和发布他人的小程序可能会造成损失或侵权行为,因此在使用该工具时应谨慎操作,遵循合理使用原则。 总之,微信小程序反编译工具软件.exe是一款有助于开发和研究微信小程序的工具,通过它,用户可以解析、修改和重新编译微信小程序,以满足个性化需求和研究目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值