欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

微信小程序解包 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們在追求其視覺表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?

您當(dāng)前位置>首頁 » 新聞資訊 » 小程序相關(guān) >

微信小程序解包

發(fā)表時(shí)間:2021-3-31

發(fā)布人:葵宇科技

瀏覽次數(shù):135

此處使用Windows版微信做介紹,但是Windows版和手機(jī)版稍微有點(diǎn)區(qū)別。先去獲取一個(gè)Windows版的微信小程序包。默認(rèn)位置在: C:\Users\user\Documents\WeChat Files\Applet 。移動(dòng)端的包在 /data/data/com.tencent.mm/MicroMsg/{id}/appbrand/pkg ,此處沒有移動(dòng)設(shè)備,不使用移動(dòng)設(shè)備做演示。

目錄下有一堆wx開頭的目錄,這些ID就是對應(yīng)的小程序ID,可以在訪問小程序抓包中獲取到,如果懶得抓包也不知道小程序ID就把這些刪掉,重新訪問會(huì)再次下載,根據(jù)日期來找到對應(yīng)的包即可。

Windows版的小程序包自動(dòng)在外部加了一層的加密,我們看到的包名統(tǒng)一為: __APP__.wxapkg 。我們可以看到這樣的文件頭,V1MMWX標(biāo)識(shí)就是加密后添加的標(biāo)識(shí)。

這個(gè)是需要解密的,借助大佬的go語音項(xiàng)目來解密: https://github.com/BlackTrace/pc_wxapkg_decrypt ,同時(shí)也有編譯后的程序,直接用即可。

那Windows版的小程序的加密流程為:

  1. 首先pbkdf2生成AES的key。利用微信小程序id字符串為pass,salt為 saltiest 迭代次數(shù)為1000。調(diào)用pbkdf2生成一個(gè)32位的key
  2. 首先取原始的wxapkg的包得前1023個(gè)字節(jié)通過AES通過1生成的key和iv( the iv: 16 bytes ),進(jìn)行加密
  3. 接著利用微信小程序id字符串的倒數(shù)第2個(gè)字符為xor key,依次異或1023字節(jié)后的所有數(shù)據(jù),如果微信小程序id小于2位,則xorkey 為 0x66
  4. 把AES加密后的數(shù)據(jù)(1024字節(jié))和xor后的數(shù)據(jù)一起寫入文件,并在文件頭部添加 V1MMWX 標(biāo)識(shí)

解密后,就能獲得一個(gè)以微信小程序ID命令的包,這個(gè)包就是需要解析來獲取小程序源碼的包。先來看一下小程序的結(jié)構(gòu)。

從十六進(jìn)制中可以看到,旁邊的文件目錄文件。這種包并非一個(gè)壓縮格式的包,而是一個(gè)二進(jìn)制的包,需要特定的方法解包。

小程序解包

使用工具: https://gist.github.com/Integ/bcac5c21de5ea35b63b3db2c725f07ad

執(zhí)行: python3 python.py wxid.wxapkg ,可以看到目錄下生成的微信id的目錄包。

或者使用: https://github.com/xuedingmiaojun/wxappUnpacker ,一個(gè)nodejs的項(xiàng)目。提供Windows的安裝版。

獲取到小程序的源碼格式包的時(shí)候,跟原來的源碼還是稍微有點(diǎn)區(qū)別。在一級目錄下,可以看到有三個(gè)文件,實(shí)際上不同的解包工具看到的不一樣,有時(shí)候是四個(gè)文件。

app-service.js
app-config.json
page-frame.html
//app.js

app-service.js 是所以js的匯總,只是微信把js都壓縮到這個(gè)js內(nèi)。

app-config.json : 小程序工程 app.json 以及各個(gè)頁面的 JSON 配置文件匯總,可直接查看;

page-frame.html : 所有頁面的 .wxml 和 app.wxss 樣式文件的匯總;

*.html : 包含每個(gè)頁面對應(yīng)的 .wxss 信息,可讀性較好;

static : 各類圖片、音頻等資源文件。

獲取解包后,小程序源碼有什么用?

小程序內(nèi)的信息泄露

有一部分開發(fā)者會(huì)把Appid和Secret放在小程序內(nèi)請求,比如如下的開發(fā)者


如果這個(gè)appid和secret可以使用,就能獲取到seesion_key。借用官方的登陸流程。

所以需要code和appid還有secret,code如何獲取,只需要使用帶有登陸功能的點(diǎn),需要觸發(fā)了wx.login()功能,點(diǎn)擊登陸抓包即可。

一般打開小程序的時(shí)候就有流量交互了。比如,但這個(gè)code只能使用一次

構(gòu)造一個(gè)請求,查看小程序官方文檔: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

curl https://api.weixin.qq.com/sns/jscode2session?appid=wxxxxx&secret=568wdxxx&js_code=041xxxx&grant_type=authorization_code

為了方便,此處使用云函數(shù)功能測試,需要小程序開啟云函數(shù)。使用python的第三方包 python-weixin 。但云函數(shù)功能不一定都開放,需要小程序開放才能查詢。

from os import environ, path
from weixin import WxAppCloudAPI
?
appid = environ.get("WXAPP_APPID", "wx88xxxxx")
secret = environ.get("WXAPP_SECRET", "56xxxxx")
env = "test-id"
?
example_db = path.abspath(path.join(path.dirname(__file__), "./example_db"))
app_cloud = WxAppCloudAPI(
    appid=appid, app_secret=secret, grant_type="client_credential"
)
token = app_cloud.client_credential_for_access_token().get("access_token")
print(token)
?
cloud_api = WxAppCloudAPI(access_token=token)
# 獲取庫的集合信息
db_info = cloud_api.db_collection_info(json_body={"env": env, "limit": 10})
print(db_info)

根據(jù)包的wiki來利用云函數(shù)操作小程序,文檔: https://github.com/gusibi/python-weixin/wiki/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%BA%91%E5%BC%80%E5%8F%91

利用accesstoken

獲取session_key是用戶數(shù)據(jù)的加密密鑰,那accesstoken就是操作小程序的調(diào)用憑證。

先獲取accesstoken,也可以利用上面提到的代碼來獲取accesstoken。

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

獲取到token后可以利用官方的接口操作小程序來查詢等操作,比如查詢最近一天的訪問

https://api.weixin.qq.com/datacube/getweanalysisappidvisitpage?access_token=ACCESS_TOKEN
data = https://www.wxapp-union.com/{"begin_date" : "20170313","end_date" : "20170313"}

其他查詢接口查看: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html

相關(guān)案例查看更多