• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Jadx在Android逆向中的應(yīng)用

      2022-05-30 10:48:04劉龍錦張志杰梁世民
      關(guān)鍵詞:逆向

      劉龍錦 張志杰 梁世民

      關(guān)鍵詞:Android;Jadx;逆向

      1引言

      Jadx工具是一款反編譯利器,支持命令行和圖形化界面,能夠以最簡單的方式完成APK的反編譯工作,反編譯后的代碼可閱讀程度極高,同時擁有強(qiáng)大的搜索定位功能,可以極大地提高反編譯后閱讀代碼及尋找關(guān)鍵代碼的效率。本文以句讀APP為例,對Android APP逆向進(jìn)行了研究。

      2環(huán)境介紹及逆向思路

      本文使用的句讀APP版本號為V4.5.0,在豌豆莢上發(fā)布時間為2022年01月13日。抓包工具為Progress Telerik Fiddler Classic V5.0。模擬器為夜神Android模擬器V7.0.3.0(安裝Xposed框架,JustTruseMe模塊)。

      逆向的思路一般為:(1)對應(yīng)用進(jìn)行抓包分析;(2)使用JADX反編譯APK程序;(3)使用JADX尋找分析關(guān)鍵函數(shù);(4)使用編程語言還原通信協(xié)議算法。

      3抓包分析

      句讀APP在防抓包層面未做有效的防護(hù),使用常規(guī)抓包環(huán)境即可抓取,對sentences/random接口進(jìn)行抓取,得到以下數(shù)據(jù)。

      GET:

      https:

      ∥judouapp. com/api/v2/sentences/random?

      newbie= true&system_version=7.1.2&platform=android&device_ type=MI9&app—key=fd13a4la-a194-4650-aOb2-56ld4b3187lc&device—id=458d834d-ee47-7f34-c5d4-8cle6bf825f3&signature= 7a602ae13dbfda013f23f5311948134l&version= 4.5.O×tamp= 1657659250&version_code= 1057&channel= ch_huawei

      經(jīng)多次抓取發(fā)現(xiàn),句讀APP的API接口公共參數(shù)為system—version, platform, device—type,app _key,device_ id,

      signature,

      version,

      timestamp,

      version一code,channel。signature的值為動態(tài)計算,timestamp的值為當(dāng)前時間戳,其他參數(shù)為固定值。抓包過程中并未發(fā)現(xiàn)上傳日記等操作,可以暫時推斷句讀APP的風(fēng)控系統(tǒng)主要是對signature參數(shù)值計算,計算正確值即可獲取服務(wù)端正常的數(shù)據(jù)返回。

      4反編譯APK

      使用Jadx工具打開句讀APP,通過Jadx返回的源文件列表判定句讀APP使用了Tencent的安全加固服務(wù),需要進(jìn)行脫殼后才能得到Dex文件,使用FDex2的Xposed進(jìn)行脫殼得到對應(yīng)的Dex文件后導(dǎo)出到桌面,拖人Jadx進(jìn)行分析即可。由于反編譯后的Dex文件較多,在分析時會稍微麻煩,因此得到啟示:使用加固平臺及對APP進(jìn)行多Dex文件處理可以提高APP的安全性,延緩攻擊者破解的速度。

      5分析關(guān)鍵函數(shù)

      多數(shù)APP使用okhttp庫進(jìn)行網(wǎng)絡(luò)請求,okhttp庫處理公共參數(shù)的方法一般為實現(xiàn)Interceptor接口,所以可以直接搜索Interceptor關(guān)鍵字,從而快速定位添加公共參數(shù)代碼位置[1]。通過分析定位到句讀APP添加公共參數(shù)的代碼的dex文件,使用Jadx工具打開該文件,搜索關(guān)鍵字“Interceptor”,得到圖1所示數(shù)據(jù)。

      排除okhttp開始的節(jié)點(diǎn),最終只剩下tech開頭的兩個節(jié)點(diǎn),再根據(jù)關(guān)鍵字network推斷最后一個節(jié)點(diǎn)可能性最大,進(jìn)入tech.caicheng. judourili. network.g類中,閱讀代碼,在intercept方法中發(fā)現(xiàn)了相關(guān)代碼,如圖2所示。

      signature參數(shù)由aVar.c方法計算得出,此方法傳人了兩個參數(shù),一個是固定字符串,另外一個為HashMap類型的容器。首先,確認(rèn)HashMap的數(shù)據(jù)內(nèi)容,閱讀tech.caicheng.judourili. network-g類的代碼,通過Jadx分析出HashMap的內(nèi)容為兩種形式,一種是CET方式請求數(shù)據(jù),另一種是POST方式提交數(shù)據(jù)。如果是CET方式提交數(shù)據(jù),則把URL中的鍵值對參數(shù)拆分并依次加入HashMap;如果是POST方式提交數(shù)據(jù),則把RequestBody中的鍵值對參數(shù)依次加入HashMap。其次,判斷是否已經(jīng)登錄,如果已經(jīng)登錄則把token加入HashMap。最后,把公共參數(shù)加入HashMap即可。

      確認(rèn)aVar.c方法的代碼,閱讀反編譯后的代碼得知aVar為s.a類型,從導(dǎo)包代碼中確認(rèn)s.a類型來自tech.caicheng.judourili. util.s類中,但是在此Dex文件中并未發(fā)現(xiàn)有對應(yīng)的util包,由此推斷util包存放在別的Dex文件中。經(jīng)過一個個文件的打開尋找,確認(rèn)tech.caicheng.judourili. util包存放的Dex文件后使用Jadx打開。

      閱讀該Dex文件代碼,分析出c方法的大致邏輯為判定參數(shù)str,hashMap不為空之后,取出hashMap的鍵名做數(shù)組排序,再將鍵值以“鍵名=值”的形式加入arrayList,最后加上secret_key= strc此處的str為參數(shù)str也就是一個固定字符串),全部加入數(shù)組之后,再調(diào)用m(1())方法,所以我們需要繼續(xù)向下閱讀I(1())方法。

      l方法的代碼比較簡單容易理解,遍歷list,在每一個元素后面加上字符串“&”,最后返回一個字符串。

      m方法代碼也比較容易理解,大致的流程為:判斷str參數(shù)不為空,長度不為0之后,進(jìn)行md5加密,返回加密后的字符串,該字符串就是signature參數(shù)的值。在代碼中看到有一行代碼為byte[]bytes=str.getBytes( d.a),此處需要確定d.a參數(shù),在m方法中并未發(fā)現(xiàn)有定義d.a,可以推斷d.a為類成員變量或者為其他類的靜態(tài)常量,在導(dǎo)包代碼處發(fā)現(xiàn)了導(dǎo)包語句import

      kotlin. text.d,可以確定d.a為系統(tǒng)常量,再根據(jù)getBytes方法所需要的參數(shù)可以斷定d.a為字符串類型,即應(yīng)該是文字的編碼格式,大概率為utf-8,最終的值在還原算法是再確認(rèn)即可。至此,加密的流程已經(jīng)走完,接下來還原該參數(shù)的計算方法。

      6還原加密算法

      上述分析步驟得出計算signature參數(shù)主要需要還原m,l,c三個方法,得益于Jadx強(qiáng)大的反編譯功能,反編譯后的代碼還原程度非常高[2],接近于源代碼,所以還原加密算法大致的流程為:復(fù)制Jadx中的代碼,導(dǎo)人需要的包,處理程序中的錯誤即可。

      (1)還原m方法,在Jadx中復(fù)制m方法代碼,手動修改d.a為UTF-8,去除i.d方法的代碼、@NotNull代碼之后,最終還原的代碼為:

      (4)對還原的代碼進(jìn)行測試,測試需要構(gòu)建數(shù)據(jù)請求,參照文中抓包數(shù)據(jù)的例子構(gòu)建即可,只需要判定加密后的字符串與抓包的加密字符串是否一致,發(fā)送請求后句讀APP的服務(wù)器正常返回數(shù)據(jù)即可。句讀APP請求的Header參數(shù)中并未有其他值,爬取句讀APP的數(shù)據(jù),拼接好URL發(fā)送到句讀APP的服務(wù)器即可,測試代碼如下:

      7結(jié)束語

      得益于Jadx工具強(qiáng)大的反編譯功能,面對加密算法在Java層的應(yīng)用,Jadx可以方便地還原加密算法。如果攻擊者有一定的編程經(jīng)驗,還原APP的加密算法所需要的時間不會太長。從本次逆向分析得到了很多寶貴的經(jīng)驗,為設(shè)計APP的風(fēng)險控制系統(tǒng)提供了必要的理論實踐基礎(chǔ),在設(shè)計移動風(fēng)險控制系統(tǒng)時,APP端應(yīng)該著重注意以下事項:(1)對于生成的device_id應(yīng)該做合法性校驗,限制每一個device_id單位時間內(nèi)請求次數(shù);(2)應(yīng)在合理、合法范圍內(nèi)收集用戶的行為數(shù)據(jù)并上傳到服務(wù)器分析,從而判定用戶發(fā)送的請求是否合法;(3)盡可能不要使用常規(guī)的MD5加密算法進(jìn)行加密,可以使用AES,RSA等高級加密算法;(4)簽名加密算法盡量放到SO層計算,在SO層也要做好代碼混淆以及采用OLLVM等防護(hù)手段。

      猜你喜歡
      逆向
      逆向而行
      逆向思維天地寬
      中華詩詞(2020年12期)2020-07-22 06:34:00
      逆向解答
      逆向工程在塑料產(chǎn)品及其模具設(shè)計中的應(yīng)用
      中國塑料(2014年1期)2014-10-17 02:46:41
      逆向工程技術(shù)及應(yīng)用
      梁河县| 海南省| 永宁县| 富顺县| 六枝特区| 华容县| 息烽县| 太谷县| 莎车县| 临潭县| 津市市| 高雄市| 宽甸| 乾安县| 琼结县| 兴城市| 平原县| 樟树市| 太湖县| 香港 | 泊头市| 天祝| 大连市| 永丰县| 新兴县| 镇安县| 阿勒泰市| 蒙城县| 沈阳市| 浠水县| 伊宁市| 揭东县| 清远市| 都江堰市| 乌兰浩特市| 宁明县| 克什克腾旗| 峨眉山市| 靖安县| 黔江区| 江源县|