一句話歸納本文java
人品大法利用Xposed Hook掉微信猜拳和投骰子,讓你無需再擔心拿外賣和搞衛生。python
引言git
關於這節,我是看代碼看到頭皮發麻,逆向APP並無想一想中的簡單, 特別是微信這種,要投入的學習成本好高...並且最近事比較多,怕是 要斷更一下子了,後續閒下來再去研究吧,折騰本節這個簡單的東西, 我花了差很少兩天,反編譯apk,看smail代碼,ddms軌跡跟蹤方法調用: 打開DDMS選擇本身微信進程:com.tencent.mm,點擊下這個箭頭的圖標github
彈出個是否跟中的對話框,選中,接着就能夠開始跟蹤了,windows
界面上點擊下發送猜拳的表情,等隨機的結果定格以後再按一次,中止跟蹤。bash
而後find輸入搜索的關鍵字,好比我試過: click,emoji,gif等,一直試一直試,昨天試了一天,並無得出個因此 然來,心情巨差...今天下午突發奇想,從另一個角度去取巧,人品不錯 折騰個因此然來了。微信
Java中的產生隨機數的方法基本都是兩種:dom
能夠以這個爲突破點試試,利用Jadx把dex文件轉換爲java文件。ide
官方地址:github.com/skylot/jadx工具
下載編譯源碼(最後一步,windows下直接運行gradlew.bat):
git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist
複製代碼
等編譯完就能用了,cd到build/jadx/bin目錄下,你可使用下述 兩個命令,反編譯源碼(out是輸出文件夾,可本身修改)或者直接查看
jadx -d out xxx.apk
jadx-gui xxx.apk
複製代碼
接着呢,普通的APK能夠這樣整,可是呢,若是微信apk這樣搞,那就恭喜你了 過一下子就卡死了...個人操做是直接解壓的apk,而後把裏面六個.dex文件 依次調用jadx -d xxx xxx.dex這樣,分別反編譯到不一樣的文件夾,最後 放到一個文件夾裏
再接着使用as打開。
再接着就要進行分析了。
上面講了,隨機基本就那兩種套路,ctrl + shift + f 全局搜索 Math.random\(
這裏用了正則~
18個,不算太多,一個個打開猜想一波:
接着好幾個看名知意的(最喜歡這種了~)
到此就可能第12個,ChattingAnimFrame 有必定多是,mark先。
接着全局搜:= new Random\(\)
,33個,不算多,也不算少, 排除法一一排除,包名,類名,裏面的註釋,隨機是否合理等。
限於篇幅,就不一一列舉了,最後定義到這個類:bh.java,而後這個類 裏有3個包含Random,依次排除,第一個字符拼接的,確定不是:
第二個,方法裏不加具體整數的話,返回的會是一個隨機的整數,排除
那麼就剩下第三個了:
綜上,隨機生成結果的可能就是上面兩個地方了。
再接着,再考慮一個問題,猜拳就三種狀況,石頭剪刀布,這個隨機值, 大部分開發都會用0,1,2這樣的表示,固然你說float了,再作下向上或者 向下取整,maybe?不過感受這樣的小功能還作取整就有點繁瑣了,so, 先試試第二個地方吧。接下來編寫一波xposed代碼,Hook掉這個方法, 試試Log把這個方法的參數和返回結果都打印出來,若是投骰子的時候 回調了,證實咱們的猜測沒錯。
簡單的Hook下這個方法,而後把參數和結果都打印出來,最擔憂的是這個 方法沒調用...懷着忐忑的心情安裝重啓
點擊猜拳,在看到logcat打印出來的日誌後,我不由淚流滿面,這兩天的 折騰沒有白費,哭哭!!!
試了幾回,終於把剪刀石頭步都集齊了!!!
第一個參數是固定值2,第二個參數也是固定值0,第三個參數是0,1,2 分別表明:剪刀,石頭,布,清理下日誌,看看骰子是否是也會調用這 個方法?
日誌如咱們預想的輸出了,棒!
第一個參數是固定的5,第二個是固定的0,第三個參數從0-5,依次對應 骰子的1-6,嗯,反編譯的Java代碼:
看到這,基本就一清二楚了,利用nextInt()方法,隨機生成一個特定範圍裏 的整數,好比想生成2-10的整數,第一個參數爲10,第二個參數爲2, 接着nextInt(10-2) + 1= 9,即生成0-9之間(不包括8)的一個整數,接着+1, 範圍變成了從0-9,接着在加上2,此時就變成2-11的值。 前面的Assert是斷言,若是第二個參數大於第一個參數拋出異常!
到此就弄得明明白白了,接下來改下界面,整理下代碼,運行下~
接着測試下:
沒什麼毛病,接着找個小姐姐玩一下~
抱歉,小開發仔真的能夠隨心所欲,順道用這個模塊調戲了一下公司的UI小姐姐
場景是這樣的:猜拳輸的吃辣花生的士力架,後面由於懷疑我開掛,就投骰子 結果確定是穩贏啊。套路別人先出就好,偶爾平局,讓對方沒那麼懷疑,實在不信 的能夠錄一波屏,我盧某真的沒有開掛,2333(順帶消費如下過世主播...)
調戲過程:
本節Hook瞭如下表情裏的猜拳和投骰子表情,能夠隨機出你想要的, Hook的過程也是頭皮發麻,APP逆向真是門技術活,還有耐心,細心, 至少我跟了兩天,眼睛都花了,...並且有不少工具還沒去嘗試,本身瞎 整心累,多是我一開始就直接拿微信這種大項目來開刀,因此挫敗感 滿滿吧,So,暫時棄坑,哪天忽然想整再回來更新吧~抱歉
附:Hook部分代碼(均可以在:github.com/coder-pig/C… 找到):
val c2 = XposedHelpers.findClass("com.tencent.mm.sdk.platformtools.bh",lpparam.classLoader)
XposedHelpers.findAndHookMethod(c2, "eE", Int::class.java, Int::class.java, object : XC_MethodHook() {
@Throws
override fun afterHookedMethod(param: MethodHookParam) {
xsp.reload()
when(param.args[0]) {
2 -> {
if(xsp.getBoolean(Constants.IS_CQ_OPEN, false)) {
val cq = xsp.getInt(Constants.CUR_CQ_NUM, 0)
param.result = cq
}
}
5 -> {
if(xsp.getBoolean(Constants.IS_TZ_OPEN, false)) {
val tz = xsp.getInt(Constants.CUR_TZ_NUM, 0)
param.result = tz
}
}
}
Log.e("TTZ", "" + param.args[0] + "~" + param.args[1] + "~" +param.result)
super.afterHookedMethod(param)
}
複製代碼
來啊,Py交易啊
想加羣一塊兒學習Py的能夠加下,智障機器人小Pig,驗證信息裏包含: Python,python,py,Py,加羣,交易,屁眼 中的一個關鍵詞便可經過;
驗證經過後回覆 加羣 便可得到加羣連接(不要把機器人玩壞了!!!)~~~ 歡迎各類像我同樣的Py初學者,Py大神加入,一塊兒愉快地交流學♂習,van♂轉py。