Weil Jimmer's BlogWeil Jimmer's Blog


Category:Experience

Found 52 records. At Page 3 / 11.

辨識 mp3 文件 真實比特率 碼率 頻譜分析

1 Comments
-
更新於 2018-05-30 18:19:00

今天突然想到一件事。身為一個音樂收藏癖的人,常常對音樂本身的比特率很感興趣,尤其是無損音樂FLAC格式,但是,這產生一個問題,會有一些人很不肖的把一些MP3檔案轉檔為FLAC,然後告訴別人這是無損音樂,雖然是轉檔後是無損檔案,但實際上音質根本就是原本的有損MP3的音質,很難聽,也有明明是 128 kbps 的 mp3 檔案轉成 320 kbps,然後讓人以為這檔案很高音質。

於是我就想到,到底要怎麼辨識,去網路上稍微查過了一下,感覺沒啥麼中文文章討論這個,我就來發一個,順便當個筆記,以後自己要查也方便。

首先先去下一個具有頻譜分析的軟體,例如 Spek,下載完成後開啟要辨識的文件,以人工方式肉眼判斷。截斷的頻率位置。就可以大概猜得出這文件的原始音質如何。

MP3 file, Bitrate 32 kbps. Cut-off at 4.5kHz.
MP3 file, Bitrate 48 kbps. Cut-off at 7.5kHz.
MP3 file, Bitrate 64 kbps. Cut-off at 10.3kHz.
MP3 file, Bitrate 80 kbps. Cut-off at 11.2kHz.
MP3 file, Bitrate 96 kbps. Cut-off at 11.5kHz.
MP3 file, Bitrate 112 kbps. Cut-off at 13.5 kHz.
MP3 file, Bitrate 128 kbps. Cut-off at 16 kHz.
MP3 file, Bitrate 160 kbps. Cut-off at 17 kHz.
MP3 file, Bitrate 192 kbps. Cut-off at 19 kHz.
MP3 file, Bitrate 320 kbps. Cut-off at 19.5 kHz.
M4A file, Bitrate 500 kbps. Cut-off at 22 kHz.

上表是參考別人數據加上我自己實驗的結果,可以從表的數據知道實際上的 MP3 壓縮有損後會清掉的部分高頻率的部分。所以大概可以得知是何種音頻轉檔而來,由低碼率轉高碼率的檔案,轉檔過後已經切掉的部分是不會復原的,而且還可能使音質變更差。

例如:我們可以從下圖看到平均被切掉的部分是 16k 赫茲,根據查表得出可能原始檔案為 128kbps 的檔案,不過現在已經被轉成 320 kbps。算是一個高音質的檔案。

第二個例子,平均截斷的部分在 9 或 11 kHz,可以知道這檔案原始的碼率絕對不會是 128 kbps,一定比較低,原始檔案極有可能是 96/80/64 kbps。可以和下圖同首音樂的 FLAC 無損音質檔案進行比對。

下圖是 FLAC 無損音質,理應是全頻顯示,不會有截斷的問題。只有有損壓縮才會刪掉一些高頻內容。(因為人耳聽不太出來也不太需要。)

補充再來幾個例子,下面的截圖是WAV無損無壓縮的檔案格式,上面的頻譜高頻區域就全頻顯示沒有任何截斷的問題。

接著,下圖是我用音訊編輯軟體重新輸出為有損音質的 MP3 檔案,128 kbps。可以由頻譜分析明顯看到大概在 16 kHz的地方被截斷,而查表的結果正好是 128 kbps,與實際音訊檔的比特率吻合。所以算是比較實際的檔案。

之後我又把那個 128 kbps 的 mp3 檔案轉檔為 320 kbps 的 mp3 檔案,頻譜分析圖如下:

幾乎沒什麼變化,可以看得出音質沒啥麼改變,而且高頻的部分依舊是缺失的。

總結:

當然這個方法不一定絕對管用,但是拿來識別一般的檔案已經足夠了。有些檔案本身就沒有高頻區域,比如很單純的鋼琴曲,不會有到 20 kHz 的音,所以頻譜分析上方高頻區本身都是黑的,這很正常,檔案也的確很可能是 320 kbps,主要要看的是「截斷區」,比如原本應該有像山峰一樣尖尖的區塊,到了某個頻率後突然被砍斷一樣,那就很可能是轉檔造成的截斷。這時候這個方法判斷原始檔案比特率就很準確了。

最後,本方法本身不保證一定正確。主要還是要靠耳朵去仔細聆聽其中的差異吧。

參考資料:
https://thesession.org/discussions/19642
https://www.reddit.com/r/hiphopheads/comments/2t88ne/a_quick_guide_to_checking_the_real_bitrate_of/

By Weil Jimmer


This entry was posted in General, Experience, Note By Weil Jimmer.

域名的故事

No Comments
-
發布於 2018-01-04 00:49:42

前言:最近會想寫這篇文章都是因為看到網路上有別人在講他們的故事,讓我有感而發。

本站在 2012 年就已經成立了,那時候還是在使用 TWBBS 免費自由網域,隨意以電腦資訊為主題想了一個名稱「0000」,於是乎註冊了「0000.twgogo.org」,至本文章發布日,此網域仍舊可以使用,我甚至心想乾脆就以之為永久網域吧!不料自由網域也即將關停長達十八年的服務,讓我心中頗有不捨。

在2016年二月前,我一直都是採用自由網域,不過一直期盼能夠擁有 .com 網域,不過頂級網域並非免費的,而且我也沒管道不知道要怎麼付款,再加上那時候都還是國中國小階段,怎麼可能有錢付…,故只好用免費的架站。直到高中三年級才擁有了自己的第一個網域「00wbf.com」,原本是想繼承「零」的特性,可是四個零早早就被別人註冊走,我也不想要太長的網域名稱,想註冊 wbf 相關類的網域,結果大多都被註冊走了,只好變成 00wbf 這個名稱。使用這網域將近九個月時,我已經開始厭惡了,因為開頭是數字再加上後面英文輸入不太好打,要嘛就全數字或全英文,而且好像也不好記憶。

因此,2016年十一月,我又在域名註冊網站上閒晃,一直在想一個好名稱,喜歡的,有代表性的,結果當我查到 weils.net 時,發現沒有人註冊!讓我突然心一喜,就決定是這個域名了,可以直接翻譯成 Weil's Net,讓我覺得還可以接受,雖然我比較想要 weil.net,不過都被別人註冊走了,當初註冊完後就開始祕密佈署,等到正式測試完後再取代掉原本網域。

原以為這樣就可以鬆一口氣,沒想到我竟然有一點不捨,第二年,我還是又續約了 00wbf,心想這種網域萬一落入他人之手,是不是可以冒用我的名義?開始在想:換網域的缺點似乎不只有網址改變,不只有影響SEO,最重要的是要保持著原本的網域…我還在想,到底何時要放棄舊的網域,目前沒有什麼定案。

以上都是講我自己的私人網域,其次也有註冊比較公用性質的,個人比較重視公私分明,能盡量不合一就不合一。同樣在 2012 年註冊了名為「birch.twgogo.org」這個名稱,birch 是白樺樹的英文,原本也是一直架著論壇好幾年,直到後來主機一直有問題,再加上自己本身無心管理,才暫時放棄管理,但網站一直都是 Online 的。而且我也註冊很多個自由網域指向同個 IP,同時我還註冊了「birch.idv.la」(之前在香港IT聯盟註冊的,現在已停止服務)。

後來私人網域已經有了頂級網域後,我認為公用域名應該也要是頂級域名,才可以凸顯其專業,原先有拿到免費優惠碼,故註冊一年的 wbft.asia,不過是在我不太喜歡的網站註冊的,覺得續約麻煩,轉移又要錢,再加上不喜歡 asia 這個後驟,即使 asia 也是 gTLD,我依舊老古板的認為要用傳統域名比較專業,於是註冊了 wbftw.org,同樣的,為何不註冊 wbft.org,我也是很想阿,不過已經被別人註冊走了,我甚至想註冊 wbf 就好,最後還是決定使用 wbftw.org。

「wbftw」可以直接解釋為「wbf」(白樺論壇)與「tw」(台灣),也可以解釋成白樺論壇網頁,多一個 w,跟我自己的私人網域一樣,總是多出不想要的字母,我個人是對團隊網域沒有任何不滿,就這樣了,覺得取名也不會太爛,是有點難記但很獨一無二,原本想註冊 WBFTeam 礙於太長了,就不考慮註冊那麼長的網域,於是就沿用此網域至今。不知道何時,白樺論壇才能正式再度 Online。

網域這種東西,不僅僅象徵了品牌、唯一性,一旦註冊了就影響深遠,大家都是記憶這個名稱、這個網址,一旦換網域問題真的很多!尤其是當舊網址已經散播出去時,要通知所有大大小小的網頁去修改網址是非常困難的!

By Weil Jimmer


This entry was posted in General, Experience, Mood, The Internet, Note By Weil Jimmer.

BadUSB 初體驗 Arduino Duckuino Hid Keyboard Attack

No Comments
-
更新於 2017-12-24 19:36:21

最近不知道為啥,突然心血來潮一直想要來編譯 USB隨身碟,做一支 BadUSB,遺憾的是一直找不到目標型號的控制器(Controller)。後來搜尋,沒想到網路上竟然已經有賣類似功能的東西了!

BadUSB 顧名思義就是壞的 USB 碟,會執行一些程式碼,可能會讓電腦受損,而這類攻擊都是需要實體插入電腦裡面的,並且,防毒軟體有很大機率是掃描不到,程式碼都是在閃存控制器(Flash Memory Controller)裡面,除非很底層的軟體,否則幾乎是碰不到那區塊。

雖然一般隨身碟拿來修改的話,價格比較便宜,但是不太好操作,真正的 Rubbery Ducky 又太貴了,買不起。網路上的 Arduino 做成的微型控制器比較便宜一點。很久以前也有萌生用 Arduino 實作的想法,不過太醜了,就是一塊電路板,沒有殼,網路上找不太到賣殼的,而現在我找到的真的很精美,不是 MicroUSB 所以連轉接都不用,於是乎買來體驗一下。僅僅是測試,至於啥麼用途,可以自由發揮,例如:騙別人這是普通的隨身碟之類的,插上去就立刻變身成鍵盤執行惡意代碼。

上圖即是我網購的帶有 Arduino ATmega32U4 控制器的 USB,外觀就像正常的隨身碟,不是所有 Arduino 都可以當成鍵盤用,例如 Arduino Nano 就不行。

這樣一來就可以把 Arduino 當成 Rubbery Ducky 使用,直接實行 Hid Keyboard Attack。網路上已經有教學文章可以直接將 Rubbery Ducky 的程式碼 轉為 Arduino專用的程式碼。這樣就不太需要自己修改。

可以參考:https://github.com/Nurrl/Duckuino

DELAY 2000
GUI r
DELAY 100
SHIFT
STRING cmd
ENTER
DELAY 100
STRING shutdown -t 0 -y -s
ENTER

以上是我編譯的 Script Example,用途是立刻將電腦關機,當我實際運行時有遇到不少麻煩,好像開不了 Windows Key + R Key,最後解決方法是把

Keyboard.press("r"); 
換成
Keyboard.press('r');

就這個單雙引號害我 Debug 好久,加上 Delay 好像也沒用。覺得奇特。

運行結果如下方影片:

By Weil Jimmer


This entry was posted in Arduino, C, General, Experience, Functions, Note By Weil Jimmer.

RFID MIFARE卡 修改 UID 進入門禁系統

7 Comments
-
更新於 2017-11-03 23:48:45

0x00 前言

最近會想寫這篇文章主要是在網路上無意間看到了RFID相關裝置,突然萌生很久以前一直想玩的事情,於是乎,就打算來實作門禁卡的複製。再加上好久沒寫文章,現在我也懶得管是不是技術成分很重才寫,以後文章我大概也是這樣,寫得很淺,除非我研究了什麼很困難的東西。

其次,真心很感謝 Joe Jimmy 的裝置贊助,不然我大概也不會去做這個實驗,至少要等到以後購買裝備時才會做起。

0x01 目的

為了通過感應 MIFARE卡 的門禁系統,因此需要複製有效的密碼卡而進入該門。

0x02 原理

目前大部分學校門禁系統都採用 13.56 MHz 頻率的 RFID 感應卡,且學生證普遍都是和悠遊卡公司合作的學生證,基本上都是有 KeyA 和 KeyB 和 控制位元保護的。因此門禁系統想用學生證刷過,"應該是"只能採用識別 UID 的方式來驗證使用者的身分,進而決定是否開放使用者進入。如果是另外發放密碼卡,則可能該密碼卡有經過加密,驗證使用者可能不是驗證 UID,若如此,這篇文章就不適用於這種驗證方法。本篇文章僅針對 UID 部分的驗證做出複製卡 (Clone Card)。

0x03 配備

  1. Arduino Mega 2560
  2. MFRC522
  3. 數張 可修改 UID 的 S50 空白卡
  4. 蜂鳴器(非必須,覺得有聲音比較好。)

0x04 結果

以下是我寫卡UID的程式碼是參考 這篇文章 寫的,稍作修改,lib 也是採用同篇 GitHub 文章。

#include <SPI.h>
#include <MFRC522.h>
#include <MFRC522Hack.h>

constexpr uint8_t RST_PIN = 8;
constexpr uint8_t SS_PIN = 9;

MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522Hack mfrc522Hack(&mfrc522);

byte newUid[] = {0xDE, 0xAD, 0xBE, 0xEF}; //預設UID
bool write_enable = false;
int wait_sec = 0;

MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println(F("Warning: this example overwrites the UID of your UID changeable card, use with care!"));
  
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
}

void loop() {

  if(wait_sec>=0 && write_enable){
    wait_sec=wait_sec-1;
    delay(1000);
    if(wait_sec<2){
      tone(5, 466, 125);
    }
    if(wait_sec<=0){
      write_enable=false;
    }
  }
  
  // Look for new cards, and select one if present
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    delay(50);
    return;
  }

  if(!write_enable){
    byte *id = mfrc522.uid.uidByte;
    byte idSize = mfrc522.uid.size;
    Serial.print("UID Size: ");
    Serial.println(idSize);
    if(idSize!=4){
      Serial.println(F("New UID is not 4 byte!"));
      return;
    }
    Serial.println(F("New UID set!"));
 
    for (byte i = 0; i < idSize; i++) {
      Serial.print("id[");
      Serial.print(i);
      Serial.print("]: ");
      newUid[i]=id[i];
      Serial.println(id[i], HEX);
    }
    Serial.println();
    mfrc522.PICC_HaltA();
    write_enable=true;
    wait_sec=10;
    tone(5, 740, 500);
    delay(50);
    return;
  }
  
  // Dump UID
  Serial.print(F("Card UID:"));
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  } 
  Serial.println();
  
  // Set new UID
  if ( mfrc522Hack.MIFARE_SetUid(newUid, (byte)4, true) ) {
    Serial.println(F("Wrote new UID to card."));
  }
  
  // Halt PICC and re-select it so DumpToSerial doesn't get confused
  mfrc522.PICC_HaltA();
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    return;
  }
  
  // Dump the new memory contents
  Serial.println(F("New UID and contents:"));
  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
  tone(5, 740, 250);
  delay(500);
  tone(5, 740, 250);
  write_enable = false;
  delay(2000);
}

以上程式碼之功能是將要被複製的卡貼近 RC522模組,然後再將要被寫入UID的卡貼近,寫入動作結束時會B兩聲,此刻再去檢查Output的值看看有沒有寫入成功。我目前的設定是第二張卡超過10秒就不寫入了,不是無限等待,要再把第一張靠近,在10秒內放入第二張卡。

學會這個小伎倆,往後只要撿到別人的學生證就有機會可以複製對方卡的資訊,之後就可以直接進入別人的宿舍。或者是有設門禁卡的公寓、公司、飯店…等場所,就可以多備份幾把鑰匙卡。紀錄UID也未必要使用模組,有NFC功能的手機就可以讀取資訊,甚至是寫入卡片資料或模擬 UID。

再次提醒,目前複製卡的成果僅次於 UID 的讀寫,如果門禁系統採用非 UID 認證,而是使用 KeyA 或 KeyB 及 控制位元,那就可能必須破解其卡片密鑰才可以存取特定資料,否則就無法輕易的複製卡片資料。

以上是寫入卡片成功的示意圖片。

五張特製可修改 UID 的 S50 卡都被修改為相同的 UID。

這裡文章就差不多到結尾了,我想先說明幾件需要注意的事。

首先,空白卡不是所有卡片都可以修改 S0B0 (Sector 0 Block 0) 區塊的製造商資訊(這裡也是 卡號UID 的所在之處),有很多卡片都是直接燒死的,要嘛是 WriteOnce,要嘛就直接不給寫。要購買卡片時要先注意那張卡片到底可不可以修改,一般正常S50標準卡都是不可寫的,UID不給修改。

其次就是頻率一定要對得到。卡片也有頻率的,隨便亂買門禁空白卡,可能會買到 125KHz 的低頻卡,那就不合目前的模組的頻率,也比較少見。目前悠遊卡、一卡通普遍都是採用 13.56 MHz 的卡片。

最後,卡片也是大有學問的,每種卡都有使用說明書 DataSheet,扇區的數量那些都不一定,而且UID不僅僅是4個Byte,也許是7個Byte,甚至是10個。至於前面S0B0區呢,配置也是有一定規章的,這篇文章我就不講那麼詳細了。反正沒有要到完全複製卡的程度,講那麼多卡區的沒什麼意思。

差不多就這樣,日後想到新的再補充。

By Weil Jimmer


This entry was posted in Arduino, C, General, Experience, Privacy By Weil Jimmer.

Grub 加入 VeraCrypt 開機選單 多系統

No Comments
-
更新於 2017-08-14 21:08:02

好久沒發文了,今天寫篇沒有程度的文章做個小筆記。

最近和同學聊天,正好扯到了加密硬碟,突然想到我自己的電腦 Win10 也是屬於未加密的一類,所以乾脆就用 VeraCrypt加密掉好了,可惜卻出現一個問題就是開機選單只能選單一系統,其他硬碟的系統好像偵測不到一樣,變成灰色的選項不給選。所以只好事後補修這個問題啦。

先開機進入BIOS重新選擇開機選單,開到特定Linux,安裝Grub,

apt-get install grub-efi

網路上似乎很少人講這個東西。即使有 issue 被提交了,但下面也沒啥人回應。

首先,打開目標文件:/boot/grub/grub.cfg,搜尋 menuentry 'Windows Boot Manager (on /dev/sdb1)'

然後複製整個 menuentry,在這邊直接修改是沒什麼效果的,到時候Update掉又被OverWritten,打開:/etc/grub.d/40_custom,

在下面直接加入整個 menuentry。以下是示範:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry 'Windows 10 VeraCrypt (on /dev/sdb1)' --class windows --class os $menuentry_id_option 'osprober-efi-B673-5372' {
	insmod part_gpt
	insmod fat
	set root='hd1,gpt1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1  B673-5372
	else
	  search --no-floppy --fs-uuid --set=root B673-5372
	fi
	chainloader /EFI/VeraCrypt/DcsBoot.efi
}

直接改掉 chainloader 的資訊,對應到 /EFI/VeraCrypt/DcsBoot.efi 即可。最後直接輸入指令:

update-grub

這樣就大功告成了。

By Weil Jimmer


This entry was posted in Bash, General, Experience, Note By Weil Jimmer.

最前頁 上一頁  1 2 3 4 5 6 7 8 9 10 11 /11 頁)下一頁 最終頁

Visitor Count

pop
nonenonenone

Note

台灣假新聞橫行,沒一家霉體能信的,網軍側翼到處洗風向,堪憂。

政府根本不怕你拿法律當武器,只怕你放下法律拿起武器

支持網路中立性.
Support Net Neutrality.

飽暖思淫欲,
饑寒起盜心。

支持臺灣實施無條件基本收入

歡迎前來本站。

Words Quiz


Search

Music

Blogging Journey

4501days

since our first blog post.

The strong do what they can and the weak suffer what they must.

Privacy is your right and ability to be yourself and express yourself without the fear that someone is looking over your shoulder and that you might be punished for being yourself, whatever that may be.

It is quality rather than quantity that matters.

I WANT Internet Freedom.

Reality made most of people lost their childishness.

Justice,Freedom,Knowledge.

Without music life would be a mistake.

Support/Donate

This site also need a little money to maintain operations, not entirely without any cost in the Internet. Your donations will be the best support and power of the site.
MethodBitcoin Address
bitcoin1gtuwCjjVVrNUHPGvW6nsuWGxSwygUv4x
buymeacoffee
Register in linode via invitation link and stay active for three months.Linode

Support The Zeitgeist Movement

The Zeitgeist Movement

The Lie We Live

The Lie We Live

The Questions We Never Ask

The Questions We Never Ask

Man

Man

THE EMPLOYMENT

Man

In The Fall

In The Fall

Facebook is EATING the Internet

Facebook

Categories

Android (7)

Announcement (4)

Arduino (2)

Bash (2)

C (3)

C# (5)

C++ (1)

Experience (52)

Flash (2)

Free (13)

Functions (36)

Games (13)

General (61)

Git (2)

HTML (7)

Java (13)

JS (7)

Mood (24)

NAS (2)

Note (33)

Office (1)

OpenWrt (6)

PHP (9)

Privacy (4)

Product (12)

Python (4)

Software (11)

The Internet (26)

Tools (16)

VB.NET (8)

WebHosting (7)

Wi-Fi (5)

XML (4)