抱歉,Xposed真的能夠隨心所欲——4.猜拳投骰子你能贏算我輸

一句話歸納本文java

人品大法利用Xposed Hook掉微信猜拳和投骰子,讓你無需再擔心拿外賣和搞衛生。python


引言git

關於這節,我是看代碼看到頭皮發麻,逆向APP並無想一想中的簡單, 特別是微信這種,要投入的學習成本好高...並且最近事比較多,怕是 要斷更一下子了,後續閒下來再去研究吧,折騰本節這個簡單的東西, 我花了差很少兩天,反編譯apk,看smail代碼,ddms軌跡跟蹤方法調用: 打開DDMS選擇本身微信進程:com.tencent.mm,點擊下這個箭頭的圖標github

彈出個是否跟中的對話框,選中,接着就能夠開始跟蹤了,windows

界面上點擊下發送猜拳的表情,等隨機的結果定格以後再按一次,中止跟蹤。bash

而後find輸入搜索的關鍵字,好比我試過: click,emoji,gif等,一直試一直試,昨天試了一天,並無得出個因此 然來,心情巨差...今天下午突發奇想,從另一個角度去取巧,人品不錯 折騰個因此然來了。微信

Java中的產生隨機數的方法基本都是兩種:dom

  • Math.random()
  • new Random()

能夠以這個爲突破點試試,利用Jadx把dex文件轉換爲java文件ide


1.Jadx把dex文件轉換爲java文件

官方地址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打開。

再接着就要進行分析了。


2.隨緣分析

上面講了,隨機基本就那兩種套路,ctrl + shift + f 全局搜索 Math.random\( 這裏用了正則~

18個,不算太多,一個個打開猜想一波:

  • 第1個,排除了,生成0到100的整數,並且這裏有個Xfermode東西,猜想是進度條漸進加載的東西。

接着好幾個看名知意的(最喜歡這種了~)

  • 第2個,updater排除
  • 第3個,mapsdk排除
  • 第4,5個,offline排除
  • 第7個,*一個這樣的數字,不是正常的值...排除
  • 第8個,ShakeEggAnimFrame,直譯,搖蛋動畫Frame,猜想是搖一搖那個頁面的東西..

  • 第9,10,11,由於名字關係,一樣排除。
  • 第12個,ChattingAnimFrame,名字有點感受,聊天動畫Frame,方法也有點像,待定。
  • 第13,14 進去看看就知道不是了
  • 第15,16個,點進去看到包名,luckmoney,跟發紅包相關的,排除;

  • 第17個,mapsdk包名,應該和騰訊地圖有關,排除
  • 第18個,BallonImageView,Ballon翻譯毛玻璃,排除。

到此就可能第12個,ChattingAnimFrame 有必定多是,mark先。

接着全局搜:= new Random\(\),33個,不算多,也不算少, 排除法一一排除,包名,類名,裏面的註釋,隨機是否合理等。

限於篇幅,就不一一列舉了,最後定義到這個類:bh.java,而後這個類 裏有3個包含Random,依次排除,第一個字符拼接的,確定不是:

第二個,方法裏不加具體整數的話,返回的會是一個隨機的整數,排除

那麼就剩下第三個了:

綜上,隨機生成結果的可能就是上面兩個地方了。

再接着,再考慮一個問題,猜拳就三種狀況,石頭剪刀布,這個隨機值, 大部分開發都會用0,1,2這樣的表示,固然你說float了,再作下向上或者 向下取整,maybe?不過感受這樣的小功能還作取整就有點繁瑣了,so, 先試試第二個地方吧。接下來編寫一波xposed代碼,Hook掉這個方法, 試試Log把這個方法的參數和返回結果都打印出來,若是投骰子的時候 回調了,證實咱們的猜測沒錯。


3.代碼試錯

簡單的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是斷言,若是第二個參數大於第一個參數拋出異常!

到此就弄得明明白白了,接下來改下界面,整理下代碼,運行下~


4.運行試試


接着測試下:

沒什麼毛病,接着找個小姐姐玩一下~


5.順帶調戲下UI小姐姐

抱歉,小開發仔真的能夠隨心所欲,順道用這個模塊調戲了一下公司的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,驗證信息裏包含: PythonpythonpyPy加羣交易屁眼 中的一個關鍵詞便可經過;

驗證經過後回覆 加羣 便可得到加羣連接(不要把機器人玩壞了!!!)~~~ 歡迎各類像我同樣的Py初學者,Py大神加入,一塊兒愉快地交流學♂習,van♂轉py。

相關文章
相關標籤/搜索