淺談微信小程序

前言

太多時間遇到微信小程序的滲透測試,而自身就對其不甚了解,借此梳理微信小程序的一些知識點。

開發(fā)流程

小程序可以理解成以后一種只能用微信打開和瀏覽的網(wǎng)站。
小程序開發(fā)首先需要去 微信公眾平臺 申請一個AppID。申請
之后,會得到一個AppID(小程序編號)和 AppSecret(小程序密鑰)。

image.png

再下載微信提供的小程序開發(fā)工具影钉,來運行和調(diào)試小程序源碼廉赔。

image.png

本地創(chuàng)建一個hello-world的項目劳曹,來導(dǎo)入運行蜕劝。

|- app.json # 記錄項目的一些靜態(tài)配置
|- app.js # 對整個小程序進(jìn)行初始化
|- pages
   |- home
      |- home.wxml
      |- home.js

app.js 中只有App({});代碼搭独,表示新建一個小程序?qū)嵗?br> home.js 中只有Page({});代碼互躬,表示用于初始化一個頁面實例。
home.wxml文件,WXML 是微信頁面的標(biāo)簽語言,類似于HTML 語言,用于描述小程序的頁面晨雳。代碼為

<view>
  <text>hello world</text>
</view>

app.json 表示項目的配置文件洋魂,對所以頁面都有效豁翎。

{
  "pages": [
    "pages/home/home"
  ]
}

app.wxss 用于描述 WXML 的組件樣式,類似CSS樣式表熙卡。
sitemap.json 文件用于配置小程序及其頁面是否允許被微信索引 表窘。
再復(fù)雜一些昭娩,就是在home.js中加入javascript代碼,做出動態(tài)效果莱褒。更多的腳本編程參考https://www.ruanyifeng.com/blog/2020/10/wechat-miniprogram-tutorial-part-three.html
如點擊按鈕獲取個人信息蹦浦。
home.wxml

<view>
  <text class="title">hello {{name}}</text>
  <button open-type="getUserInfo" bind:getuserinfo="buttonHandler">
    授權(quán)獲取用戶個人信息
  </button>
</view>

open-type="getUserInfo" 指定按鈕用于獲取用戶信息顽照。再通過點擊按鈕觸發(fā)buttonHandler事件涎永。對應(yīng)home.js的事件為:

Page({
  data: { name: '' },
  buttonHandler(event) {
    if (!event.detail.userInfo) return;
    this.setData({
      name: event.detail.userInfo.nickName
    });
  }
});
image.png

假如開發(fā)好了一個微信小程序,就可以點擊上傳到小程序開發(fā)管理叉跛。

image.png

如果沒有上傳按鈕莫换,檢查一下是否使用的是測試號撕瞧。
如果上傳顯示代碼包超過大小限制研儒,就需要分包遍膜。
小程序上傳后會在微信公眾平臺上信柿,再點擊提交審核霞幅,審核通過后即可上線。

image.png

登錄流程

先貼上微信登錄的流程圖

image.png

參考 http://www.reibang.com/p/4e4db943bfb3 文章韩容,服務(wù)端運行springboot的后端項目毅弧。
在微信小程序端開發(fā)微信登錄頁面蛾坯。
結(jié)合微信登錄的流程圖和源代碼分析登錄流程呈驶。

  1. 小程序首先wx.login() 調(diào)用小程序接口獲取登錄憑證code
image.png
  1. 在java服務(wù)端配置好appid志鞍、appsecret墩邀,和小程序返回的code再向https://api.weixin.qq.com/sns/jscode2session接口地址發(fā)送請求孔飒,返回session_key缀棍、openid 給 java 服務(wù)端狱窘。
session_key 即會話秘鑰馁菜,作為數(shù)據(jù)的加解密和簽名的校驗。
openid 即用戶標(biāo)識泉坐。
image.png
image.png
  1. wx.getUserInfo獲取用戶信息,返回 userInfo 用戶信息對象,包括昵稱馒疹、頭像漓雅、性別等赵讯、rawData 原始數(shù)據(jù)、signature 校驗用戶簽名间雀、encryptedData 包含敏感信息在內(nèi)的完整數(shù)據(jù)夏伊、iv 加密初始向量。
    一并提交給java服務(wù)端。
image.png

服務(wù)端接收到參數(shù)后,首先會校驗一下簽名是否一致羽圃。
即signature 值。由sha1(rawData + sessionkey) 加密而來宋梧。

image.png
  1. 根據(jù)session_key和openid等生成自定義的第三方session创夜,發(fā)送給客戶端用來建立會話杭跪。

  2. 建立會話后,將返回的原始信息rawData存入mysql數(shù)據(jù)庫中。如果是新的用戶就重新設(shè)置會話涧尿。在以后的用戶登錄中只需要去數(shù)據(jù)庫查找是否有合法的session_key系奉、openid值。

image.png
image.png
  1. 剩下的encryptedData 包含敏感信息在內(nèi)的完整數(shù)據(jù)姑廉。
    即 encrypteData比rowData多了appid和openid
{"openId":"oJLX05Y5chjZBE1ChkES41H7Wmw","nickName":"CSeroad","gender":1,"language":"zh_CN","city":"jinan","province":"dong","country":"China","avatarUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/ibScdziaQmbVKREzRSYOuxDl52x84frQMt9qtficVChpmB7jIGmUxkvOz47IgBPHTdmXdb5LTewxmt8ZpEY4ibqmvw/12","watermark":{"timestamp":1629442063,"appid":"wxc0f5b64c26ff5d"}}
image.png

如:獲取手機號也會加密在encryptedData里面缺亮。

反編譯流程

以安卓模擬器為例,使用RE文件管理器桥言,在路徑下/data/data/com.tencent.mm/MicroMsg/xxxxxxx(不同微信文件夾也不同)/appbrand/pkg/找到小程序包萌踱。
注意windows上的小程序都做了加密混淆,無法解包

image.png

利用adb工具号阿,將小程序包拉取到本地上并鸵。
首先在MAC終端上安裝adb,命令如下

1扔涧、安裝brew
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
2园担、安裝android tools
brew install android-platform-tools
3、運行adb
adb devices # 列出當(dāng)前Android設(shè)備
adb shell # 進(jìn)入終端
adb push <local> <remote> # 從本地復(fù)制文件到設(shè)備
adb pull <remote> <local> # 從設(shè)備復(fù)制文件到本地
image.png

將小程序拉取到本地枯夜。

adb pull /data/data/com.tencent.mm/MicroMsg/a9c2c1453c1f99e1b5ff0185c3640139/appbrand/pkg/_860149573_130.wxapkg
image.png

下面就可以使用wxappUnpacker進(jìn)行反編譯了弯汰。需要提前安裝node.js及其他組件,參考https://blog.csdn.net/weixin_47168538/article/details/107843795 進(jìn)行安裝卤档。
安裝后直接使用"node wuWxapkg.js 小程序包名"命令蝙泼,即可一鍵解包。

image.png

推薦 https://github.com/xuedingmiaojun/wxappUnpacker 項目劝枣,支持解包子包汤踏。
解包完成后,使用微信開發(fā)者工具導(dǎo)入項目即可舔腾。

image.png

app.json文件中溪胶,pages以內(nèi)的都是主包,subPackages以內(nèi)的為分包稳诚,每一個root都是一個分包哗脖。

AES 加密實例

如在一次反編譯獲取小程序源碼,查找到AES加密方法

image.png

iv偏移量是固定的扳还,秘鑰key由sessionKeyFromStore和sessionId運算而來才避。
抓取數(shù)據(jù)包獲取到的sessionKey結(jié)合該數(shù)據(jù)包的sessionId可運算出AES加密的手機號。

image.png
image.png

總結(jié)

學(xué)習(xí)了微信小程序的基礎(chǔ)開發(fā)氨距、會話建立過程桑逝、簡單反編譯查看源代碼。
想把微信小程序開發(fā)設(shè)計到的安全點都學(xué)習(xí)到確實很難俏让,但應(yīng)對日常測試應(yīng)該足夠了楞遏。

參考資料

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
https://www.hackinn.com/index.php/archives/672/
http://xuedingmiao.com/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茬暇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寡喝,更是在濱河造成了極大的恐慌糙俗,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件预鬓,死亡現(xiàn)場離奇詭異巧骚,居然都是意外死亡,警方通過查閱死者的電腦和手機珊皿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門网缝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蟋定,你說我怎么就攤上這事粉臊。” “怎么了驶兜?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵扼仲,是天一觀的道長。 經(jīng)常有香客問我抄淑,道長屠凶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任肆资,我火速辦了婚禮矗愧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郑原。我一直安慰自己唉韭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布犯犁。 她就那樣靜靜地躺著属愤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酸役。 梳的紋絲不亂的頭發(fā)上住诸,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音涣澡,去河邊找鬼贱呐。 笑死,一個胖子當(dāng)著我的面吹牛入桂,可吹牛的內(nèi)容都是我干的吼句。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼事格,長吁一口氣:“原來是場噩夢啊……” “哼惕艳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驹愚,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤远搪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后逢捺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谁鳍,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年劫瞳,在試婚紗的時候發(fā)現(xiàn)自己被綠了倘潜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡志于,死狀恐怖涮因,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伺绽,我是刑警寧澤养泡,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站奈应,受9級特大地震影響澜掩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杖挣,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一肩榕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惩妇,春花似錦株汉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挺份,卻和暖如春褒翰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匀泊。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工优训, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人各聘。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓揣非,卻偏偏與公主長得像,于是被迫代替她去往敵國和親躲因。 傳聞我的和親對象是個殘疾皇子早敬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容