Proxmark3 Automation and Chameleon Mini CLI client

miband nfc with proxmark3 and chameleon mini

proxmark3chameleon mini 是兩個常見的 研究 mifare tag 的工具,雖然 mifare 已經被研究十幾年了,但現在還是一直被大量的使用著,像是門禁卡等等的,這裡就不講 mifare 內部的資料結構以及缺失,想研究的話可以參考這篇 Legitimate-reader-only attack on MIFARE Classic
由於最近幾年小米手環 nfc 版本比較容易入手以及使用,裡面其實可以模擬 5 張 mifare 卡,使用上相當方便。曾經有一陣子搭輕軌捷運上下班進出社區是可以只靠手環就可以的。

而根據使用的情景,可能需要找出 mifare 裡的 keys,這時候 proxmark3 與 chameleon mini 就可以派上用場。本來使用這兩個工具上都是可以的,不過覺得步驟有點繁瑣,有些也沒有 release 版本了,所以這次好好研究如何自動化甚至可以在 android 手機上直接使用。

Invoke Method with JDWP

smali breakpoints in Android-Studio

在之前的 smalidea debugging 已經分享過如何在 Android Studio 裡設定好 breakpoints 並且可以看到 registers 的值。而在這次的例子中,需要繼續利用這項工具,還得要自行執行不是原本 smali 上面的程式碼,最後將這個步驟自動化來達成需求。

這次就來利用 JDWP 來執行不在 apk 上面的 code 吧

tetris3d with plotly

魔術磁力方塊好好玩

魔術磁力方塊是之前買給小朋友玩的玩具,裡面有個組好的 3x3 積木,是用七種不同顏色立體方塊組合成的,可以利用磁性吸來吸去,做出不同的造型。除此之外還有發一副牌,上面有 108 種只有外型沒有顏色的題目,難度分成兩顆至四顆星,可以挑戰看看怎麼利用指定的方塊堆成牌面上的形狀。

四顆星的題目雖然只有八張,但有些真的有點難啊!

AliasDict, a python dict for alias resolver

用 dict 存 alias 相當直覺

在做 NN optimization 的時候,會常常用到 alias,像是有些 operations 例如 RELU,是直接 execute in place 的,這時候原本的表達格式是不同的 tensors 的話,就可以將 output tensor 視為 input tensor 的一個 alias,名字不同但其實是同一塊這樣。

使用 python 的話,會很直覺地將這個關係用 dict 存起來,到時候就可以查詢這個 tensor name,是不是另一個的 alias。剛開始是很美好,但是實際用起來需要考慮到不少事情。

像是萬一是多層的關係呢?所以需要 recursive 的去尋找到最後的 alias。那萬一 recursive 過程中有 circular reference 了呢?這樣會一直跑不完,所以還需要有檢查並指示出這種錯誤。其實為了這個另外寫了不少東西。

因此在這次有機會重新實做的時候,

設計了一個 AliasDict class 封裝了上面這些邏輯

hashcat sha256 from mac address

只給一天期限的憑證檔案

去年幫忙整合公司一個 demo app 的時候,因為是會留給客戶測試的,所以要求需要加上認證的程序。這個認證 library 是用 C++ 實做的,裡面會檢查特地目錄下有沒有自己格式的憑證,裡面有加上日期以及電腦的 mac address 的檢查,都符合的話才能繼續使用。
當然透過這個機制,就可以控制留在客戶那邊的 demo app 時候到了,或是換台電腦也就不能使用了。不過就內部開發來說,也得需要申請這個憑證,才能測試看看功能是不是正常。

今年自己也做了一個 demo app,因為也是要給客戶裝起來試用的,所以也一樣要加上認證程序,這個沒有問題,就一樣加上就好,不過在要測試的時候發現憑證過期了。
於是跟之前一樣看看希望再給個新的憑證,給是給了但是期限只到隔天,說需要的話要寄信跟部門主管申請才行。

申請就申請,但是這樣好像有點麻煩啊,有沒有什麼辦法繞過呢?

python rich with asyncio

python rich 畫圖很漂亮

console.print() 可以很容易地取代原本的 print() 印出很漂亮有顏色的字。而要做成全終端機視窗的 TUI 程式,也可以另外使用 rich.live.Live,再封裝原本的 renderable 物件會自行更新畫面。這個功能是 Live 另外開一個 thread 在後面跑的。

不過新的 python 就有了 asyncio,不管是拿來收 stdio 的輸入或是用網路連接獲取資料都相當方便,但翻遍了文件查詢了網頁似乎都沒有看到 asyncio 怎麼跟 rich 合作。

那麼能不能也基於 asyncio 的機制上用 rich.live.Live 呢?

smalidea remote debugging with android-studio

想要知道某個 apk 要怎麼連線

許多 apk 也都是用網路獲取服務以及下載資訊,不過都是 https 連線相當地安全。即使是用 tcpdump 等等工具,其實都只會看到加密過的資料在傳來傳去,不知道裡面參數到底是什麼。

那麼有沒有辦法知道這個 apk 是如何發起連線的呢?

WFH google form punch with selenium

公司的 WHF 打卡表單

目前因為三級防疫,所以公司是採取分流上班的,分成兩組 A, B,隔天輪流進公司以及 WFH。
由於勞基法需要有上下班紀錄,所以 WFH 的那天需要線上打卡做紀錄。這個線上打卡的機制是透過 Google 表單 來實做的,就時間到的時候點這個表單的網址,上面填寫以及點選內容然後送出即可。

可是明明都需要用 google 帳號登入了,為什麼表單還得自行填名字呢?

PS4 DQ11S automation with chiaki and uiautomator2

週末宅在家不能出門不知道要幹嘛,只好把一陣子沒碰的 勇者鬥惡龍 11S 拿出來繼續冒險吧!

防疫期間就是要來玩遊戲啊,不然要做什麼?

但玩一玩竟然也跑去寫自動化賭場以及打怪程式了...不用買特殊搖桿的喔!!