BS再編でトバッチリ、バイナリとにらめっこ(4)

$ cmp -l usb-px4.ko usb-px4.ko.20180522 | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'

000484D0 60 00
000484D1 0B B4
000484D2 B7 B4
000484E0 F2 70
000484E1 40 44
000484E8 60 00
000484E9 0B B4
000484EA B7 B4
000484F8 F2 70
000484F9 40 44
00049430 07 03
00049434 01 00
00049438 07 03
0004943C 02 00

$ md5sum usb-px4.ko
205ea5d0a9100c1193cbd845bde8125f  usb-px4.ko

BS再編でトバッチリ、バイナリとにらめっこ(3)

$ cmp -l usb-px4.ko usb-px4.ko.20180508 | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'
00048500 88 00
00048501 75 B4
00048502 B6 B4
00048510 D2 71
00048518 50 00
00048519 88 B4
0004851A B3 B4
00048528 32 72
00049440 06 03
00049444 02 01
00049448 01 03

$ md5sum usb-px4.ko
b12c9eedc8de63c89eb7fc487b31902d  usb-px4.ko

BS再編でトバッチリ、バイナリとにらめっこ(2)

どうやらPLEX配布のドライバーにバージョン違いがあるらしい。気持ち悪いので調べてみた。ダウンロードしてみたところ、コンパイル済みのtty_Virtual.koとusb-px4.koがzipで固めてあるだけだった。以前はrecpt1も同梱だった気がする。さっそくハッシュをとってみる。

$ md5sum usb-px4.ko 
e481c5ad4f0e085c23f19d968d461655  usb-px4.ko

違いますねえ。ファイルサイズも違う。なにやってんだろ。

$ ls -l usb-px4.ko
 -rw-rw-r-- 1 foo foo 7838824 Dec 22 14:03 usb-px4.ko
$ ls -l ../Linux_Driver/Linux_Driver/usb-px4.ko
 -rw-rw-r-- 1 foo foo 7387804 Sep 14  2017 ~/somewhere/usb-px4.ko

.dataセクションも違います。オフセットもアライメントもサイズも。

  [20] .data             PROGBITS         0000000000000000  00049940
       0000000000015d40  0000000000000000  WA       0     0     32

しかし、場所が変わるだけで要領は同じ。これだと掲示板の情報と一致する。そもそも、手元のバイナリを覗いて様子が違うから自力で解決したのに。バージョン違いとは...

$ cmp -l usb-px4.ko usb-px4_20180510.ko | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'
00049C88 50 78
00049C89 88 F2
00049C8A B3 B2
00049C98 31 12
00049E68 60 50
00049E69 0B 88
00049E6A B7 B3
00049E78 F2 31
0004ABF8 01 00
0004ABFC 01 02
0004ACA0 07 01

改造後のハッシュ。

$ md5sum usb-px4_20180510.ko
397cdc7a9f3ddaa5cec9f3baad382297  usb-px4_20180510.ko

ん、待てよ。ワシのんCentOS 6.9やん。関係ないわ。テストなんかせんでよかった。

BS再編でトバッチリ、バイナリとにらめっこ

4/16のBSジャパンのトランスポンダ移動は無視してたんだが、今回5/8のBSプレミアムは放ってはおけない。トラポン移動は今後も続くらしいが、ばっちり分かったので心配はないぞっと。

PLEXで配布してあるCentOS用のモジュール(usb-px4.ko)を改造する。

[root@dtvserver ~]# md5sum Linux_Driver/Linux_Driver/usb-px4.ko 
135caf02941164099d96b1e2bbbeb79a  Linux_Driver/Linux_Driver/usb-px4.ko
[root@dtvserver ~]# readelf -S Linux_Driver/Linux_Driver/usb-px4.ko 
There are 47 section headers, starting at offset 0x440e68:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0

...snip...

  [23] .data             PROGBITS         0000000000000000  00048140
       0000000000015f20  0000000000000000  WA       0     0     64

...snip...

Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

objdumpでダンプリストを出力してにらめっこ。

[root@dtvserver ~]# objdump -sj .data Linux_Driver/Linux_Driver/usb-px4.ko

肝心のデータは.dataセクションのオフセット0x300からと0x12C0からにある。アライメントは8バイト、リトルエンディアン。BS朝日から順に、トラポン(周波数0.1GHz単位)、0xc486(固定?)、TSIDと続いている。都合、1ch.あたり24バイトとなる。.dataセクションはオフセット0x48140なので、例えば、BSプレミアムの周波数を書き換えたいなら、usb-px4.koの先頭から0x48668を書き換えれば良い。

  0x00000300 78f2b200 00000000 c4860000 00000000 x...............
             11727480          34500             BS-1 (11.727480 GHz)
  0x00000310 10400000 00000000 78f2b200 00000000 .@......x.......
             16400             11727480          TS.16400: CH.151 BS ASAHI HV
  0x00000320 c4860000 00000000 11400000 00000000 .........@......
             34500             16401             TS.16401: CH.755 BS ASAHI DATA
  0x00000330 5088b300 00000000 c4860000 00000000 P...............
             11765840(d) =     34500             BS-3 (11.765840 GHz)
  0x00000340 30400000 00000000 5088b300 00000000 0@......P.......
             16432             11765840          TS.16432: CH.191, 791 WOWOW HV

                    0x48488 -> 78f2b200
                               
  0x00000350 c4860000 00000000 31400000 00000000 ........1@......
             34500             16433             TS.16433: CH.171, 777 BS Japan HV

                    0x48498 -> 1240

  0x00000360 281eb400 00000000 c4860000 00000000 (...............
             11804200          34500             BS-5 (11.804200 GHz)
  0x00000370 50440000 00000000 281eb400 00000000 PD......(.......
             17488             11804200          CH.192 WOWOW Live HV
  0x00000380 c4860000 00000000 51440000 00000000 ........QD......
             34500             17489             CH.193 WOWOW Cinema HV
  0x00000390 00b4b400 00000000 c4860000 00000000 ................
             11842560          34500             BS-7 (11.842560 GHz)
  0x000003a0 70440000 00000000 00b4b400 00000000 pD..............
             17520             11842560          CH.201 Star2 HV
  0x000003b0 c4860000 00000000 70440000 00000000 ........pD......
             34500             17520             CH.202 Star3 HV
  0x000003c0 00b4b400 00000000 c4860000 00000000 ................
             11842560          34500
  0x000003d0 71460000 00000000 00b4b400 00000000 qF..............
             18033             11842560          CH.236 Animax HV
  0x000003e0 c4860000 00000000 72460000 00000000 ........rF......
             34500             18034             CH.256 Disney
  0x000003f0 d849b500 00000000 c4860000 00000000 .I..............
             11880920          34500             BS-9 (11.880920 GHz)
  0x00000400 90400000 00000000 d849b500 00000000 .@.......I......
             16528             11880920          CH.211 Eleven HV
  0x00000410 c4860000 00000000 91400000 00000000 .........@......
             34500             16529             CH.200 Star1 HV
  0x00000420 d849b500 00000000 c4860000 00000000 .I..............
             11880920          34500
  0x00000430 92400000 00000000 b0dfb500 00000000 .@..............
             16530             11919280          CH.222 TwellV HV, BS-11 (11.919280 GHz)
  0x00000440 c4860000 00000000 b0460000 00000000 .........F......
             34500             18096             CH.238 FOX HV
  0x00000450 b0dfb500 00000000 c4860000 00000000 ................
             11919280          34500
  0x00000460 b1460000 00000000 b0dfb500 00000000 .F..............
             18097             11919280          CH.241 SkyPerfect! HV
  0x00000470 c4860000 00000000 b2460000 00000000 .........F......
             34500             18098             CH.231 HosoDaigaku1 HV
  0x00000480 b0dfb500 00000000 c4860000 00000000 ................
             11919280          34500
  0x00000490 b2460000 00000000 b0dfb500 00000000 .F..............
             18098             11919280          CH.232 HosoDaigaku2 HV
  0x000004a0 c4860000 00000000 b2460000 00000000 .........F......
             34500             18098             CH.233 HosoDaigaku3 HV
  0x000004b0 b0dfb500 00000000 c4860000 00000000 ................
             11919280          34500
  0x000004c0 b2460000 00000000 8875b600 00000000 .F.......u......
             18098             11957640          CH.531 HosoDaigaku Radio, BS-13 (11.957640 GHz)
  0x000004d0 c4860000 00000000 d0400000 00000000 .........@......
             34500             16592             CH.141 NTV HV
  0x000004e0 8875b600 00000000 c4860000 00000000 .u..............
  0x000004f0 d1400000 00000000 600bb700 00000000 .@......`.......
                               11996000          CH.181 Fuji HV, BS-15 (11.996000 GHz)
  0x00000500 c4860000 00000000 f1400000 00000000 .........@......
                               16625             CH.101 NHKBS1 HV
  0x00000510 600bb700 00000000 c4860000 00000000 `...............
  0x00000520 f1400000 00000000 600bb700 00000000 .@......`.......
             16625             1199600

                       0x48668 -> 5088b300

  0x00000530 c4860000 00000000 f2400000 00000000 .........@......
                               16626             CH.103 NHK BSPremium HV

                       0x48678 -> 3140

  0x00000540 600bb700 00000000 c4860000 00000000 `...............
  0x00000550 f2400000 00000000 38a1b700 00000000 .@......8.......
             16626             12034360          BS-17 (12.034360 GHz)
  0x00000560 c4860000 00000000 10430000 00000000 .........C......
                               17168             CH.291 NHK General (Tokyo)
  0x00000570 38a1b700 00000000 c4860000 00000000 8...............
  0x00000580 10430000 00000000 38a1b700 00000000 .C......8.......
             17168                               CH.292 NHK Education (Tokyo)
...snip

0x12c0からはチャンネル情報。1ch.あたり8バイト。

  0x000012c0 00000000 00000000 00000000 01000000 ................
  0x000012d0 01000000 00000000 01000000 01000000 ................

                    0x49418 -> 00       02       BSJ

  0x000012e0 02000000 00000000 02000000 01000000 ................
  0x000012f0 03000000 00000000 03000000 00000000 ................
  0x00001300 03000000 01000000 03000000 02000000 ................
  0x00001310 04000000 00000000 04000000 01000000 ................
  0x00001320 04000000 02000000 05000000 00000000 ................
  0x00001330 05000000 01000000 05000000 02000000 ................
  0x00001340 05000000 02000000 05000000 02000000 ................
  0x00001350 05000000 02000000 06000000 00000000 ................
  0x00001360 06000000 01000000 07000000 00000000 ................
  0x00001370 07000000 00000000 07000000 01000000 ................

                    0x494b8 -> 01       01       BSP

  0x00001380 07000000 01000000 08000000 02000000 ................
  0x00001390 08000000 02000000 08000000 01000000 ................
  0x000013a0 08000000 01000000 08000000 01000000 ................

今回の改造でBSジャパンBSプレミアムともにオーケー。改造後のハッシュ。

[root@dtvserver ~]# md5sum /usr/lib64/usb-px4.ko 
72f3ddfb9652b502192530c935cbeb38  /usr/lib64/usb-px4.ko


参考にしたサイト

nekopanda神

撮りためた動画を圧縮すべえ、と。やっぱffmpegは最新版でなければなどと意味も分からないのにmakeして、んでスクリプト拵えて、ほい運用だ。で、暫くは問題なかった。VAAPIでハードウェアエンコ快適だったんだわ、まじで。

しかし、ぼつぼつとエンコに失敗する素材が増えてきた。BS朝日の土井善治が最初だったと思う。カメラがパンするとインターレースに関連してると思われるアーティファクトが嵐のように出現。とても見れる状態ではない。その後NHKBSプレミアムの新日本風土記も同様の症状が出るようになった。

TSのまま保存して再生しても同様のアーティファクトが現れるので、エンコーダーの問題ではなくてデコーダーの問題なのかなあと、5ch覗いてたらマンマおんなじやつめっけた。

[FFmpeg-devel] mpeg2dec: fix decoding field pictures - Patchwork


そらな、「こんなバグ、どないして見つけよってん?」ってなるわな。要するに、フィールドピクチャ(なんのことかあまり理解できてない)使ってエンコードした素材が世の中に出回ってなくて露見しなかったんだと。まあ、探しても資料ないもんね。理解を助けてくれそうなのは下のpdfくらいか。

https://merl.com/publications/docs/TR2003-29.pdf

こんっなとっころにじゃがっいもっがっ

m2tsパケットの懐石には失敗した。神は死んだのか。ほんっとに暗号化されてないのかなあ、と。こういうマルチメディア情報家電のOSは幸いLinuxで、そのほとんどがGPLだ。使ったら使ったよとどこぞに書いてあるはずなんだ。あったあった、これだわ。

https://panasonic.net/cns/oss/diga/JPRCP16D.html

cryptfsの姿は見えないし、他に怪しい御仁もござらぬ。それにe2fsの姿があるし。おおかたディスクの暗号化まではやってない模様だ。

それならば、とブロックデバイス毎testdiskやっちゃいましたよ。

dir_partition inode=2
   P MS Data                 10801152   11517951     716800
     ext3 blocksize=4096 Large file Sparse superblock Recover, 367 MB / 350 MiB
Directory /
       2 drwxr-xr-x     0      0      4096 21-Jan-2018 11:07 .
       2 drwxr-xr-x     0      0      4096 21-Jan-2018 11:07 ..
      11 drwx------     0      0     16384 21-Jan-2018 11:07 lost+found
   29889 drwxrwxrwx     0      0      4096 29-Jan-2018 11:44 mik

dir_partition inode=29889
   P MS Data                 10801152   11517951     716800
     ext3 blocksize=4096 Large file Sparse superblock Recover, 367 MB / 350 MiB
Directory /mik
   29889 drwxrwxrwx     0      0      4096 29-Jan-2018 11:44 .
       2 drwxr-xr-x     0      0      4096 21-Jan-2018 11:07 ..
   29890 -rw-r--r--     0      0    155648 29-Jan-2018 01:08 mik.db
   29891 -rwxrwxrwx     0      0  26214400 29-Jan-2018 01:08 mik.db-journal
   29892 -rw-r--r--     0      0    434176 29-Jan-2018 01:08 mik.db-indexer
X  29893 -rwxrwxrwx     0      0         0 29-Jan-2018 11:44 startup
X  29894 -rw-r--r--     0      0         0 29-Jan-2018 01:08 mik.db-indexer-journal

データベースファイルのようですな。何百本もある動画ファイルを管理しようってんだから何かしらのインデックスが必要なことぐらいこちとら百も承知。

$ sqlite3 mik.db 
SQLite version 3.8.2 2013-12-06 14:53:30
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
t_group_info                t_program_info            
t_group_member_info         t_program_name_info       
t_program_description_info
sqlite> select * from t_program_info;
0|285212672|285212673|103|4|16626|81126000|2016-12-06 15:30:01|1|0|65535|103|BD|10|8|8|1|2|1|1|0|0
1|285212672|285212674|103|4|16626|81163500|2016-12-07 15:00:01|1|0|65535|103|BD|10|8|8|1|2|1|2|0|0
2|285212672|285212675|103|4|16626|81163500|2017-02-11 22:30:01|1|0|65535|103|BD|10|255|255|1|255|255|3|0|0
3|285212672|285212676|103|4|16626|81213000|2017-02-21 19:00:00|1|0|65535|103|BD|10|255|255|1|255|255|4|0|0
4|285212672|285212677|103|4|16626|81213000|2017-02-22 19:00:00|1|0|65535|103|BD|10|255|255|1|255|255|5|0|0
5|285212672|285212678|103|4|16626|81163500|2017-02-28 19:00:01|1|0|65535|103|BD|10|255|255|1|255|255|6|0|0
6|285212672|285212679|103|4|16626|160897500|2017-03-04 22:00:01|1|0|65535|103|BD|10|255|255|1|255|255|7|0|0
7|285212672|285212680|103|4|16626|81163500|2017-06-07 06:00:01|1|0|65535|103|BD|10|8|8|1|2|1|8|0|0
8|285212672|285212681|103|4|16626|162195000|2017-06-09 22:00:00|1|0|65535|103|BD|10|255|255|1|255|255|9|0|0
9|285212672|285212682|103|4|16626|40672500|2017-06-11 12:45:01|1|0|65535|103|BD|10|8|8|1|2|1|10|0|0
sqlite> select * from t_program_name_info;
0|岩合光昭の世界ネコ歩き「ハワイ楽園のニャン」
1|岩合光昭の世界ネコ歩き「ハワイ島大自然」
2|岩合光昭の世界ネコ歩き「紅茶大好き~スリランカ~」
3|岩合光昭の世界ネコ歩き「コ-ヒ-と港と音楽と~ブラジル~」
4|岩合光昭の世界ネコ歩き「風車と木靴と中庭の光~オランダアムステルダム~」
5|岩合光昭の世界ネコ歩き「マンハッタンのニャン~ニュ-ヨ-ク~」
6|岩合光昭の世界ネコ歩き「京都の四季プロロ-グ」
7|岩合光昭の世界ネコ歩き選「スコットランド庭園のニャン」
8|岩合光昭の世界ネコ歩き選「イングランド」
9|岩合光昭の世界ネコ歩きMINI「鳴く」「ネコとことわざ」
sqlite> 

うーん、ヒントなんだろうか。番組情報にしか見えねえけどなあ。

こんっなとっころにぎゅうにっくがっ

じゃないけど、リビングに置いてあったはずのUSBハードディスクがデスクの脇にあるぞ。どれどれ覗いてみるか。

$ sudo dd if=/dev/sde of=dump skip=0 bs=16M count=1

するとなにやら先頭に書いてある。「Panasonic DIGA RTSC」だと。おお、なんだ、レコーダー用の外付け君かいな。迷子になったんだね。もう少し覗いてみるね。

ブロックの先頭5GB程は先の文言以外空白。で、0x162D28000 byteからに興味深いデータがあった。HEXエディタで見てもひと目でわかる、PNGファイルがそのまま転がっている様子。試しにforemostに喰わせると45枚のPNG(224x126)が復元できた。どうやら動画のサムネイルのようだ。

熱くなってきました。ディスクは暗号化されていない様子。つまり、forensicな手段を使えばAVCHDなファイルをサルベージ出来るかもっつうことだ。もっと先を覗いてみると、0x1637C0000 byteにm2tsパケットらしきものを発見。でも少し変だ。188 byteでも192 byteでもない。パケットの区切りが分からないのだ。うーんお手上げ。

D5 E4 32 0B タイムスタンプ
47 同期キャラクター「0x47」
40 00 左から3bitは順にtransport_priority_bit, payload_unit_start_indicator, transport_error_indicator
      残りの13bitがPID (packet identifier)=0なので、このパケットはPAT (program association table) 
14 左から2bitはtransport_scramble_control, 次の2bitがadaptation_field_control, 残り4bitがcontinuing_counter
   ここまでがヘッダー

00 区切り文字"0x00"

00 テーブル識別
B0 11 左から4bitを除いた0x011がセクター長、この場合は17byte
40 F2 C9 00 91 
14 7E 8F 7A 0x0f7a
46 3C 03 10 0x0310
07 CE F6 91 0x1691


F9 C7 25 B5 E8 C5 AB D2 32 07 97 EF CC 3B 73 C5 71 45 1A 4C 93 30 9F 45 73 8A 3F B8 07 7C 29 A2 B7 D7 1F BC DF C4 72 D4 A7 4D FE 91 17 2A 0D FC 98 82 FB 4E 22 A0 11 ED 83 F9 7E FA 1B 0E EF 8F 71 56 3B 82 AE 19 21 25 BA 0E BE DE 9F 7C B1 74 29 71 2D 77 DD 8D E4 50 35 A5 55 64 5E E8 63 B9 86 E4 E8 EF BF 18 00 E6 53 3E 92 59 F4 97 A9 9F A4 51 92 25 BB 0E F0 CC 10 D4 3F 52 4F 45 9D 2A 08 E9 C9 85 60 45 99 A7 1B 08 B1 28 9F 3A 0E DE 64 AC 38 84 DF 08 FA D9 99 09 FC A2 AF 8A FC EB 11 B1 56 0C 25 D1 A0 24 9E C3 23 6A 3C 5D 26 F5 17 DF 42 D7 02 0E 31 1E C6 C0 0C 8B 30 C8 65 D1 3D 89 BC 87 32 92 46 F6 A8 0D C9 2A A5 37 4A 00 A4 C0 09 C6 EF B3 26 FB 10 84 62 D2 8F 8E 40 97 25 9B 85 AB AF 0B A1 B5 93 5D 06 70 34 10 E7 10 1D D9 4D 26 57 78 DC 2B C8 E1 6D A0 F1 91 1F BF 5C CA BD 61 64 C8 EA 54 14 02 86 82 D6 98 07 67 95 9D 18 3E A9 2E FE 08 D1 FC E4 07 05 2D 0E 37 9C 2D F0 68 94 65 DA B4 6C 19 4E 27 2C F7 BA 09 27 0D 57 05 FE DF 8A B3 39 CD 26 7B DE CB 17 52 A5 26 38 04 15 A9 A5 A5 DD C0 FF 7D 82 C5 1B 8A 3F 86 09 61 99 0B F7 03 CC 73 E3 3D EF 60 9B 50 C0 74 BA 91 E8 FE 52 26 FC 14 D7 2E C2 7F 0F EC AD AD F7 23 B8 05 8E AD B6 A7 C7 61 38 2A C3 A5 9E E4 59 19 B5 0B 0C C3 7C B4 A4 4F B8 28 D7 47 EE AF 59 92 2A 21 A0 68 A7 9B 5F 76 B7 99 6B 6E 76 B4 E8 9F F2 54 33 25 0A 15 39 0E 82 CF 42 8C E8 E5 68 EF 52 93 48 C1 BF E2 E4 2B 79 82 16 C1 28 21 62 43 11 B0 54 02 7A D2 45 3C 5A 87 BC 08 84 2C BE 3C A4 1B 46 28 B6 8E 28 D7 B1 D8 AA 3B D1 F3 CD