吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.mlqcje.live

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 23813|回復: 249
上一主題 下一主題

[原創] ××電影小程序check算法分析

    [復制鏈接]
跳轉到指定樓層
樓主
xiaobiao 發表于 2019-5-27 15:18 回帖獎勵
前前言
首先是先說明一下,本篇文章是基于的 @案首夢 [微信消滅病毒sign算法分析] 前提作為基礎思路進行的搞事情,由于相關原理文字解釋 @案首夢 寫的較好,所以部分文段會直接摘抄,但走的思路完全是獨立弄出,本文僅提供破解思路。


前言

最近得到了幾張某達實體票,去看婦聯的時候居然要使用四張兌換券才能換兩張電影票!不得不感嘆漫威粉們的狂熱!

好了,扯遠了~當時實體票是去到電影院兌換的座位,看了票背面其實是支持在線兌換座位,票上有兩個大二維碼,分別是下載APP和關注公眾號,于是下載APP準備兌換剩下的券,然后進入錢包兌換券,當看到券碼上的純數字的卡號和密碼,心中一記,看看能不能走撞褲,服務器掛個腳本自動去撞,免費的電影票唾手可得啊~理想很美好,那么就來試試


試錯二十幾次后都提示兌換碼不存在,感覺沒有風控,于是就想搞一搞事情。


一、初步抓包

測試手機為小米9,抓包軟件各種各樣,本機APP可以優先選擇Packet Capture和HttpCanary,兩種軟件傻瓜式操作,如果要抓https都需要裝個CA證書,推薦使用HttpCanary可擴展性高且樣式較多


在 HttpCanary 選指定APP



再打開APP開始抓包,可以看到我們抓到兩個包


首先是第一個請求


然后是第二個請求

大概可以猜測主請求為第二個,首先訪問形式是get,參數都是放在header上面,由于水表問題打了一些碼,可知主要參數為MX-API,格式如下(敏感數據以***顯示):

{"ver":"6.5.1","cCode":"1_2","sCode":"Wanda","appId":2,"_mi_":"***","width":1280,"json":true,"check":"***","Accept-Encoding":"gzip, deflate","ts":1550668891000,"heigth":720}

其中_mi_為固定長度字符串,猜測是身份id,check為加密串,ts為13位的unix時間戳,測試在同個碼的情況下,ts和check碼為動態變動,可知check是包含ts值的32位小寫MD5,當然,由于動態,也意味著...



常規md5庫根本無從解答!


二、再接再厲


本快要放棄了,突然想到他的第二個二維碼,微信公眾號,用小程序?想起前幾天看到其他小程序算法分析的文章,立馬動手起來


測試的確是小程序沒錯,且界面都差不多,返回也一樣,但是,HttpCanary抓包后顯示ssl hand shake error異常,看來小程序https抓包是不行


通過404(谷歌)查詢是知道從Android Nougat(7.0)開始,谷歌改變了網絡安全策略。自簽的CA證書將默認不被TLS/SSL連接信任,限制于一些策略,但是也有辦法繞過,通過HttpCanary的開源github網址https://github.com/MegatronKing/HttpCanary可查詢到好幾種方式,這邊是用下圖方法后可以正常抓包


但是,凡事講究效率,小試之后我們直接祭出神器Burp Suite,需要電腦且需要提前配置,初步配置這里不再多說可以自行404,如果繼續用HttpCanary也是可以完成下面抓包的

再次抓包,我們可以得到MX-API參數有所不同,但是check依舊存在,格式如下(敏感數據以***顯示):

{"ver":"6.4.0","sCode":"Wanda","_mi_":"***","width":1280,"json":true,"cCode":"XIAOCHENGXUGP","check":"***","ts":1550668891000,"heigth":720,"appId":3}


三、微信小程序源碼獲取

獲取辦法:在已經ROOT的手機上使用RE文件管理器查看微信源碼目錄,并復制導出到電腦中。

微信小程序源文件保存在/data/data/com.tencent.mm/MicroMsg/.../appbrand/pkg/這個目錄下,中間的“...”是一串32位的16進制字符串名文件夾。

如果有很多不確定是哪個的情況下,我的解決辦法是刪掉所有這樣的目錄,在微信中刪掉小程序重新添加,就可以看到新創建的目錄。找到指定目錄并拷貝至電腦上,我們就獲得了微信小程序的源代碼,在我的手機上有兩個wxapkg文件,不清楚是哪個,先都拷貝出來。


下一步是反編譯源文件,用大佬寫的 wxappUnpacker,Github地址:https://github.com/qwerty472123/wxappUnpacker

我們首先安裝nodejs環境:https://nodejs.org/en/

運行 進入剛下載的wxappUnpacker文件夾內,安裝一下依賴:

npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify
npm install escodegen

最后使用這個命令進行反編譯源文件:node wuWxapkg.js [-d] <files...> //files 就是你想要反編譯的文件名

例如:我有一個需要反編譯的文件 _12345678_123.wxapkg 已經解壓到了D盤根目錄下,那么就輸出命令
node .\wuWxapkg.js D:\_12345678_123.wxapkg


這樣我們就得到了某達小程序源碼,對于微信小程序這種,我們可以簡單理解為HTML+CSS+JS,只不過JS是微信JS而已。

所以在這個場景下,我們的思路就是找到小程序源碼,看看JS里面有沒有什么能利用的東西,對網絡傳輸進行抓包,試試有沒有漏洞。


關于這個游戲論壇上和網絡其他位置已經有很多工具和教程了,本篇文章不會留工具,純技術討論,想要工具的可以直接關掉本文去404搜索其他文章了,本篇文章是純技術流程!


四、校驗算法回顧

為了保證數據在通信時的安全性,可以采用參數簽名的方式來進行相關驗證。這種方式的基本原理就是將傳遞的數據加一些參數做MD5,并跟隨數據包一起進行傳遞,在服務器端進行再次驗證,將計算得到的MD5與收到的MD5進行比對,如果不同,則說明數據包被篡改過。

這個過程就是為了防止數據包在傳遞過程中遭到篡改的一種校驗算法。

sign簽名的方式能夠在一定程度上防止信息被篡改和偽造,但是對于微信小程序來說,邏輯都寫在 JS 中,而 JS 源碼是能夠逆出來的,我們能夠通過查看源代碼得知程序邏輯,再更改數據包之后,我們自行組織邏輯,算出MD5,一同發送至服務器,就可以繞過校驗。


我們目前面對的就是一個典型的web應用中前端sign邏輯校驗情況,只不過這里不叫sign,叫做check,是存在安全問題的。


五、分析小程序源碼


首先我們先找check字符串,在四個文件都有,其中app-service.js最大,估計是程序主體,那么從這個開始


可能是為了壓縮體積,部分代碼直接連成一坨了,可以在http://www.bejson.com/重新格式化編碼


經過初步查找找到我們的熟悉的代碼塊,但是app-service.js發現好幾處這個代碼塊,同時vendor.js、MxApiHelper.js都有類似代碼塊


由于不懂JS,努力看了很久還是放棄了,app-service.js通過格式化校驗已經近4w行,還沒算這個js含有多個相同的代碼塊和其他js中相同的代碼塊,所以,我們決定彎道超車,通過微信開發小程序直接進行代碼調試



六、彎道超車


安裝最新版本微信web開發者工具,導入項目,AppID選擇測試號即可


編譯提示報錯,404得知這種情況去app.json把顯示報錯的全部去掉就行


需要注意小程序走的是https,需要勾選不校驗https,不然小程序跑不下去


倒騰一會,小程序終于活了,雖然與正常界面差別很多,不過畢竟是逆向,部分資源可能不完整,所以也沒糾結,能找到check就行



由于沒有加載圖片資源,顯示為純js,排版有些怪異,隨意點擊一個圖片驗證碼,就發現我們心心念的check了(連請求個圖片都要check也是沒誰了)

然后我們修改可能是參數的代碼塊,比如width或者heigth參數,改成1、2、3這樣排序,一是看這些參數是否影響check,二是看check到底在哪個代碼塊

最后我們可以確定剛才圖片請求check來自MxApiHelper.js,打開區區100行(雖然還是看不懂),但是祭出開發工具最大殺器--斷點調試,由于不知道哪里斷點,就直接把100行代碼全部斷點了


可以看到點擊獲取圖片后斷點確實跳到這里,微信web開發工具調試最大的好處是你可以實時知道調試時各個參數的變量




多步調試后,我們就可以看到即將要MD5的完整變量i參數(敏感數據以***顯示):
WandaXIAOCHENGXUGP4906B2***1550668891000/user/apply_verify_img_code.apiphone=0&json=true

拆開來,可以看到是【sCode+cCode+4906B2***+ts+請求api接口+未知參數】,暫不確定_mi_是否參加check計算


但是通過校驗可加密出check參數,同時與調試產生的check相同,可知_mi_不在check的計算中


其中4906B2***一直不知道哪里產生的,直到后幾次調試看到這個,才知道這是key

那么此時可以知道MD5前參數格式為【sCode+cCode+key+ts+請求api接口+未知參數】

之所以成為未知參數,是因為沒有特定規律,比如獲取一個驗證碼,后面的參數如下
/user/third_mobile_code.apithirdType=5&openId=undefined&mobile=0&json=true

苦于不會js(其實是代碼太多不想看),尋求于404和各大論壇,但回想我們剛說過的算法回顧,這種方式的基本原理就是將傳遞的數據加一些參數做MD5,并跟隨數據包一起進行傳遞,在服務器端進行再次驗證,將計算得到的MD5與收到的MD5進行比對,所以,這些參數肯定請求url中!


通過各種嘗試最后可以確定check格式為【sCode+cCode+key+ts+請求末尾完整url】

七、最后挑戰
既然破解出通用check,一個成功的兌換除了票券編碼,還有個密碼,密碼6位純數字,最大也就是100w可能,沒有風控接口可靠(連驗證碼都走check接口肯定冇問題的)多線程跑起一天不到的事。

我們用一個可以用的票券編碼進入輸入密碼界面,進行抓包,得到如下請求(去除非必須header,敏感數據以***顯示)::


GET /card/bind.api?card_no=***&password=***&json=true HTTP/1.1
{"ver":"6.4.0","sCode":"Wanda","_mi_":"***","width":1280,"json":true,"cCode":"XIAOCHENGXUGP","check":"***","ts":1550668891000,"heigth":720,"appId":3}

但是我們這次發現,get請求的card_no和password也有加密,而且card_no是64位,password是32位,再將密碼也填成和卡號一致,發現兩個都是相同的64位加密,明顯不是MD5的算法了



這就。。。比較尷尬了 ,由于微信開發工具拿到不太完整的源碼,調試的小程序不能正常登錄,所以也不能進入到測試密碼界面來debug

怎么辦,咱們可以先找下怎么得到這兩個值在哪些文件有。


通過搜索我們可以知道在app-service.js和index.js兩個地方都有這兩個字段,

然后我們再回想下剛才抓包每個api后面接的參數都是不一樣,也就是我們一開始說的【未知參數】,但其實我們在app-service.js還是可以看出端倪



比如api后面的code=xxxx,其實在app-service.js還是能找到的




在api后面的couponNo=xxxx,也可以找到

同理,我們也可以猜出,肯定有一段大概是這個樣子的代碼
var a = {
card_no: b
password: c
};


找來找去,也就只有在index.js里面找出大概的字段,從代碼可以知道是AES加密(不要問怎么知道的,上面寫著AES)


網上隨意找了一個在線AES加密,下拉什么的可以看代碼看出,加密模式是ECB,填充為pkcs7padding,數據塊未知,偏移量未知,因為輸出為純小寫字母和數字,沒有base64標準的【==】標志,所以是hex,字符集未知


等等,有個密碼???是的,AES加密其實是需要密碼,類似與加鹽后的MD5

最后實在沒轍,在線請教大神,大神丟過來card_no上面兩行的一串字
n = t.default.clientKey.substr(0, 16);


也就是這行,大神解釋說密碼是n,n是這個變量的0-16位,clientKey?好像有點眼熟?


沒錯了,就是這個key前面的0-16位(key的二次復用)

這時我們把密碼填成123456,抓包得到請求的password值就變為d48a93104ebcb43196ec847f60ef2cb2,由于數據塊和字符集那些未知,都撞一下


結果居然成了!


現在最后的問題是,怎么將這塊加密轉變為自己熟悉的語言


心細的同學可能發現有個o一直存在,和我們原來調試MxApiHelper.js有點異曲同工之處


當輸出加密前check的i值時,調用r,其實r就是調用了md5這個文件,也就是普通的MD5,只是js這里沒有自帶需要調用


同理,AES中的o也是如此,調用了aes/aes.js

自己平時用shell比較多,但是也不清楚AES和shell怎么轉換,網上也沒有現成的例子,那咱們就調用吧,把aes.js上傳到咱們的Linux服務器,在服務器yum安裝一個node,再寫個js調用,把o和n重新定義下變量,在404找個傳參的例子貼進來就可以直接用了。


調用就能使用了


完成\~撒花\~收工\~


最后通過生成的card_no和password再生成check,也能夠正常校驗,到這里就結束了,歡迎大家討論。


最后的最后

最后的最后,我知道大家想問什么,其實都不說了,看圖


那么就...


其實當時試錯和風控的距離,大概就是這樣的情況




總結:破解的過程還是挺有趣的,尤其一些中間想到彎道超車的想法,當然本身不懂js的確是硬傷,也感謝大神強鍋的指點和幫助,雖然免費電影票不行了,但是復聯4咱們還是可以再多刷幾次。



PS:Discuz!的圖片處理真心不好搞~~~


============================================華麗的文章結束線======================================================

點評

加精警告!前排占位!話說小程序說白了就是h5。。。相當于扒了衣服給你看。。。用微信小程序開發工具來調試,學到了。。  發表于 2019-5-27 20:59

免費評分

參與人數 108吾愛幣 +109 熱心值 +93 收起 理由
好冷哦2014 + 1 [email protected]
htuo + 1 + 1 熱心回復!
旅途永無止境 + 1 我很贊同!
liuhiulin + 1 很詳細不錯
woqi980302 + 1 + 1 用心討論,共獲提升!
baifaxiaolaotou + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
Miracles_65 + 1 [email protected]
獨影霞蹤kl + 1 [email protected]!雖然看不懂。。
15735952338 + 1 + 1 用心討論,共獲提升!
andreleeeee + 1 + 1 [email protected]
zzzkc + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
tanhaigg + 1 + 1 我很贊同!
tianhe2019 + 1 我很贊同!
1998520hlx + 1 雖然一臉懵,但是感覺還是很厲害
syxxfx + 1 + 1 我很贊同!
hyb8521 + 1 + 1 我很贊同!
qscleo + 1 [email protected]
mysticz + 1 用心討論,共獲提升!
難為阿! + 1 + 1 我很贊同!
mjgzdnw + 1 + 1 熱心回復!
biong + 1 + 1 學到了學到了 最近在做小程序開發 趕緊逆向搞一波
、HonG‘’ + 1 + 1 熱心回復!
純粹520 + 1 我很贊同!
MIC生命互聯網 + 1 + 1 已經處理,感謝您對吾愛破解論壇的支持!
清霧迷晨 + 1 熱心回復!
co3site + 1 + 1 [email protected]
小調丶 + 1 + 1 [email protected]
hxw0204 + 1 + 1 [email protected]
China·kl + 1 + 1 熱心回復!
海水很咸 + 1 + 1 我很贊同!
傘兵 + 1 用心討論,共獲提升!
yixi + 1 + 1 [email protected]
bingleiwl + 1 + 1 我很贊同!
bricher9988 + 1 + 1 已經處理,感謝您對吾愛破解論壇的支持!
nofailyoung + 1 + 1 666 還是有干貨的
xxaa + 1 + 1 我很贊同!
misakira + 1 我很贊同!
愛破解的阿卡麗 + 1 + 1 大佬厲害,小白菜學到了,雖然看不懂
帥氣的小蓮 + 1 + 1 用心討論,共獲提升!
逐風之雷霆之怒 + 1 + 1 看完了, 真厲害,佩服佩服。。
zeng0918 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
呆到深處自然萌 + 1 + 1 優秀兩個字奉上
我們的回憶丶 + 1 + 1 [email protected]
wwr2128 + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
Emil + 3 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
dwock + 1 + 1 我很贊同!
一點丶心動 + 1 + 1 [email protected]
南柯. + 1 鼓勵轉貼優秀軟件安全工具和文檔!
poisonbcat + 1 + 1 [email protected]
crp123 + 1 + 1 我很贊同!
隨風丶而逝 + 1 + 1 [email protected]
renpeng009 + 1 + 1 66666666666666666
demo886 + 1 用心討論,共獲提升!
klidopic + 1 + 1 我很贊同!
JaobsenYc + 1 + 1 用心討論,共獲提升!
minglei526 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
yanguichao + 1 + 1 不明覺厲
叫我吳彥祖 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
快意恩仇 + 1 + 1 熱心回復!
pinkly + 1 熱心回復!
繁微 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
UnderTaker丶s1o + 1 + 1 用心討論,共獲提升!
tzxinqing + 2 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
LI2049 + 1 [email protected]
sushangyu + 1 + 1 [email protected]
dadao815 + 1 + 1 用心討論,共獲提升!
s1158627362 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
無痕軟件 + 3 + 1 [email protected]
wlxiaozhzh + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
毛新航 + 1 我很贊同!
雪萊鳥 + 2 + 1 哈哈哈哈哈哈哈哈哈哈哈哈哈哈~~~
simon21 + 1 + 1 我很贊同!
椎名牧 + 1 + 1 666,學到了
tomcath + 1 + 1 用心討論,共獲提升!
小鬼cece + 1 + 1 熱心回復!
songdaiqiang + 1 + 1 我很贊同!
agan123 + 1 + 1 字數多,牛逼~~
2018666666 + 1 + 1 [email protected]
Thefirst1 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
iorilw + 1 + 1 我很贊同!
shaoshuai110 + 1 優秀
CrazyNut + 3 + 1 膜拜大佬
金詠森 + 1 + 1 我很贊同!
q342520 + 1 + 1 我很贊同!
MartinLee + 1 + 1 能拿到小程序源碼是真的好。。。啊
kong1383068 + 1 用心討論,共獲提升!
那一年的白潔啊 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
案首夢 + 1 + 1 給個評分!很棒!
anysuy + 1 熱心回復!
丶咖啡貓丶 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
zhangweiy + 1 + 1 用心討論,共獲提升!
jskhuizi521 + 1 用心討論,共獲提升!
Light紫星 + 1 + 1 我很贊同!
huang2010 + 1 + 1 用心討論,共獲提升!
kingering + 1 熱心回復!
濤之雨 + 3 + 1 用心討論,共獲提升!
frankyxu + 1 + 1 優秀
笙若 + 2 + 1 [email protected]
asaSKTY + 1 + 1 [email protected]
陳世界 + 1 熱心回復!

查看全部評分

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
 樓主| xiaobiao 發表于 2019-6-28 12:28 <
svnr 發表于 2019-6-26 11:39
什么是大佬,這就是大佬,教程詳細,有理有據,還學到了技巧,微信開發者工具調試,厲害厲害

加油學習,爭取你也可以發文章
推薦
 樓主| xiaobiao 發表于 2019-5-27 21:51 <
推薦
天使3號 發表于 2019-5-28 09:55
5#
 樓主| xiaobiao 發表于 2019-5-27 15:28 <
圖片有些異常,重新處理中

點評

圖片盜鏈了,直接上傳本地貼到文中吧。  詳情 回復 發表于 2019-5-27 16:05
6#
超正義的小煌 發表于 2019-5-27 15:31
樓主圖片可以上傳到本地呀
7#
wclself 發表于 2019-5-27 15:37
牛逼牛逼
8#
Adolpho 發表于 2019-5-27 15:46
感謝分享~~~~
9#
 樓主| xiaobiao 發表于 2019-5-27 16:00 <
10#
Moriartya 發表于 2019-5-27 16:02
全程看不到圖片,不過還是看完一遍了
11#
 樓主| xiaobiao 發表于 2019-5-27 16:05 <
Moriartya 發表于 2019-5-27 16:02
全程看不到圖片,不過還是看完一遍了

現在刷新能看到了吧
12#
Hmily 發表于 2019-5-27 16:05
xiaobiao 發表于 2019-5-27 15:28
圖片有些異常,重新處理中

圖片盜鏈了,直接上傳本地貼到文中吧。
13#
 樓主| xiaobiao 發表于 2019-5-27 16:25 <
Hmily 發表于 2019-5-27 16:05
圖片盜鏈了,直接上傳本地貼到文中吧。

貌似更新后還是有點問題,本地顯示正常,其他瀏覽器無痕訪問時還是舊的顯示不出來
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:禁止回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2019-10-1 10:47

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
内蒙古11选5开奖查询百度