搜尋

信息

返回清單
切換到指定樓層
通知這文章過時或找檔案 發表主題

[作弊修改] 破 解「貪吃蛇大作戰」的簽名信息服務端驗證機制

[複製連結]
CPGTING ( Lv.30 大天使 ) 發表於 2017-2-21 13:00:42 | 顯示全部樓層 |閱讀模式
0x00 序
第一次嘗試做一些簡單的逆向分析,內容比較簡單,高手們莫見笑。
「貪吃蛇大作戰」這個遊戲最近玩的人挺多,我也在玩。5分鐘限時版,最好成績也就3000多。
我分析的版本是v2.0.1:
101213rn2nlevv6pp0z33l.jpg
經過修改,玩了一把5分鐘限時賽:長度69224,擊殺1456。
0x01 反調試和簽名校驗
將原包重新簽名,安裝到手機上,一直提示網絡無法連接,原包沒有問題。這裡很明顯是將簽名信息上傳到了服務器端,在服務器端進行了簽名校驗,校驗失敗則斷開與此客戶端的連接。
寫一個小程序進行注入(利用ptrace),對一些關鍵函數進行hook,比如libc.so的fopen函數。
101328rxyfyldeob9o25l8.jpg
在hook_entry中,對libc.so的fopen作inline hook,監測一下程序都打開了哪些文件。
我本意是想看看,它是否會在運行時直接去讀取apk包,自己解析其中的與簽名信息相關的文件。結果是沒有,但發現它一直在讀cmdline文件,猜測可能是在作反調試(未去證實,因為後面的分析和修改並未借助動態調試)。
這裡說一下,假設它是自己打開apk文件,從中讀取與簽名相關的文件,提取簽名信息。那麼我們可以在某個位置放一個原包,然後hook關鍵函數,將其讀取的文件路徑修改為原包位置,即可繞過這種簽名校驗。
舉一反三,這種方式也可以繞過大部分反調試措施。比如常見的檢測traceid是否非0的反調方式,我們可以hook fopen/open,然後在它要讀取該文件之前先讀取該文件,並將其traceid重新修改為0,並將其寫到sd卡某個目錄下,再將打開文件的位置重定向到該文件,那它就檢測不到ptrace了。
還有一些anti-hook機制,大概思路是校驗本地文件的數據和加載到內存中的數據是否一致。通過類似方式也可以輕鬆繞過,一句話,因為我們可以先注入,先完成hook,先做各種Anti-anti。
0x02 破解籤名校驗
因為它沒有在運行時直接fopen/open apk文件,所以考慮應該還是通過調用系統api讀取的簽名信息。
將原包解壓,發現只有兩個so,其中libweibosdkcore.so看起來是微博sdk。將另一個libJustATest.so拖到IDA中看一下,沒加殼,並且只看到xxx_getATestString這麼一個有用的導出函數,從名字上看,很可能就是獲取上傳到服務器端的校驗字符串。
101418azb7v8uw19b988c4.jpg
跳轉到該方法,f5,進行一些簡單的參數名和參數類型以及函數調用的修正。發現它裡面進行了一大通的各種字符串的拼接,最後將該字符串返回(根據之前的猜測,該字符串可能就是發送給服務端的校驗字符串)。
101442usj3tn2rnnksr13w.jpg
發現裡面調用了java層com.wepie.snake.helper.update.QiniuEtagUtil類的getSignString函數。用Androidkiller反編譯一下APK包(該APK沒有作任何防反編譯的措施,dex也沒加殼),找到getSignString函數。
101508e8ry8fkd8kzmkiyz.jpg
沒錯,就是在這裡調用系統API獲取的簽名(其實,我們可以一開始就全局搜索某些關鍵API,來定位獲取簽名的位置)。
借助xposedhook getSignString方法,將正確的簽名字符串通過日誌打印出來。
101531t151ux4ocp599h3z.jpg
正確的簽名字符串是(作了MD5計算後的結果):678a930b9829b54a44f92a840916f7d1
剩下的工作就簡單了,修改smali,將getSignString的返回結果固定為上面的這個正確的簽名字符串。
101555xl3ralgllyl3la3k.jpg
重新編譯、打包、簽名、安裝,發現用新簽名的APK包已經可以正常使用了。
0x03 後序
其實破解籤名校驗之後,基本上是想改什麼改什麼了,因為原包沒有做任何的加殼和混淆的工作。比如,看看下面這個類,應該知道怎麼下手了吧(修改的時候注意一下,它裡面好像有一些簡單的數據合理性校驗之類的東西,我沒細看)。
101625pjiwaqaq8iwjffjy.jpg

最後,大家學習就好,別做什麼破壞,也別釋放出什麼破解版之類的東西。初次嘗試一點簡單的逆向分析,大牛們繞過吧。
附:我認為現在so端最有用的加固措施是llvm混淆,因為普通加解密殼從機制上來說比較容易脫掉。dex端已經出現瞭解釋器殼(偽vmp),純粹的類抽取的話,通過自定義rom(定製dalvik或art,遍歷class_def加載並初始化,然後dump…)也可以脫掉大部分的。




所有站內附件皆會附上安全掃描報告
請會員查看純淨度百分比後判斷使用



相關檔案須知:
取得檔案前,請先詳細閱讀文章內容
避免不必要錯誤與誤會發生。
也可多參考文章討論樓層內容
了解附件檔案相關討論資訊。









大家正在看啥


回覆 使用道具 檢舉
複製專屬你的推廣連結:發至FB與各論壇宣傳:累積點數換GP商品 & 藍鑽
每五點閱率就可以兌換藍鑽積分或遊戲點卡 夢遊推廣文章換GP商品

你需要登入後才可以回覆 登入 | 加入會員

本版積分規則

Copyright (C) 2010-2020 夢遊電玩論壇

廣告合作:請直接聯繫我們,並附上您預刊登位置的預算。  

快速回覆 返回頂端 返回清單