pretty code

2020年5月29日 星期五

一個巨星的養成過程

抱怨文

從前有一台 10 吋的機器,明明可以成為貫通六魄的天醒者,不料卻被萬惡山海樓的銷魂鎖魄所禁制,為了幫助解開封印,不浪費這台機器的絕頂天資,底下是我嘗試的過程記錄,希望有一天夢想終能成真。

(上述敘事如有巧合,我絕不會承認是看書時,被一旁老婆的追劇打擾,而佔據了我腦容量的無用資訊。女人都希望有一間更衣室,男人也需要一間安靜的書房呀!好好的詩海石硯台,被搞成什麼樣子?真是無奈…)

前期提要

這台機器是某台機器的攣生兄弟,硬體規格幾乎一樣,我們就稱原機器為 S 君,這台機器為 R 君。

假設

為了繼續做實驗,得先做一些假設,不然實在無法繼續。

1. 機器 Diagnose Mode 仍然存在。
2. XDA 上的破解資訊為真,且 R 君並未更動。

初始情況

焊了電阻後,感覺機器有嘗試進入診斷模式,但並未成功,照 XDA 上面的資訊是電阻阻值不對所致。

拿不要的線剪斷加工

按下特殊鍵無法進入 Diagnose Mode 的關機畫面

實驗步驟

01. 量測電阻,確認是否為 7.5K?
      第一顆電阻為 7.43K 左右,不到 7.5K,焊了第二顆 7.6K 左右的電阻,結果一樣。
      a. 一定要剛好 7.5K ?
       
          05/29 應該不是,只要大於就好?畢竟量測本就會有誤差。

      b. 電阻側可量到阻值無誤,改量測 USB 接口側,確認有量到阻值。
       
          05/29 USB 線應該有問題,為何會有留 ID 的線?且與外殼金屬相通,GND 反而沒有?等轉接板來驗證。
           
           教訓:1. 以後有需要買東西就買,上次沒有買轉接板是錯的。
                       2. 使用烙鐵要小心。
                       3. 焊台可以固定零件,幫助作業。

          05/31 USB 線確定有問題,拆了原本焊的線,原以為 ID 的線被直接焊到外殼沒錯,不得不稱讚一下 PowerSync 這家公司,USB 線的頭做得還不錯,不會被我一拆就壞,5 個 pin 在接頭也分前後分開,方便我焊接作業。

就是這條線害我誤會

傳說中的 Diagnose Mode

文組的焊接功夫很差XD

插上 R 君工作的樣子

      c. 不能用剪斷的 USB 線,且另一頭要插上電腦?
      d. R 君 USB 介面過鬆,導致接觸不良?

02. 按下 Home Button 後,開啟 Power Button,led 會閃爍 23 次,嘗試在每一次閃爍後及每一次閃爍時,釋放 Home Button,共需嘗試 23 x 2 = 46 次。

03. 再把 XDA 討論文章從頭到尾看一次,看是否有遺漏的地方?

進入 Diagnose Mode 後待辦事項

01. 確定 Linux 可以認到 modern,可以用 Windows 嗎?
02. 是否能 telnet 進去?
     
       05/31 Windows 會長出 COM Port,Linux 則是 /dev/ttyACM0。
                 Windows 還不知怎麼用 putty 登入? 靠,要用 Serial 模式。
                  Linux 也不會用 telnet,但可以用 sudo screen /dev/ttyACM0 登入。

 手動嘗試密碼中(Linux)

 手動嘗試密碼中(Windows)

03. 密碼嘗試
      a. 嘗試一般人最會亂取的 password。
      b. 使用里長伯資訊,感覺 R 君的工程師應該偏年輕,搞不好有人喜歡里長伯,以她資訊當密碼?

          05/31 試了幾組常用密碼,看來都不是。還好 Diagnose Mode 也會對電池充電,不怕沒電。

          05/31 找 Github 是否有現成暴力工具,否則自己寫。為了維修工程師方便,個人猜測密碼應該在 6 ~ 12 字元間,先不包括特殊字元?

          05/31 晚上無聊算了一下,一天只算上班時間,帳號用 root,5 秒試一次密碼,包含特殊字元、英數字,只取 6 碼,粗略算了一下,要花 20 萬年才能嘗試完一遍,看來還是要用字典法等機制才行。

          06/01 感謝 HappyZ dpt-tools project,抄了幾個我要的函數,工具 ready,自動登入中。

自動執行,該做的都做了,不行就是天意XD

          06/02 程式需要修改才行,有時候讀 COM Port 就是要很久,time out 要拉大,否則會有密碼沒有嘗試過。

          06/02 欲速則不達!抄來的程式還是要修改一下,另外 Python 讀進來的還有換行字元,昨天都白做工了。

          06/02 新版程式 ready,理論上還要加上 Log,但在我肉眼觀察 100 組後,看起來沒啥問題,反正今天就當 Debug,不求進度,下班前再決定,畢竟現在一分鐘可能只能輸入 5 組,還是需要偷一點時間,但正確率還是最重要的,快並沒有用。

                     https://github.com/tylpk1216/try-telnet-comport

          06/02 戰績 3016 組。

          06/02 星期五晚上購買的轉接板已到貨,雖然我上星期日已經動手解決了,但看著這精美的板子,真是高第呀。

就跟退卡針差不多大小,一個才 NT $150。

           06/03 一天只能試 3000 組,看來要雙管齊下才行。反正 XDA 有 password 的 hash 值,寫程式來比對?

           06/03 戰績 3000 組。

           06/03 Download Kali Linux ISO, prepare to do hash hack.

           06/04 戰績 2477 組。

           06/04 那就萬事拜託了,我親愛的 "John"。

           06/05 John 當機了,另起爐灶中。

           06/05 Two wordlists, 3 applications. (1 - asc, desc, 2 - asc)

I already do my best to do something.

            06/06 GCP OOM issue, 6.75G RAM, OOM after running 43 minutes (17,xxx passwords).

Write another tool to remove used passwords and go on ?
         
           06/07 Tried many dicts, no result. It's a hard work.

           06/08 Use ?a?a?a?a?a?a, wait 45 years. Try CVE-2017-holes ?


It takes 45 years to only 6 digits password on GCP cheap machine.


           06/09 All dicts are done, no result.
         
           06/10 -1Rr ?1eadmoo?s?d?d?d?d?d (My PC - 1 hours and 20 minutes)
           06/10 -1Rr ?1eadmoo?s?d?d?d?d?d ?d (My PC - 12 hours)
           
           06/11 為了方便整理,將 hashcat 相關獨立出來,這區塊只更新其他嘗試。

           06/15 直接寫信問廠商是否可以花錢買客製化影像檔。
           06/17 廠商回絕,此路不通。
            
           06/18 嘗試使用 stackoverflow 方法。

           06/22 從 Sony code 來看,login 應該是在 busybox-1.19.3 裡面處理的。


裡面使用 strncpy 應該沒有 stackoverflow 問題

           06/22 目前看起來可以嘗試的方向,我也不知道對不對?也是我最後一步了。


Hashcat 相關記錄

06/09 All dicts are done, no result.

PC - 1
06/10 -1Rr ?1eadmoo?s?d?d?d?d?d - Done
06/10 -1Rr ?1eadmoo?s?d?d?d?d?d?d - Done

PC - 2
06/12 ?a?a?a?a - Done
06/12 ?a?a?a?a?a - Done
06/15 rockyou.txt + rules\best64.rule - Done
06/15 ~@*(-./012asdfghjkleiorntuy,?1AERST,?2?2?1?1?1?1 - Done
06/16 ~@*(-./012asdfghjkleiorntuy,?1AERST,?2?2?1?1?1?1?1 - Done

GCP - image3
06/10 -1Ss ?1ony?s?d?d?d?d?d - Done
06/10 -1Ss ?1ony?s?d?d?d?d?d?d - Done
06/10 -1Ss ?1ony?s?d?d?d?d?d?d?d - Done
06/10 -1Ss ?1ony?s?d?d?d?d?d?d?d?d - Aborted (too many days)
06/18 Close machine.

GCP - rockyou-rule
06/11 ?d?d?d?d?d - Done
06/11 ?d?d?d?d?d?d - Done
06/11 ?d?d?d?d?d?d?d - Done
06/11 ?d?d?d?d?d?d?d?d - Done
06/11 ?l?l?l?l - Done
06/11 ?l?l?l?l?l - Done
06/11 ?l?l?l?l?l?l - Done
06/11 ?l?l?l?l?l?l?l - Aborted (too many days)
06/11 ?l?l?l?l?l?l?l?l - Aborted (too many days)
06/18 ~@*(-./012asdfghjkleiorntuy,?1AERST,?2?2?1?1?1?1?1?1

上面這個是我最後一個嘗試,跑到免費額度用完為止。

6年呀,小孩都可以上幼稚園了,況且這還只是一部分常用字元,還不保證密碼就在裡面

07/02 有時候,放棄也是一種勇氣!即使 GCP 免費額度不用真的掏錢出來,但將快 200 美金花在不可能的任務上也是一種浪費。這段期間總共花費了 NT $5,520.59,都可以買一支海信 A5 電子紙手機了!壯士斷腕,猶未晚也。


Python Code Example

from passlib.hash import sha512_crypt

password = 'hashcat'
salt = '52450745'

hash = sha512_crypt.encrypt(password, salt=salt, rounds=5000)

print('ans', '$6$52450745$k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX/')
print('res', hash)

最終七傷拳大法

如果上述都不成功,把之前下載的 R 君的 PKG 檔案的簽名拿出來,放在 HappyZ 的 PKG 檔,反正最多就是變磚!(後來想想,這招應該不起作用才對,翻一下密碼學的書好了?)

06/02 雖然我沒試,但應該是不行,只是讓檢查簽名那關通過,解密出來的資料還是不會正確。

2020年5月27日 星期三

Windows DLL 相關名詞備忘

很久沒有寫 DLL 了,剛吃飯時跟同事聊到 Windows DLL,有些討論雖然意思對,但名詞錯,顯得有些不專業,趕快 Google 惡補一下。


2020/05/28 更新

早上趁著拍片時翻了一下《程式設計師的自我修養:連結、載入、程式庫》,因為太趕,沒有看到作者有特別著墨這些名詞。

圖片的中文翻譯有點差,還是來看看英文版好了。


2020/06/04 更新

A dynamic-link library (DLL) is a module that contains functions and data that can be used by another module (application or DLL).

DLL 的函數有分內部及外部 (定義給其他 module) 用。
因為 DLL 內容會被載入到呼叫者的記憶體空間,故那些內部使用的函數是無法保護的。
所有的呼叫者會共享 DLL Code,故可以減少系統記憶體使用。

Types of Dynamic Linking

1. In load-time dynamic linking
    呼叫者用起來就像自己的 local functions,故呼叫者在編譯程式時,要拿到 .h 和 .lib 兩個檔案。

2. In run-time dynamic linking 
    呼叫者使用 LoadLibrary 和 GetProcAddress 來載入 DLL 以及使用函數 (function pointers),故只需要 DLL 檔。

DLL 比 static linking 優秀的地方

只要 DLL 的 function arguments, calling conventions, return values 沒有改變,呼叫者不需要重新編譯 (In load-time dynamic linking 也是嗎?)

百曉生兵器譜排名第一

早上整理資料時,無意間發現之前考試的成績單,那或許是我最好的一次考試結果吧?

撇開 Coding 不說,那段日子應該也是人生體驗心流最多的時期。

雖然最想上的台電考試沒上,但也證明了我那段期間的努力,凡走過必留下痕跡。

Windows 工作排程器設定注意事項

一直以來,設定工作排程時,都是使用 "不論使用者登入與否均執行" 這個選項。

最近我們開始要定期更換密碼,上禮拜換完密碼後,所有排程都無法正常工作,檢查之後才發現,原來更改密碼後也要一併再次輸入密碼,否則工作排程便會失效。

每次都要再次輸入密碼似乎有點麻煩,來研究一下子選項 "不要儲存密碼。工作將只有本機資源的存取權" 好了(A處)。

原本以為所有跟網路有關的都無法使用!經實測後發現只有存取網路磁碟機會受到影響,至少可以讓我大部分的排程都不用再輸入密碼了。

紀錄一下避免忘記。

2020年5月25日 星期一

捐款之路困難重重

忘記是第幾次找資料找到 Roderick W. Smith 的網站了,上星期查某一個主題時,看到版主提到他會將 Donate 給 rEFind 的相關捐款再加碼,希望可以不要讓美國的小朋友挨餓。當下就覺得這個活動很有意義,今天中午想要貢獻微薄之力 US 100 時,沒想到可惡的 PayPal 不給過,跳出一個又一個的驗證視窗就算了,最後還要輸入地址!

拜託,就只是捐個款還要身家調查喔!害我的好意放水流。改天再來想辦法如何解決。

2020年5月22日 星期五

Some hints about diagnose mode

The data is from https://forum.xda-developers.com/general/help/idea-to-root-sonys-e-reader-dpt-rp1-t3654725/page8

Thanks the author - shankerzhiwu

About the OTG cable, I have no shortcut available. Pinout of micro usb plugs can be found on https://en.wikipedia.org/wiki/USB_(Physical)#Pinouts . The 7.87 k resistor should be soldered between ID(PIN 4) and GND(PIN 5). Alternately, you can also use a 7.5k resistor. Since such resistor value is beyond OTG standard, you have to do the solder work. For simplicity, a breakout board can be used like http://www.digikey.com/product-detai...192-ND/5673778 . Moreover, you can also choose to only solder the resistor itself without a USB cable. If so, after the gray rect is shown on the screen, the OTG plug can be safely disconnected and a normal USB to micro USB cable can be used to connect the DPT to your computer.

The detailed steps for entering diagnose mode are :

1. Power off your DPT.
2. Connect the OTG cable.
2. Press and hold the Home button.
3. With the Home button pressed, press and release the Power button.
4. Continue holding the Home button. See if anything is shown on the screen.
4.a. If "Welcome" screen shows, which means that the Home button is not detected pressed when booting, go back to step 1.
4.b. If nothing is shown on the screen and the power LED is also not flashing, which means that you are too nervous to trigger the power button -- your DPT is not powered on at all, go back to step 3.
4.c. if nothing is shown on the screen and the power LED keeps flashing, then the Home button can be released.
5. Wait for about 12 seconds. See if anything is shown on the screen.
5.a. If the screen flashes blank and the power LED stops flashing and turns off, which means that the id resistor is not soldered well (ill-connected or wrong value)., check your OTG cable and go back to step 2.
5.b. if a gray rect is shown on the screen, the device is now in diagnose mode
6. If a USB cable is not soldered with the micro USB plug, you can now unplug it and use a normal micro USB cable to connect the DPT with your computer.
7. A USB modem device should now be detected on the computer. Use a serial terminal software to access the diagnose tty.

Convert MBR to GPT

I am not sure why my new clone disk is MBR, not GPT. I want to change it.
After searching internet, I found we can use "MBR2GT.exe" to do this.

The steps below is how to do it.

1. Open PowerShell Window.
2. Type "Get-Disk" command to check your disk number.
3. Open Dos Window with administrator privilege.
4. Type "MBR2GPT.EXE /convert /disk:2 /logs:D:\ /allowFullOS" to convert disk.

You could also refer to the link below to get detail information.
https://docs.microsoft.com/en-us/windows/deployment/mbr-to-gpt#summary

2020年5月21日 星期四

long long variable in C.

以前查資料發現,Windows 上的 gcc 底層還是呼叫 OS Runtime,故使用 "%ll" 會有問題。

最近無意間發現,這個限制已經是以前的事了,至少下列 2 種環境,測試起來都正常。

TDM-GCC-64 : 9.2.0
Visual Studio 2015

Google 雖然強大,但有時找到的都是過時資訊,畢竟時空背景都已經和當初不同。

故易經曰:若履虎尾,終之吉。

The Delay in UEFI Shell Entry

I did a lot of tests in past two weeks. Due to our tool issue, we must reboot system after testing one bit. The system took 24 seconds to reboot, but our one bit test just took 55 ~ 56 seconds. This is a heavy wasting for completing a test. I cannot do any improvements for this issue because I am not the owner of this function. However, I can do another way to decrease the boot time.

In original UEFI Shell, it waits 5 seconds to prevent from user wants to stop launching the "startup.nsh". If we can decrease this time, it can also reduce our test time.

The UEFI Shell Entry is in "Root\ShellPkg\Application\Shell\Shell.c". We can search the key word "UefiMain" and we can find the setting is in this "ProcessCommandLine" function. The setting is stored in the "ShellInfoObject.ShellInitSettings.Delay" variable.

After modifying this variable, we can just wait 1 second, this can decrease 4 seconds in our one bit test time. It is not bad. Just for fun.


2020/05/21 Update

I am a stupid man. We can use "argv" to set up this delay time. This information is described in "3.2 Invocation" of "UEFI_Shell Specification". We can pass "-delay n" to UEFI Shell.

I thought one question when I ate lunch. How do I pass "-delay n" in boot time?  I think this is a good question. I don't know right now !

2020年5月20日 星期三

蘇慧倫《面面》

認識蘇慧倫這位歌手應該是我國中的時候吧!記得那時正值畢業季,同學正在傳閱畢業紀念冊,突然有一位同學跑過來問我有沒有看到蘇慧倫的照片,一問之下才知道他貼在紀念冊上的蘇慧倫照片掉了,也因為這樣才知道這位歌手。

高中時幾乎都在鬼混,故沒有甚麼印象有同學討論她,也可能是因為同學都是女生居多,自古文人相輕,女人特別喜歡為難女人,故不容易聽到女同學討論吧!我猜?

到了大學以後,我中南部的女同學就很喜歡她,可能也跟那時候一連出了好幾張膾炙人口的專輯有關,每次呼朋引伴去 KTV 唱歌,《鴨子》、《傻瓜》那些歌都是必點歌曲。

最近 YouTube 突然又自動跳出了好幾首蘇慧倫《面面》專輯的歌曲,每首歌的曲風都是我喜歡的,算一算至少有七首我都喜歡,高達 70% 的比例不支持一下怎麼可以,於是我的收藏又多了一樣寶貝。

看書開心,聽好聽的音樂也開心,但是 mooInk Pro 破解之路不順就讓人不開心 ...

DDR4 Memory module interface type 之俄羅斯記憶法

測試資料中,常常需要區分 DRAM DIMM 種類,可惜不是每筆資料在測試時都有寫上適當描述,故需先查模組型號,接著再 Google SPD 資料,最後才是翻找 Spec,由於不是做這個的,理所當然看完後也很快忘記,昨天洗澡時想到一個不錯的俄羅斯記憶法。

Memory module interface type 是定義在 SPD 規格書的 Byte3:

01 - RDIMM
02 - UDIMM
03 - SO-DIMM
04 - LRDIMM

反正目前還沒有 LRDIMM 測試資料,故先不管它,剩下的 3 種 DIMM 的每一個英文字母開頭剛好就是俄羅斯的英文 Russia,這樣就不會忘記了。

2020年5月19日 星期二

網路時代之電子費用帳單

這裡的電子費用帳單,指的不是傳統帳單電子化,而是新興的網路服務所帶來的費用。

以我個人為例,我目前一年要繳的帳單就有下列幾種:
1. Amazon Domain - US 0.6 / month + US 12 / year,如果有查詢流量另計。
2. Google Drive - NT 900 / year
3. 愛奇藝 - 趁著大特價入手,大概都是 NT 1,000 / year
4. Youtube - NT 179 / month
5. Whocall - NT 300 / year

曾經用過,但不是常態:
1. PureVPN - US 10.95 / month,這家要注意,購買時沒有提到會自動續訂,解約時要用線上客服取消,並且一整個囉嗦。
2. KKBOX + KKTV - NT 168 / month
3. KKBOX - NT 180 / month,直接從 Google 商店購買,我猜未含 KKTV?

只算固定有持續使用的,一個月費用就要差不多 NT 410,積少成多也甚是可觀。

2020年5月17日 星期日

108年度綜合所得稅申報之不休假獎金

今天在下載所得資料時,發現記帳的金額比政府資料還多,差了幾千塊,由於我的薪資所得很簡單,沒甚麼奇奇怪怪的 Bonus,不像外商,會突然發個三五十萬,故不可能是我記帳資料有誤,後來看了我另一個網路 EXCEL 檔後發現,EXCEL 的金額也是對的,review 了分類帳後,確定是特休未修完的金額換算。那問題來了,為什麼此筆金額免計入薪資所得?我想還是先從相關法條看起。

根據《勞動基準法》第 38 條規定:

第 38 條
勞工在同一雇主或事業單位,繼續工作滿一定期間者,應依下列規定給予
特別休假:
一、六個月以上一年未滿者,三日。
二、一年以上二年未滿者,七日。
三、二年以上三年未滿者,十日。
四、三年以上五年未滿者,每年十四日。
五、五年以上十年未滿者,每年十五日。
六、十年以上者,每一年加給一日,加至三十日為止。
前項之特別休假期日,由勞工排定之。但雇主基於企業經營上之急迫需求
或勞工因個人因素,得與他方協商調整。
雇主應於勞工符合第一項所定之特別休假條件時,告知勞工依前二項規定
排定特別休假。
勞工之特別休假,因年度終結或契約終止而未休之日數,雇主應發給工資
。但年度終結未休之日數,經勞雇雙方協商遞延至次一年度實施者,於次
一年度終結或契約終止仍未休之日數,雇主應發給工資。
雇主應將勞工每年特別休假之期日及未休之日數所發給之工資數額,記載
於第二十三條所定之勞工工資清冊,並每年定期將其內容以書面通知勞工
。
勞工依本條主張權利時,雇主如認為其權利不存在,應負舉證責任。

嗯,很好完全沒提到,我想應該要從稅法找起,好累直接 Google 吧。

財政部高雄國稅局在 2019/12/30 有一則關於不休假獎金的新聞稿:「依據勞動基準法規定,凡是勞工在年度終結或契約終止時未休完特別休假之所有日數,雇主應發給工資,該不休假獎金屬加班費的一種依據所得稅法第14條第1項第3類薪資所得第4款但書規定,為雇主之目的,執行職務而支領之加班費不超過規定標準者,免計入薪資所得課稅。財政部74年5月29日台財稅第16713號函釋所謂規定標準係依勞動基準法第24條規定「延長工作時間之工資」及第32條規定「每月平日延長工作總時數」限度內支領之加班費。機關、團體、公私營事業員工因未休完特別休假日折發之不休假加班費,其金額符合前列標準者,免計入薪資所得課稅。」

2020年5月16日 星期六

The format of xxprintf function in C99

前幾天為了打印一些數值在 Log,使用了 "%02.2f",不料結果卻不符預期,還是回到 Spec 一探究竟。

這個說明是在 7.21.6 Formatted input/output functions 的 7.21.6.1 The fprintf function

The description of format

% flags field-width precision length specifier(d, f, x ...)
(except specifier, all of them are optional)

其中在 0 flag 這一小段中有提到:
For d, i, o, u, x, and X conversions, if a precision is specified, the 0 flag is ignored. For other conversions, the behavior is undefined.

我原本以為是 0 不能與 precision 共用,但我記得我 10 幾年前剛學 C 語言時,有小數點的還是可以漂亮對齊的,難道是我記錯了?

後來嘗試幾種排列組合,終於可以對齊了,嘗試的結果 field-width 應該是有包含小數點及小數點位數?

明明有 Spec 還是看不懂,我的英文真的有待加強。


2020/05/17 更新

1. 今天再看了一次 Spec,field-width 提到如果轉換後的 values 有的 characters 比 field-width 少,則補 spaces on the left。
An optional minimum field width. If the converted value has fewer characters than the field width, it is padded with spaces (by default) on the left (or right, if the left adjustment flag, described later, has been given) to the field width. The field width takes the form of an asterisk * (described later) or a nonnegative decimal integer.

2. 我們一般習慣使用 field-width 去指定 int 個數,例如 "%04d",其實也可以用 precision,他就是用來指定最小位數,只是對 int 及 float 有不一樣的用法。
An optional precision that gives the minimum number of digits to appear for the d, i, o, u, x, and X conversions, the number of digits to appear after the decimal-point character for a, A, e, E, f, and F conversions.

2020年5月15日 星期五

Mirror Port Switch GS1200-5

之前利用這一台機器順利的解決公司設備無法上網的問題,今天放假在家,剛好手邊裝置昨天有系統更新,便想利用 Mirror Port 功能幫助抓取系統更新檔以利後續研究,思考了一下,快速地把環境架設起來。

記錄一下 Web 設定,免得之後忘記,以後就固定監控 Port 1。
接著使用 Wireshark 觀察網路封包。不意外的,雖然 API 是走 HTTPS,但下載檔案為了速度的關係,還是走 HTTP,於是便順利的取到 PKG 檔案,雖然應該還是有加密就是。

好了,要出門了,之後再想辦法利用這個檔案。

2020/05/15 更新

https://github.com/janten/dpt-rp1-py  register 使用方式 on Windows 10
1. pip3 install dpt-rp1-py
2. cd C:\Python37\Scripts
3. python dptrp1 --addr xxx register
4. PIN code will show in your mooInkPro screen and input it to console.
5. python dptrp1 --addr xxx list-commands to show commands.

2020/05/16 更新


上面專案貌似是解開 PKG 檔案的 Tool,不過需要一台 Linux 電腦,下載 Ubuntu 20.04 後,使用 USB 開機卻不能使用 Keyboard,後來想到,應該是 Linux 很討厭 UEFI Secure Boot 的緣故,Disable Secure Boot 後便可以順利操作。

執行時會出現驗證失敗,還需要研究一下。

2020/05/17 更新

殘念,這跟我之前試 HappyZ 工具一樣,重點還是在 Key 不一樣,所以使用 octavianx 的工具無法解開我的 PKG 檔,因為那是 DPT 系列的 Key,QQ。

讀墨新式書櫃抓蟲記

趁著今天不用上班還沒出去的時候,記錄一下我在讀墨新式書櫃遇到的問題,並嘗試重現此問題以利後續 Debug。


此問題是當我偶爾進書櫃時,我的書籍總數是錯的,我應該是 423 本,但卻顯示 340 本。

OS: Windows 10 家用版
Chrome: 81.0.4044.138
Edge: 44.18362.449.0

各種 Case 狀況:
1. 使用 Chrome 正常模式,當開啟讀墨首頁時,顯示未登入,使用自動記錄帳密方式登入後,進入書櫃,此時書本數量便會顯示 340 本,登出再登入也是如此。
2. 使用 Chrome 無痕模式,操作同上,進入書櫃顯示 423 本。
3. 使用 Edge,操作同上,進入書櫃顯示 423 本。

目前已知有顯著不同的是:
1. 使用 Chrome 無痕模式正常。
2. 使用 Chrome 正常模式時,如果是有記住登入狀態的,有時正常,有時不正常。
3. 使用 Edge 進入書櫃會先進入到總覽頁面,而 Chrome 則是直接進入到書籍頁面。
4. Chrome 正常模式登出再登入時,如果進入書櫃也是先進到總覽頁面,此時書籍總數便是對的。

另外,library_items 這支API 似乎是回傳書籍數量,但為什麼是 426 本呢?個人猜測是加上雜誌 3 本,只是也說不太通,因為我還有 1 本有聲書就是了。

2020/05/18 更新

進入書櫃頁面狀態,看起來跟 Bug 無關!那是因為 Readmoo 會記住這次的選擇,如果這次選擇雜誌,那下次進來就會先到雜誌頁面。

2020年5月13日 星期三

Android Screen Off App 原理

查了一下,目前 Android 9 大概有以下幾種作法:

1. PowerManager.goToSleep()
這個 API 需要 android.permission.DEVICE_POWER 權限,這個需要系統級別 App 才行。

2. DevicePolicyManager.lockNow()
這個需要給它裝置管理員權限,且無法再使用指紋辨識解鎖,只能使用你設定的解鎖方式解鎖。另外如果是滑動解鎖或是無解鎖的選項,此 API 無法使用。

3. 改變 Settings.System.SCREEN_OFF_TIMEOUT
這個需要 android.permission.WRITE_SETTINGS 權限,並要透過 Settings.ACTION_MANAGE_WRITE_SETTINGS 此方式取得,或是直接去應用程式資訊,給予 App 修改系統設定權限。另外,實測最少還是要 15 秒,即使你傳 1000 毫秒進去,一樣需要 15 秒才能進入睡眠,但指紋辨識是可以解鎖的。

結論要快速用 2,要方便用 3,不怕漏洞的用 1。

2020/05/16 更新

方法 2 看起來跟 OS 版本有關,回過頭使用 Android 6.0,使用指紋也可以順利解鎖。

2020年5月6日 星期三

EPUB META-INF\container.xhtml 檔案初探

以前轉電子書時,書名都固定去 OEBPS\content.opf  檔案中找尋書名 <dc:title>

最近整理了一下,才知道應該要從 META-INF\container.xhtml 這支檔案裡面的 <rootfiles> 找到該描述檔的檔名與位置。

目前我知道的檔名就有 3 種例子:
OEBPS\content.opf
OEBPS\package.opf
item\standard.opf

難怪之前 KepubifyKEPUB 常會報錯,那是因為程式找不到 OPF 檔的緣故。

2020年5月2日 星期六

Android 手機購買記錄

2010/xx/xx LG Optimus Chic E720 (搭配遠傳費率 0 元)
2012/xx/xx LG E730
2014/02/xx Acer Liquid E2
2016/06/xx Acer Z530
2018/02/xx HTC One X10 (4,800)
2020/04/30 HTC Desire 19s (5,100)
2022/05/13 SHARP AQUOS wish (6,390)
2024/07/01 Google Pixel 8a (16,490 + 999 + 990)

挑選手機原則:

1. 空機 5000 左右
2. 搭配正常費率續約則是不超過 3000

2024/10/11 更新

超過一萬元的手機拍照還是比較好,要記錄事情時比較方便。

以後換手機目標不超過 2 萬元,除非是電子紙手機才允許超過上限。

不能比 Pixel 8a 重,尺寸也不能超過它。

Pixel 8a 規格

152.1 公釐 (高) x 72.7 公釐 (寬) x 8.9 公釐 (厚)
189 克

Pixel 8a 保護殼

長度:156.7 公釐 (6.2 吋)
寬度:77.3 公釐 (3 吋)
高度:11.3 公釐 (0.4 吋)
重量:29.4 克 (1 盎司)