【原創(chuàng)】某音設(shè)備注冊(cè)加密so文件破解

筆者最近在學(xué)習(xí)使用ida動(dòng)態(tài)破解so文件,剛好想找個(gè)項(xiàng)目來練練手立砸,在破解某音的時(shí)候网沾,發(fā)現(xiàn)某音用了2個(gè)so文件對(duì)其發(fā)送請(qǐng)求的數(shù)據(jù)進(jìn)行加密,所以筆者就從這兩個(gè)開始下手,并且筆者選擇了一個(gè)比較簡單的ttEncrypt.so文件進(jìn)行解密


前面對(duì)某音的源碼進(jìn)行分析著蛙,就能發(fā)現(xiàn)它加密的地方在ttEncrypt.so删铃,筆者在這里就不在重復(fù)了,如果看到此文章的朋友想破解的話踏堡,建議先從源碼開始看起猎唁,然后慢慢找到這個(gè)文件加載的地方,然后再進(jìn)行破解顷蟆,不能直接就開始破解so喔诫隅。好了廢話了這么多,我直接開始吧帐偎!

一逐纬、動(dòng)態(tài)調(diào)試環(huán)境

使用終端打開,連接真機(jī)O鞣;砩(之前筆者在使用模擬器破解的時(shí)候,發(fā)現(xiàn)是失敗的漫贞!我也不知道為什么甸箱,沒有查,如果知道的朋友可以留言討論一下)

AppledeMacBook-Pro:~ space$ adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
6d16cfb7d440  device
AppledeMacBook-Pro:~ space$ adb shell
santoni:/ $ su
santoni:/ # getenforce
getenforce
Permissive
santoni:/ # setenforce 0
setenforce 0
santoni:/ # cd /data/local/tmp
cd /data/local/tmp
santoni:/data/local/tmp # ./android_server
IDA Android 32-bit remote debug server(ST) v1.22\. Hex-Rays (c) 2004-2017
Listening on 0.0.0.0:23946...

緊接著要進(jìn)行端口轉(zhuǎn)發(fā)

AppledeMacBook-Pro:~ space$ adb forward tcp:23946 tcp:23946

最后打開ida绕辖,筆者這里是32位的

![![模塊.png](https://upload-images.jianshu.io/upload_images/11633123-3c8067b324566123.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](https://upload-images.jianshu.io/upload_images/11633123-b87ebf829105c6a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

注意:如果使用模擬器的話pc指針會(huì)直接掉到最下面

二摇肌、開始動(dòng)態(tài)調(diào)試

首先你需要自己構(gòu)造一個(gè)apk擂红,里面調(diào)用你需要破解的so文件仪际,當(dāng)然,你要會(huì)hook昵骤,把調(diào)用的輸入?yún)?shù)獲取和結(jié)果獲取树碱,你就知道輸入了什么和得到什么。還有就是你需要知道輸入是什么才能對(duì)加密進(jìn)行破解是吧变秦!

這個(gè)so文件調(diào)用了一個(gè)native方法是叫handleData(bytes [] bytes, int len );傳進(jìn)去一個(gè)字節(jié)數(shù)據(jù)和一個(gè)長度成榜,好好分析一下吧!

首先你需要做的是找到你要調(diào)試的那個(gè)so文件蹦玫,這里筆者是自己構(gòu)造的赎婚,所以搜索ttEncrypt就能找到自己添加的內(nèi)容了。

[圖片上傳中...(ttEncrypt.png-ea0603-1537953335293-0)]

搜索結(jié)果:

ttEncrypt.png
ttEncryptFunction.png

結(jié)果是這樣的樱溉,很清晰的看到他加載了什么內(nèi)容挣输,這里有好幾個(gè),作者在看靜態(tài)匯編代碼的時(shí)候發(fā)現(xiàn)函數(shù)在handleData的地方調(diào)用了ss_encrypt和ss_encrypted_size所以筆者決定在handleData里面打斷點(diǎn)

[圖片上傳中...(handleDataARM.png-63994e-1537953407572-0)]

雙擊handleData福贞,就可以看到這個(gè)結(jié)構(gòu)圖撩嚼,按空格就能轉(zhuǎn)成arm匯編代碼

handleDataARM.png

然后就可以在這里打一個(gè)斷點(diǎn),準(zhǔn)備進(jìn)行調(diào)試

breakpoint.png
begin.png

打好斷點(diǎn)之后就可以開始跑了

IMG_0828.JPG

這是我自己做的apk,調(diào)用了ttEncrypt.so內(nèi)部的方法完丽,我看這個(gè)應(yīng)該沒有簽名檢驗(yàn)恋技,所以直接就能調(diào)用了,據(jù)我所知逻族,某音的另一個(gè)加密文件cms.so的簽名檢驗(yàn)巨多蜻底,所以過兩天我都打算開始破解那個(gè)文件了!廢話不多說瓷耙,

直接按F8進(jìn)行調(diào)試朱躺,注意!F7是單步調(diào)試

r3.png

看到了么搁痛,這個(gè)R3你覺得像什么长搀,這個(gè)應(yīng)該就是長度,還記得么鸡典,這個(gè)native函數(shù)傳入字節(jié)數(shù)組和數(shù)組的長度是吧源请!我們接著往下走,因?yàn)楣P者的macos打開ida調(diào)試的時(shí)候容易奔潰彻况,所以就不截那么多圖谁尸,有關(guān)鍵的地方才截圖吧!

繼續(xù)往下走纽甘,發(fā)現(xiàn)調(diào)用了initKey良蛮,暫時(shí)不知道有什么用,先看寄存器

initKey.png

這里可以F7跳進(jìn)去看悍赢,但是筆者之前已經(jīng)進(jìn)去看過了决瞳,發(fā)現(xiàn)只是初始化一些字節(jié),而且在ida靜態(tài)代碼可以查看左权,大家可以去自己看一下

initkeyFunc.png

接著這個(gè)順序繼續(xù)往下走皮胡,發(fā)現(xiàn)調(diào)用了這個(gè)ss_encrypted_size大家覺得會(huì)有什么用呢?

ss_encrypt_size.png

當(dāng)筆者看到這個(gè)R0的值的時(shí)候赏迟,你會(huì)發(fā)現(xiàn)屡贺!這不就是輸出結(jié)果的長度嗎?锌杀?甩栈?所以計(jì)算返回長度的算法就在這里,這里筆者就不再進(jìn)去看了糕再,具體算法大家可以自行去查看量没,因?yàn)檫@里涉及某公司的利益,筆者就不放出來了亿鲜。

size_20.png

繼續(xù)按下面往下走允蜈,看見了到了調(diào)用了ss_encrypt這個(gè)函數(shù)冤吨,筆者點(diǎn)擊F7進(jìn)入了這個(gè)函數(shù)內(nèi)部,因?yàn)槿绻苯油伦叩皆捜奶祝銜?huì)發(fā)現(xiàn)很快就跳出handleData的函數(shù)了漩蟆,所以筆者認(rèn)為加密的地方就在里面,所以跳進(jìn)去看了一下

ss_encrypt.png

這里就是ss_encrypt的實(shí)現(xiàn)妓蛮,看到PUSH.W {R4-R9怠李,LR}那么R0-R3干什么去了呢?大家看上面的圖蛤克,是不是前面幾句給R0-R3進(jìn)行了賦值捺癞?這時(shí)候大家可以去看看寄存器里面的內(nèi)容,下面就帶大家看一下吧构挤!

f7ss_encrypt.png

點(diǎn)擊查看R0的內(nèi)容髓介,看到了么?這個(gè)不就是我們的輸入嗎筋现?R0指著第一個(gè)地址下面連續(xù)的都是我們的字節(jié)唐础,R1大家覺得存的是什么?存的是9矾飞,正正是它的長度一膨,然后R3呢?R3存的是0x14洒沦,是16進(jìn)制豹绪,翻譯成10進(jìn)制就是20,這不就是返回的長度么申眼?這就明擺著是加密的地方啊

ss_encryptRo.png

尾部

到這里了瞒津,大家可以自己繼續(xù)往下走下去看它的邏輯了,筆者就不帶著大家繼續(xù)看了豺型!因?yàn)楣P者的蘋果使用ida的時(shí)候仲智,瘋狂奔潰买乃,所以做著難受姻氨,這里就不再帶大家走下去了,下面我在簡單說一下它實(shí)現(xiàn)的邏輯吧剪验!

首先大家記得之前我們有一串key嗎肴焊?走下去發(fā)現(xiàn)這個(gè)key應(yīng)該是個(gè)混淆代碼,如果你傳入的字節(jié)流長度不是16的倍數(shù)功戚,這個(gè)算法會(huì)自動(dòng)幫你補(bǔ)全16位娶眷,當(dāng)然補(bǔ)全用的是它的密鑰數(shù)組,存在程序的某個(gè)地方因?yàn)樯婕澳彻镜睦嫘ネ危髡呔筒环懦鰜砹私斐瑁蠹易孕袑ふ野?/em> 使用你每個(gè)字符作為偏移量在密鑰數(shù)組里面取值烁落,取值之后程序就會(huì)對(duì)你這個(gè)字節(jié)流再做一次操作,按照你的長度來進(jìn)行循環(huán)操作豌注,每16位進(jìn)行一次操作伤塌,首先取字節(jié)流的最高4位進(jìn)行右移32位然后和給定的密鑰(自行查找)進(jìn)行異或操作的到一個(gè)新的32位二進(jìn)制再轉(zhuǎn)成16進(jìn)制填入,然后取5-8位進(jìn)行24位的右移再與一個(gè)密鑰(自行查找) 進(jìn)行異或操作的到新的32位二進(jìn)制再轉(zhuǎn)成16進(jìn)制填入轧铁,然后取9-12位進(jìn)行16位的右移再與一個(gè)密鑰(自行查找) 進(jìn)行異或操作的到新的32位二進(jìn)制再轉(zhuǎn)成16進(jìn)制填入每聪,然后取13-16位進(jìn)行8位的右移再與一個(gè)密鑰(自行查找) 進(jìn)行異或操作的到新的32位二進(jìn)制再轉(zhuǎn)成16進(jìn)制填入。并且循環(huán)齿风,最后的到結(jié)果就是正確的結(jié)果了药薯。

最后再說一下,筆者在這里已經(jīng)完成了這個(gè)ttEncrypt.so的解密救斑,不得不過這個(gè)小小的加密流程居然這么復(fù)雜童本,如果不耐心進(jìn)行分析,還真不好的到脸候,筆者在這里學(xué)到了挺多東西的巾陕!希望有興趣的朋友可以自己研究一下,相信大家完成后會(huì)受益良多的纪他!

轉(zhuǎn)載必須得到作者同意鄙煤,否則將會(huì)追究責(zé)任,本文僅僅進(jìn)行學(xué)術(shù)研究茶袒,沒有損害公司的利益梯刚,如果有損害公司的利益,請(qǐng)聯(lián)系作者薪寓,筆者會(huì)將其刪除

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亡资,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子向叉,更是在濱河造成了極大的恐慌锥腻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件母谎,死亡現(xiàn)場(chǎng)離奇詭異瘦黑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)奇唤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門幸斥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咬扇,你說我怎么就攤上這事甲葬。” “怎么了懈贺?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵经窖,是天一觀的道長坡垫。 經(jīng)常有香客問我,道長画侣,這世上最難降的妖魔是什么葛虐? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮棉钧,結(jié)果婚禮上屿脐,老公的妹妹穿的比我還像新娘。我一直安慰自己宪卿,他們只是感情好的诵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著佑钾,像睡著了一般西疤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上休溶,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天代赁,我揣著相機(jī)與錄音,去河邊找鬼兽掰。 笑死芭碍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孽尽。 我是一名探鬼主播窖壕,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杉女!你這毒婦竟也來了瞻讽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤熏挎,失蹤者是張志新(化名)和其女友劉穎速勇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坎拐,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烦磁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了廉白。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片个初。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乖寒,死狀恐怖猴蹂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情楣嘁,我是刑警寧澤磅轻,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布珍逸,位于F島的核電站,受9級(jí)特大地震影響聋溜,放射性物質(zhì)發(fā)生泄漏谆膳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一撮躁、第九天 我趴在偏房一處隱蔽的房頂上張望漱病。 院中可真熱鬧,春花似錦把曼、人聲如沸杨帽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽注盈。三九已至,卻和暖如春叙赚,著一層夾襖步出監(jiān)牢的瞬間老客,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工震叮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胧砰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓苇瓣,卻偏偏與公主長得像朴则,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钓简,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 藝術(shù)市場(chǎng)正在迎來區(qū)塊鏈技術(shù)帶來的巨大變化乌妒。區(qū)塊鏈提出了關(guān)于藝術(shù)市場(chǎng)關(guān)鍵絆腳石的決定,例如出處外邓,透明度撤蚊,版權(quán),所有權(quán)...
    藝術(shù)區(qū)AET閱讀 215評(píng)論 0 0
  • 瞧我們這一家 楊樂生/文圖 狗年中秋损话,28人成群集伴侦啸、恭領(lǐng)老人之命先后回到青衣壩家中。平時(shí)冷清的院壩丧枪,早擺起...
    楊樂生閱讀 176評(píng)論 0 0
  • 2018.2.14 嗨 214光涂,西方的情人節(jié),恰逢小年夜(地方風(fēng)俗:大年夜前一天是小年夜)∨》常現(xiàn)在回顧起214忘闻,真是...
    陸嫻1983閱讀 167評(píng)論 0 0
  • 1.初讀小說通過網(wǎng)劇改編《所羅門的偽證》,對(duì)編劇的邏輯分析很好奇恋博,才決定讀書的齐佳!一般很少看了電視劇再會(huì)去讀書私恬!或者...
    莫熙軒煜閱讀 373評(píng)論 0 0