-
Notifications
You must be signed in to change notification settings - Fork 209
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 8afc5f9
Showing
4 changed files
with
116 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
module pc_wxapkg_decrypt | ||
|
||
go 1.13 | ||
|
||
require golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= | ||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
package main | ||
|
||
import ( | ||
"crypto/aes" | ||
"crypto/cipher" | ||
"crypto/sha1" | ||
"flag" | ||
"fmt" | ||
"golang.org/x/crypto/pbkdf2" | ||
"io/ioutil" | ||
"log" | ||
) | ||
|
||
|
||
var ( | ||
wxid string | ||
iv string | ||
salt string | ||
wxapkgPath string | ||
decWxapkgPath string | ||
) | ||
|
||
func main(){ | ||
flag.StringVar(&wxid,"wxid","","小程序的id") | ||
flag.StringVar(&iv,"iv","the iv: 16 bytes","AES加密的IV,默认不需要设置,如果版本有变化,设置") | ||
flag.StringVar(&salt,"salt","saltiest","pbkdf2用到的salt,默认不需要设置") | ||
flag.StringVar(&wxapkgPath,"in","__APP__.wxapkg","需要解密的wxapkg的文件路径") | ||
flag.StringVar(&decWxapkgPath,"out","dec.wxapkg","解密后的wxapkg的文件路径") | ||
flag.Parse() | ||
|
||
if wxid == ""{ | ||
fmt.Println("缺少wx小程序id(wxid),该id在pc存放wxapkg包的路径上寻找") | ||
return | ||
} | ||
dec() | ||
} | ||
|
||
func dec(){ | ||
dataByte,err := ioutil.ReadFile(wxapkgPath) | ||
if err != nil{ | ||
log.Fatal(err) | ||
} | ||
|
||
dk := pbkdf2.Key([]byte(wxid),[]byte(salt),1000,32,sha1.New) | ||
block,_ := aes.NewCipher(dk) | ||
blockMode := cipher.NewCBCDecrypter(block,[]byte(iv)) | ||
originData := make([]byte,1024) | ||
blockMode.CryptBlocks(originData,dataByte[6:1024+6]) | ||
|
||
afData := make([]byte,len(dataByte) - 1024 - 6) | ||
var xorKey = byte(0x66) | ||
if len(wxid) >= 2 { | ||
xorKey = wxid[len(wxid) - 2] | ||
} | ||
for i,b := range dataByte[1024+6:]{ | ||
afData[i] = b ^ xorKey | ||
} | ||
|
||
originData = append(originData[:1023],afData...) | ||
|
||
err = ioutil.WriteFile(decWxapkgPath,originData,0666) | ||
if err != nil{ | ||
fmt.Println("写文件失败") | ||
return | ||
} | ||
fmt.Println("解密成功") | ||
} | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# windows PC端wxapkg解密 | ||
|
||
## 说明 | ||
由于不想安装安卓模拟器去提取wxapkg包,windows PC端的微信也支持小程序,但是PC端的wxapkg是被加密存储的。该项目是把wxapkg解密。目前微信PC版本为:**2.9.5.31**. | ||
## 使用方法 | ||
`pc_wxapkg_decrypt.exe -wxid 微信小程序id -in 要解密的wxapkg路径 -out 解密后的路径` | ||
|
||
``` | ||
pc_wxapkg_decrypt.exe -h | ||
Usage of pc_wxapkg_decrypt.exe: | ||
-in string | ||
需要解密的wxapkg的文件路径 (default "__APP__.wxapkg") | ||
-iv string | ||
AES加密的IV,默认不需要设置,如果版本有变化,设置 (default "the iv: 16 bytes") | ||
-out string | ||
解密后的wxapkg的文件路径 (default "dec.wxapkg") | ||
-salt string | ||
pbkdf2用到的salt,默认不需要设置 (default "saltiest") | ||
-wxid string | ||
小程序的id | ||
``` | ||
|
||
wxapkg路径为:C:\Users\xxxx\Documents\WeChat Files\Applet\\**wx2xxx84w9w7a3xxxx**\\\__APP__.wxapkg,小程序id为:wx2xxx84w9w7a3xxxx | ||
|
||
解密完成后,就可以用wxappUnpacker(https://github.com/gudqs7/wxappUnpacker)解包了。 | ||
## 原理 | ||
PC端微信把wxapkg给加密,加密后的文件的起始为**V1MMWX**。 | ||
|
||
加密方法为: | ||
1. 首先pbkdf2生成AES的key。利用微信小程序id字符串为pass,salt为**saltiest** 迭代次数为1000。调用pbkdf2生成一个32位的key | ||
2. 首先取原始的wxapkg的包得前1023个字节通过AES通过1生成的key和iv(**the iv: 16 bytes**),进行加密 | ||
3. 接着利用微信小程序id字符串的倒数第2个字符为xor key,依次异或1023字节后的所有数据,如果微信小程序id小于2位,则xorkey 为 **0x66** | ||
4. 把AES加密后的数据(1024字节)和xor后的数据一起写入文件,并在文件头部添加**V1MMWX**标识 |