xposed 企業微信 逆向 學習之基礎篇

原創 2020-4-13

最重要事情

【免責聲明】
此係列文章主要關於xposed的相關學習,以下所提及到的所有方式皆爲學習,如有他人使用本系列學習文章中所提及的知識點用於其他非法用途,本人不承擔由此造成的任何後果!!

注:我將會持續更新此係列文章,分享的內容爲我後文提到的:kernel相關內容,以及部分wework相關內容

爲什麼會做這件事?

原因有很多,主要有以下3個原因:
一則: 看過我以前寫的文章的朋友應該知道我是做iOS開發的,但由於對某些醫療業務接觸的原因便又感興趣上了Android,當然我也是有Android基礎的,在做完全成爲一個iOS開發者之前,Android與iOS的開發是並行的;
二則:業務訴求的需要,並且當我們業務剛在年前最後一天上線時就遇上了讓人痛心的新冠,在此我們作爲醫療公司基於此提供了非常大的助力,這是我碼代碼這幾年以來,從未有過的成就感,故想更加深入的構建整個體系(這個體系也許我後面的文章會有介紹);
三則:使用三方提供的服務非常不穩定、存在諸多bug、簽了合同給了錢之後我們成了乙方…成了乞求他們修改的乙方,很尷尬,但這也不能夠怪對方,這是由於我們業務過於複雜,其提供的hook設計邏輯、同步邏輯、轉發邏輯等等存在缺陷,加之他們還有其他非API對接用戶導致短期無法更改

怎麼開始做的?

2020年前兩月我們就在對接微信,最初是個人微信,希望能夠通過某些方式做到更多的事情,滿足更復雜的業務場景,但由於某些限制以及醫療行業需要API對接的特殊性,我們需要更多額外的功能,故聯繫了11家之多的廠商,並且5家都深度測試過所提供的API,但大部分只提供個人微信功能,僅有兩家可提供企業微信,但其中一家需要年後才能夠提供,故選擇了能夠年前就提供的那一家,但就像我上面提到的非常不穩定bug多,他們的重心也不是提供API對接,而是幫助他們的客戶構建私域流量。

故在疫情期間我開始了深入一點的針對xposed的學習瞭解,並h**k企業微信

整個過程從年初一下午開始學習kotlin,由於我是做iOS開發的,並且有開發Android 的基礎,故在學習kotlin與hook過程中並沒有遇到什麼大問題,年初二下午開始碼代碼,憑藉着個人興趣幾乎持續一個月每日工作到深夜2點,然後就有了雛形,到目前實現的功能有將近200個,並且都經過了版本的測試驗證

在此我將整個學習的成果分享如下

由於本人在整個項目中使用了WechatSpellbook的部分開源代碼,並且遵從作者寫給開發者的內容中,提及能夠修復bug也是很好,在此過程中我發現了自動版本匹配的幾個bug及不足之處,
故我也會將此部分代碼開源請注意是部分而非全部,也請大家不要噴,這裏面涉及到工作以及全部分享出去的法律風險問題),將核心基礎功能提供給更多的人共同學習,當然如果你覺得對你有幫助,也請給個star,項目地址: XMagicHooker

注意:

此篇文章爲初分享,還未來得及分離代碼,如果你覺得有興趣,可以持續關注,我將在後續分離並上傳kernel部分的代碼,如果你進入到上述github地址未查閱到源代碼,那是我還沒有分離,還請等待

一些工具及參考文章代碼

關於xposed很多知識點網上其實是存在大量的文章及範例的,在此我也列舉出個人在開始進入xposed時的一些較好並且幫助到我的一些文章及範例,在此感謝各位走在前面人的分享

可能會使用到的工具
  • Win上的Android Killer
  • bytecode-viewer
  • ApkStudio
  • Apktool
  • jadx、dex2jar

以上工具你都可以在github或者網絡中找到其使用方法,我主要使用的工具還是隻有jadx以及dex2jar,基本上能夠完全滿足所需了

可能會瀏覽的網站

吾愛破解       I春秋      看雪

可能值得參考的範例
可能需要閱讀的一些文章

一些項目中的介紹

kernel項目基礎核心

本次kernel是在WechatSpellBook的基礎上改寫而來,在此過程中由於需要針對於更加靈活的wework逆向,故在其基礎之上但也進行了大量的新增和修改,但其核心基於版本適配、啓動、自動查找等還是採用了spellbook的設計理念,在此非常感謝其所開源的代碼,基於此,本人也會將在spellbook基礎之上修改的代碼完全開源,並且還會將涉及到的其他基本核心代碼開源,主要涉及到以下方面:

  • 緩存(異步緩存):實現了內存及磁盤二級緩存
  • 幫助類工具(Classes、Method、Field查找,錯誤處理,重試策略,APK解析)
  • 媒體處理類(Silk編解碼、圖片壓縮處理)
  • 網絡請求處理(okhttp):緩存攔截、下載進度、上傳進度、重試等
  • 其他工具類 (shell命令,異步處理):
  • 針對wechatspellbook的修改(涉及到更簡潔的Method Hook編碼方式)

由於上述某些涉及到邏輯處理,我會在後續的文章慢慢講解

shared部分

這部分是適用於個人微信及企業微信,目前個人精力有限,並且業務未涉及到太多的個人微信相關需求,故暫時僅大部分功能還是企業微信的

  • Activity的生命週期hook
  • 數據庫操作hook
  • 文件修改、刪除、寫hook
wechat部分

目前完成功能暫時不多,在此暫不作過多介紹,可以參考WechatSpellBook

wework企業微信部分

此部分爲企業微信相關的hook,涉及多方面,主要包括:

  • 好友/聯繫人/用戶相關

在此你可實現針對好友的查詢、刪除、獲取、修改外部客戶、內部成員的操作,可以實現自動通過好友添加、獲取二維碼、部門用戶等等的功能

  • 會話相關

這裏涉及單聊、羣聊、羣會話監聽、獲取羣列表、會話列表、刪除羣、退出羣、解散羣、邀請羣成員、設置置頂、設置備註、設置羣內暱稱、設置羣公告等等功能

  • 消息相關

此模塊主要收發消息,包括但不限於文本、圖片、語音、視頻、小程序、鏈接等等的收發,實現自動下載圖片、語音、視頻、文件等等用於後期的自動轉發

當然還有更多的功能不僅限於上述,更多可以查閱我針對企業微信的xposed學習的成果:
可以訪問鏈接查看    可以訪問鏈接查看    可以訪問鏈接查看

以下截圖爲項目的整體架構

目前歷經一段時間已經完成了大部分功能,現有代碼量超過2w行,我是從2.8.6版本適配的,到現目前爲止支持到3.0.14,同一套代碼並沒與作修改實現了自適配,但是在3.0.16上發現了消息解析時有點問題,還未進行適配

注意:

此篇文章爲初分享,還未來得及分離代碼,如果你覺得有興趣,可以持續關注,我將在後續分離並上傳kernel部分的代碼,並且會在後續的文章針對每個實現的對於非常見的功能會進行講解

感謝關注

如果你在學習的過程中有其他問題,可以直接聯繫我的微信,添加時請備註:簡書-xposed/企業微信

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章