日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信系列研究之-----资源文件保护的小把戏

發布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信系列研究之-----资源文件保护的小把戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言

微信對APK進行多維度的保護,包括我們以前提到的客戶端到服務器驗證簽名,插件驗證,文件變動檢測,代碼混淆,把核心功能放在SO中等。
其中比較有特色的是對資源文件的保護,防止被惡意分析和山寨。
目前在國內對資源文件進行保護的APK還比較少,大部分都只對代碼和插件進行了保護,所以微信這個特色值得我們去破解一下。

現象

我們通過APKTOOL對微信的APK進行反編譯時就會發現?APKTOOL?只生成了?assets,lib,res,smali目錄(有些版本的APKTOOL還生成了UNKOWN目錄)。
進入資源文件目錄,我們還發現圖片文件比較少。缺少大量的布局文件XML。

如果我們利用APKTOOL對微信反編譯后再打包,會出現一大堆錯誤。
但如果我們直接把APK改名為ZIP,并解壓后,會發現還有r目錄。這其中必有蹊蹺。

原理
由于APKTOOL反編譯時只對RES目錄下的?二進制XML進行反編譯。
而對應RES下的二進制XML引用的其他目錄下的二進制XML無法識別。
微信正是通過這個缺陷對APKTOOL進行了欺騙。

<?xml?version="1.0"?encoding="utf-8"?>
<resources>
????<item?type="layout"?name="a3l">r/o/a3l.xml</item>
</resources>



破解方法:





ANDROID中activity查找資源文件的是
activity?(根據ID查找)->R.java對應的資源標號-》資源ID查找的對應的資源路徑-》找到文件的路徑,讀取相應的文件配置)。



1.從源碼中分析,這里我們以weixin531.apk中的?com.tencent.mm.ui.setting.EditSignatureUI.java?為例

com.tencent.mm.ui.setting.EditSignatureUI.java


import?com.tencent.mm.i;
import?com.tencent.mm.k;

??protected?final?void?DP()
??{
????oP(n.cgU);
????this.jLo?=?((EditText)findViewById(i.content));
????this.hqI?=?((TextView)findViewById(i.baa));
????String?str?=?ap.ja((String)bg.qW().oQ().get(12291));
????this.jLo.setText(str);
????this.jLo.setSelection(this.jLo.getText().length());
????this.hqI.setText(v(this.jLo.getEditableText()));
????EditText?localEditText?=?this.jLo;
????InputFilter[]?arrayOfInputFilter?=?new?InputFilter[1];
????arrayOfInputFilter[0]?=?new?e(this);
????localEditText.setFilters(arrayOfInputFilter);
????this.jLo.addTextChangedListener(new?f(this,?(byte)0));
????a(new?c(this));
????a(0,?getString(n.bud),?new?d(this),?cu.iMA);
????eB(false);
??}

??protected?final?int?getLayoutId()
??{
????return?k.bek;
??}

我們可以看到?

LayoutId?布局資源ID為?k.bek,
EditText?jLo?控件對應的ID?為?i.content

從中我們知道對應的R.JAVA分別為?com.tencent.mm.k和?com.tencent.mm.i

通過com.tencent.mm.k.java?我們可以查到??
public?static?final?int?bek?=?2130903326;
通過十六進制轉化?(2130903326->?0x7F03011E?)我們可以知道?EditSignatureUI.java對應的布局文件的ID為?0x7F03011E


通過com.tencent.mm.k.java?我們可以查到??

?public?static?final?int?content?=?2131165340;
通過十六進制轉化?(2131165340->?0x7F07009C?)我們可以知道?EditText控件對應的布局文件的ID為?0x7F07009C。或者直接從com.tencent.mm.k.smali中查找,這樣可以不用進行十六進制轉化。




2.利用AAPT分析AP資源的表,得到相應的資源編號文件
aapt?dump?--values?resources?weixin531.apk?>?resources.txt



3.通過查表我們可以找到對應的layout.xml?為?r/t/h0.xml.


resource?0x7f03001e?com.tencent.mm:layout/h0:?t=0x03?d=0x0000028e?(s=0x0008?r=0x00)
??????????(string8)?"r/t/h0.xml"


4.利用AAPT查找到的內容對二進制XML進行反編譯輸出
aapt?dump?--values?xml
tree?weixin531.apk?r/t/h0.xml?>?h0.xml.txt?
到這一步基本就得到我們想要的資源布局文件了。



5.?我們還可以利用AXMLPrinter2對單個二進制XML?進行反編譯輸出

java?-jar?AXMLPrinter2.jar?h0.xml??>>?ho.xml.txt

得到的結果如下:

<?xml?version="1.0"?encoding="utf-8"?>
<LinearLayout
??xmlns:android="http://schemas.android.com/apk/res/android"
??android:orientation="1"
??android:layout_width="-1"
??android:layout_height="-2"
??>
??<LinearLayout
????android:orientation="0"
????android:background="@7F02053B"
????android:layout_width="-1"
????android:layout_height="-2"
????android:layout_marginLeft="@7F0A0021"
????android:layout_marginTop="@7F0A0022"
????android:layout_marginRight="@7F0A0021"
????>
????<EditText
??????android:textColor="@7F090026"
??????android:textColorHint="@7F090037"
??????android:gravity="0x00000030"
??????android:id="@7F07009C"
??????android:background="@00000000"
??????android:layout_width="0.0dip"
??????android:layout_height="-2"
??????android:singleLine="false"
??????android:layout_weight="1.0"
??????style="@7F0D008D"
??????>
????</EditText>
????<TextView
??????android:textSize="@7F0A0016"
??????android:textColor="@7F090029"
??????android:layout_gravity="0x00000055"
??????android:id="@7F070380"
??????android:padding="@7F0A001D"
??????android:layout_width="-2"
??????android:layout_height="-2"
??????>
????</TextView>
??</LinearLayout>
??<LinearLayout
????android:gravity="0x00000001"
????android:layout_width="-1"
????android:layout_height="-2"
????android:layout_marginTop="@7F0A0023"
????>
????<TextView
??????android:textSize="@7F0A0015"
??????android:textColor="@7F090064"
??????android:layout_gravity="0x00000055"
??????android:id="@7F0703BA"
??????android:padding="@7F0A001D"
??????android:visibility="2"
??????android:layout_width="-2"
??????android:layout_height="-2"
??????android:text="@7F0C0797"
??????>
????</TextView>
??</LinearLayout>
</LinearLayout>



通過布局文件,我們可以看到?EDITTEXT?控件?編號為(android:id="@7F07009C")對應的風格了。





如果布局文件太多,我們還可以批量進行

for?/f??"tokens=*"?%%a?in?('dir?/s/b/a-d?"*.xml"')?do?(echo.%%a?
@java?-jar?AXMLPrinter2.jar?"%%a"??>>"%%na".txt)?
pause

由于AXMLPrinter2久未更新,AXMLPrinter2對ANDROID高版本的XML文件無法反編譯,為此我們需要下載修改過BUG的AXMLPrinter2


資源分享?修正后的AXMLPrinter2

???http://download.csdn.net/detail/simbaba/8625893


原文地址:http://www.kanxue.com/bbs/showthread.php?t=202303

總結

以上是生活随笔為你收集整理的微信系列研究之-----资源文件保护的小把戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。