日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
逆向APK進(jìn)行smali注入實(shí)現(xiàn)“秒破WIFI”

近期開(kāi)始關(guān)注手機(jī)安全了,以往都是在PC上玩,對(duì)這個(gè)領(lǐng)域也想了解一下,可是拿什么來(lái)開(kāi)刀呢?突然想起Wifi***鑰匙這個(gè)神器了,這個(gè)軟件的wifi分享模式鄙人非常喜歡,裝了這貨基本上很多地方都有免費(fèi)的WIFI用!(這并非植入廣告!是真心話!)鄙人也把自己的家用wifi給共享了,10M的帶寬歡迎你連進(jìn)來(lái)(只要你敢,嘿嘿)。不過(guò)這個(gè)軟件還是有美中不足的地方,軟件提供wifi連接的功能,但是并不會(huì)告訴你wifi的密碼是什么,估計(jì)廠家也是基于安全和隱私的角度考慮,這樣做也是對(duì)的,但其實(shí)密碼應(yīng)該就在軟件的某個(gè)地方,只要想找肯定會(huì)找到(在data/misc/wifi/wpa_supplicant.conf文件中),但這不是本文的重點(diǎn),本文主要討論的是apk軟件的逆向和修改打包技術(shù),純技術(shù)交流用途。

創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、平頂山網(wǎng)絡(luò)推廣、微信小程序、平頂山網(wǎng)絡(luò)營(yíng)銷(xiāo)、平頂山企業(yè)策劃、平頂山品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供平頂山建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

好了,開(kāi)始說(shuō)干貨了(高手直接飄過(guò)吧),這次開(kāi)刀的版本是官方2.9.27版本。首先APKTOOL反編譯安裝包,請(qǐng)注意版本號(hào)Apktool 2.0.0-Beta9。

得到smali源碼后開(kāi)始找關(guān)鍵代碼,我們的主要目的是讓wifi***鑰匙把從服務(wù)器傳回來(lái)的密碼顯示出來(lái),這樣我們不但能連入wifi,而且還能知道明文密碼。

首先與PC端軟件逆向的流程應(yīng)該是一樣的,找關(guān)鍵字定位關(guān)鍵代碼,這軟件每次連wifi都會(huì)顯示一些日志,其中有一條很關(guān)鍵,“嘗試獲取網(wǎng)絡(luò)密碼成功”,這應(yīng)該是成功獲取到了密碼之后的日志,這個(gè)字符串位于資源目錄中的strings.xml文件里。

依據(jù)XML的name字段"act_autoconnect_state_get_net_pwd_success"我們可以繼續(xù)搜索到位于public.xml中對(duì)應(yīng)的字符串ID。

依據(jù)這個(gè) id="0x7f0d051e",我們能定位到關(guān)鍵的smali代碼,\WiFiMaster\smali\com\snda\wifilocating\ui\activity\fc.smali這里使用了這個(gè)字符串,代碼如下:

 const v1, 0x7f0200bd
const v2, 0x7f0d051e
    invoke-virtual {v0, v1, v2}, Lcom/snda/wifilocating/ui/activity/fe;->b(II)V
    iget-object v0, p0, Lcom/snda/wifilocating/ui/activity/fc;->a:Lcom/snda/wifilocating/ui/activity/AutoConnectActivityWithStateList;
    iget-object v1, p0, Lcom/snda/wifilocating/ui/activity/fc;->a:Lcom/snda/wifilocating/ui/activity/AutoConnectActivityWithStateList;
    invoke-static {v1}, Lcom/snda/wifilocating/ui/activity/AutoConnectActivityWithStateList;->i(Lcom/snda/wifilocating/ui/activity/AutoConnectActivityWithStateList;)Lcom/snda/wifilocating/f/s;
    move-result-object v1

可以從代碼中看到0x7f0d051e字符串作為參數(shù)傳遞進(jìn)了b方法中,而后又被AutoConnectActivityWithStateList這個(gè)類(lèi)進(jìn)行了多次調(diào)用,看來(lái)AutoConnectActivityWithStateList類(lèi)是個(gè)非常關(guān)鍵的環(huán)節(jié),我們不如直接找到這個(gè)類(lèi)的實(shí)現(xiàn)代碼進(jìn)去看看。

這個(gè)類(lèi)的smali代碼路徑如下:\WiFiMaster\smali\com\snda\wifilocating\ui\activity\AutoConnectActivityWithStateList.smali

為了節(jié)省篇幅,省去讀這個(gè)類(lèi)代碼的過(guò)程描述,直接粘貼關(guān)鍵代碼如下(大概1500行的位置):

.method private a(Lcom/snda/wifilocating/ui/activity/support/AccessPoint;Ljava/lang/String;)Lcom/snda/wifilocating/ui/activity/fd;
    .locals 5
    const/4 v4, -0x1
    new-instance v0, Ljava/lang/StringBuilder;
    const-string v1, "connect ap:"
    invoke-direct {v0, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V
    iget-object v1, p1, Lcom/snda/wifilocating/ui/activity/support/AccessPoint;->b:Ljava/lang/String;
    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    move-result-object v0
    const-string v1, " with pwd:"
    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    move-result-object v0
    invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
    move-result-object v0
    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    invoke-static {p2}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
    move-result v0
    if-nez v0, :cond_0

這是一個(gè)非常關(guān)鍵的方法的實(shí)現(xiàn),我們看到該方法有兩個(gè)參數(shù),一個(gè)是AccessPoint類(lèi)的對(duì)象,另一個(gè)是String字符串,方法的一開(kāi)始就實(shí)例化了一個(gè)StringBuilder的對(duì)象,然后使用append不斷的拼接該字符串,大概的拼接規(guī)則是這樣的:

“connect ap: ”+ “AccessPoint;->b”+“with pwd:”+“String”

看到了這里似乎就已經(jīng)明朗了,意思就是 連接熱點(diǎn):XXX 使用密碼:XXX。

所以我們完全有理由相信,這個(gè)String類(lèi)型的參數(shù)實(shí)際上就是wifi熱點(diǎn)的密碼!

OK,到了這里,我們要做一些工作來(lái)進(jìn)行驗(yàn)證,你可以選擇使用ADB調(diào)試然后跟蹤到這里,或者干脆修改smali,讓它輸出這里的String給我們看,我選擇第二種方法,因?yàn)楸緛?lái)我們也是為了要讓它顯示密碼。

手動(dòng)輸入如下的代碼插入到該方法中(smali有很?chē)?yán)格的語(yǔ)法規(guī)則,拿到一段代碼先要搞清楚含義,隨意插在什么地方幾乎是跑不通的,關(guān)于smali的語(yǔ)法網(wǎng)上有很多資料了,建議先學(xué)習(xí)懂了以后再去寫(xiě),當(dāng)然如果你是高手就飄過(guò)吧)

new-instance v5,Landroid/app/AlertDialog$Builder;
invoke-direct {v5,p0}, Landroid/app/AlertDialog$Builder;->(Landroid/content/Context;)V
const-string v6, "|Cracked by \u6210\u738B\u8D25\u5BC7| PASSWORD IS:"
invoke-virtual {v5,v6}, Landroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
invoke-virtual {v5,p2},Landroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
invoke-virtual {v5},Landroid/app/AlertDialog$Builder;->create()Landroid/app/AlertDialog;
move-result-object v6
invoke-virtual {v6},Landroid/app/AlertDialog;->show()V

這段代碼就是使用AlertDialog類(lèi)的一系列方法彈出對(duì)話框,把密碼顯示出來(lái)。(真搞不懂java彈個(gè)對(duì)話框怎么要用到這么多方法,這里懷念一下windows的MessageBoxA。)

插入過(guò)后就是對(duì)整個(gè)代碼進(jìn)行編譯打包的工作了,不要以為這個(gè)活就干完了,真正鬧心的還在后面呢!

我們使用apktool b [反編譯后的目錄](méi) 進(jìn)行打包,多數(shù)情況你會(huì)發(fā)現(xiàn)打包過(guò)程是會(huì)報(bào)錯(cuò)的,千奇百怪的錯(cuò)!只有少數(shù)APK會(huì)成功打包。后來(lái)我專(zhuān)門(mén)研究了一下這個(gè)問(wèn)題,主要其實(shí)是資源出的錯(cuò),當(dāng)然前提是要先把smali代碼編譯過(guò)去,剩下再解決資源的問(wèn)題。本例中的這個(gè)APK也是有報(bào)錯(cuò)的,好在還不多,都一一解決了。其實(shí)我本來(lái)想把資源報(bào)錯(cuò)這個(gè)問(wèn)題的細(xì)節(jié)寫(xiě)進(jìn)來(lái),但其實(shí)這是個(gè)體力活!而且每款軟件都不同,幾乎沒(méi)有借鑒意義。所以我準(zhǔn)備把一些方法性的東西告訴大家,具體問(wèn)題你只能具體分析了。

解決打包報(bào)錯(cuò)問(wèn)題的基本思路就是先看報(bào)錯(cuò)內(nèi)容(這不是廢話么~),因?yàn)檫@是我們唯一的線索,先搞清楚問(wèn)題的原因再去對(duì)癥下藥,smali報(bào)錯(cuò)我就不說(shuō)了,因?yàn)檫@多數(shù)是語(yǔ)法的問(wèn)題,只能好好學(xué)學(xué)了。如果報(bào)錯(cuò)類(lèi)型是資源文件出錯(cuò),例如string.xml、public.xml什么的,那你就把原始的apk資源解包出來(lái),然后把反編譯的對(duì)照原始資源文件進(jìn)行參考修改,缺啥就補(bǔ)啥,多啥就刪啥,引用錯(cuò)了啥就改啥,這也是需要你對(duì)安卓的整個(gè)打包文件結(jié)構(gòu)有一定的了解才行,具體問(wèn)題具體分析。

好了,此處省略一萬(wàn)次報(bào)錯(cuò)修改的過(guò)程……(真心希望google能把a(bǔ)pktool好好做做,這么多bug不像是google的產(chǎn)品作風(fēng)啊!)***終于生成出了打包好的文件,它在你反編譯后的dist目錄中。

先別急,我們還要對(duì)這個(gè)APK進(jìn)行簽名,否則安裝不了。

OK,我們下面安裝這個(gè)APK,來(lái)看看效果。

安裝后開(kāi)啟wifi,然后點(diǎn)擊一鍵查詢(xún)***鑰匙,搜出來(lái)個(gè)901,估計(jì)是門(mén)牌號(hào),信號(hào)很好并且已經(jīng)共享了wifi,我們連進(jìn)去看看。

點(diǎn)擊“***鑰匙自動(dòng)連接”,順利的話就應(yīng)該能爆出密碼了。

OK,密碼已經(jīng)成功彈出,大功告成!有了這貨你基本上就可以秒破很多WIFI了!對(duì)于已經(jīng)修改好的APK我就不提供下載了,我們的目的是純技術(shù)交流,你懂的。


網(wǎng)站名稱(chēng):逆向APK進(jìn)行smali注入實(shí)現(xiàn)“秒破WIFI”
標(biāo)題網(wǎng)址:http://www.5511xx.com/article/ccspigo.html