記一次破解

很久很久以前

(小學時)那時候我喜歡用這種APP做點任務賺點小錢。就是那種下載一個APP給幾毛錢那種。
然後不知道怎麼都下載了一個叫《紅包鎖屏》的APP。
這類APP爲了推廣,肯定會實行邀請好友獎勵政策的。
這個APP也不例外,邀請一個APP獎勵\(2\)元。
就是每個用戶都有一個邀請碼,如果別的用戶下載註冊這個APP,然後填寫你的邀請碼,你就可以獲得獎勵。
我老老實實下載APP,邀請了幾個好友,搞了不知道多久,賺了\(80\)多提現了。買了個地下拳王李青
然後就沒什麼高質量的任務了,於是就沒弄了。

(到了初中)不知道怎麼,我又下載了這APP。
現在,參加信息學競賽的我,知識顯然比以前多了不少。
安裝這個APP後,我注意到一個細節。
第一次打開APP,會進入一個填寫邀請碼的界面。
\(\color{red}{\text{???不用註冊就能填寫邀請碼???}}\)
於是驗證我的猜想。
我亂填了一個,顯然這是沒有用的。
然後進入APP,註冊,登錄。
記下我的邀請碼,然後清除這個APP的數據,再打開。
又進入了填寫邀請碼的界面,然後我填寫我自己的邀請碼。
之後直接用剛纔註冊的賬號登錄。果然,賬戶餘額多了\(1\)元。(過了這麼久,現在邀請只獎勵\(1\)元了)

那豈不是可以。。。???

於是我再次清除數據,打開APP,輸入我的邀請碼,登錄。
然後賬戶餘額並沒有變。

\(\cdots\)

現在的我懂得分析,所以我開始想爲什麼這一次不行。
經驗告訴我,它很可能是檢測了設備號。同一設備填寫的邀請碼只有一次生效。
爲了驗證猜想,我打開電腦,打開夜神模擬器,安裝了這個APP,然後填寫我的邀請碼,我的餘額加了\(1\)元。
然後清除數據,再打開,填寫邀請碼,並沒有什麼用。
我用模擬器自帶的功能把設備號換了,然後重啓。
清除數據後再輸入邀請碼,果然,我的餘額又多了\(1\)元。
此時的我興奮無比。
我開始使用這個方法刷邀請。

但是好景不長,我才刷了不到\(20\)元,我的賬號就被封了。
\(\cdots\)

你以爲我會就這麼放棄嗎?

我用接碼平臺(不知道的百度)接收驗證碼重新註冊了一個賬號。
然後分析封號的原因。
對,肯定是我邀請的人都是註冊後什麼都沒幹,一看就是刷的。
而且我還猜測這個封號是人工封的,而非系統自動判斷。(不要問我怎麼猜的)
所以這次我每更換一次設備號,都做2個任務再弄下一個,表示這是個真實用戶。
果然,這樣弄了八九個後都沒有被封號。

應該是可行了。

但這樣太慢了,還要人操作。
所以我到網上去搜有沒有什麼腳本軟件。
然後並沒有找到emmm...
但是
我是誰?
程序員啊!
於是我自己寫了一個支持錄製各種操作的腳本,專門爲這次計劃服務。效果肯定吊打網上的腳本啊

腳本實現了全流程:清除數據,輸入邀請碼,下載APP,更改設備號,重啓。

於是我掛了一個下午(上學去了),雖然此時已經被預料之外的彈窗退出的預定軌道,但是餘額已經有\(40\)多了。
我去商城兌換了一個計算器。越想越高興。

什麼景不長來着?
我的號又被封了。
\(\cdots\)

這次應該是絕望了吧。。

\[\Huge{The\ End}\]

你以爲就這樣結束了嗎?

令我沒想到的是,\(3\)天后,我竟然真的收到了一個計算器!
原來,即使封號了兌換訂單也會處理!

我去查了下這個APP

再看看它的開發公司

似乎還不是什麼小公司。。

不管了,幹就完了。

但現在這個方法效率實在太低,而且還不穩定。
所以考慮改進方法。
每次用模擬器去改設備號,還要重啓,佔用了大量時間,爲什麼不在軟件層面去修改設備號呢?
所以我想到了一個\(Xposed\)模塊:《應用變量》
那麼現在,總不能用\(PC\)的程序去模擬點擊模擬器吧,這樣太複雜太難了。
所以還不如直接寫個安卓的程序,在模擬器內部操作。
模擬點擊用什麼?輔助服務啊。
於是開工。我去網上查找了一些相關用法,然後動用全套工具,包括找控件\(id\)
調試了很久,終於弄出了最初版本。
能夠實現

打開紅包鎖屏->輸入邀請碼->點確定->進入主界面後返回桌面->打開應用變量->點全部隨機->點應用設置->點清除數據->返回桌面

完整的流程。
雖然返回桌面後會停頓一下(我也不知道爲什麼),但是效率已經非常可觀了。
細心的讀者應該會注意到這次少了做任務步驟,爲什麼呢?
回到出發點,做任務是爲了防封,而封號是工作人員發現後封的。
所以現在我們換一個解決方案:趕在工作人員發現之前刷夠然後完成兌換。
之前被封是因爲是手動的,效率有限,所以很容易被發現。
現在不同了,只要十分鐘就能刷滿\(40\)元,然後兌換一個充電寶。
測試,成功,充電寶到貨。

我當然不會就此滿足。
因爲每兌換一個商品就要換一個賬號,而註冊賬號是要用到接碼平臺的,手機訪問接碼平臺又太不方便。
於是我上網搜了\(Android\)中發送\(HTTP\)請求的方法,然後用接碼平臺提供的\(API\)接口,把接碼平臺嵌入了程序內。
而且寫了個懸浮窗,支持收縮、展開、滑動,登錄後,隨時接碼。而且顯示接碼平臺餘額。
我還給腳本加了個開關,放在懸浮窗裏。
然後算法也改進了,不是返回桌面然後找到紅包鎖屏打開,而是直接根據包名打開這個應用。
有了這個,我就能很方便地用手機去刷了。

後來我換了臺手機,不能\(root\)了。
但我也不會善罷甘休的。
配合\(virtual\ xposed\),依然可以實現所有功能。
於是便有了上圖的\(NO\ ROOT\ MODE\)

一不做二不休

看到上圖的一套完備的系統,你可能以爲就這樣結束了。
我對速度的追求可不止這樣。
應用變量作爲一個知名的\(Xposed\)模塊,不是開源的嗎?
我乾脆直接去下載了應用變量的源碼,然後把我的《Supermarket》和它合併。
嗯,完美!
節省了許多時間,效率++

效率的最高境界

你以爲這樣就結束了嗎?
繼續對影響效率的因素進行分析。
發現輸入邀請碼,點確定後會進入主界面,然後要模擬按返回鍵,然後彈出“是否確認退出”,再模擬按確定鍵。
加上退出本身會卡一下,這個過程會浪費一些時間。
那麼有沒有什麼辦法能讓他輸入邀請碼確定後不進入主界面直接退出呢?
當然有,那我們得向軟件本身動手了。
於是我反編譯《紅包鎖屏》,定位到輸邀請碼界面的\(Activity\),對代碼進行解讀後,刪除了跳轉主界面那一句話。
然後回編譯,簽名,安裝。
然後發現的確不會跳轉主界面了,但是似乎輸入的邀請碼並不奏效。
爲什麼?
初步估計是因爲《紅包鎖屏》後臺沒有退出(不要問我爲什麼總估計的那麼準,專業的力量
於是我在跳轉主界面的地方加上了\(System.exit(0);\)對應的\(smali\)代碼。
至於這個代碼怎麼來的,自己寫一個直接\(exit\)的程序反編譯一下就得到了。
現在,終於,成功了!
全程無停歇,一直在紅包鎖屏和應用變量間切換。
毫不誇張的說,2分鐘就能刷滿\(40\)
實戰極具觀賞性(可惜不能錄視頻)

這樣的話\(10\)分鐘就能刷幾個充電寶了。
當然我不會那樣做,畢竟這麼大個公司,我也是怕的,就適當了刷了點。

後來

後來這個公司似乎發現了這個問題,修改了邀請機制,被邀請的人必須做任務,邀請人才會獲得獎勵,我的這個方法也就隨之而廢。
真後悔當初沒有多刷點,只刷了4個充電寶、1個電子秤、2個優質筆記本、等等等等不記得了

總結

這次經歷運用到了
·\(C++\)
·\(Java(Android)\)
·抓包(嘗試過,文中未指出)
·各種分析
·\(apk\)反編譯
·發送和接受HTTP請求
等多種技術

是一次不錯的練手。

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