出費を見直そう。

去年の秋から散財しすぎたから新規に機材を買うのは三か月ほど控えようと思った。

来月は車検+タイヤ交換、その二か月後は固定資産税。その後はソーラーローンの繰り上げ返済を計画中。手持ちが無くなるわ。

機材を整理する。

素晴らしいDX-SR9でBCLをするためには無線局の免許が要るから、きちんと保証認定までして免許を下ろしたのに、交信が面倒なので運用実績としてはほぼSWL局のまま。

実際に交信して59+レポートをもらっても本当にどの程度の強さで相手に届いているのか正確には分からないし、今は交信しなくても公開されている世界各地のWebSDRKiwiSDRで自局の電波がどこまで届いているか直接確認できてそれで満足。届いているかを機械的に確認するならPSK Reporterリバースビーコンも使えるが、キャリアのみならずSSB変調でも直接音響受信して確認できるという点で公開SDRはとても有難い。

設置したアンテナの動きは分かってきたので再びBCL/SWL中心に戻る。面倒な免許申請や安くないチューナーやアナライザなどの周辺機器を揃えた甲斐があって以前開局していたときよりアンテナの動作は効率的に把握できたと思う。短波放送の受信だけでは理解できなかったことも実際にパワーをかけて送信することで理解が深まった。免許がある間は送信器は持ってないといけないものの、普段使いの環境としては整理することにした。

紆余曲折の末、自分に合った受信環境はIC-R8600と手動チューナーに窓に穴を開けなくてよいロングワイヤーアンテナだった。BCLラジオにしては高くつくが、構成的にシンプルな設備で世界中の電波を簡単にキャッチできる。消費電力以外のストレスが全く無い。

最終的にDX-SR9は使わないのか、というオチではある。DX-SR9の性能や機能にBCLするための問題は無いものの、IC-R8600のスペクトラムスコープとタッチディスプレイの操作性、それに高性能なDSPは「普段使いの簡単で手軽な受信」を実現するための近道となる。面倒な事は長続きしない。


なぜかIC-R8600がアマゾンから無くなった。買うなら専門店で。

アルインコ DX-SR9M – アマゾン
https://amzn.to/3q8HUPo

アイコム IC-R8600 – CQオーム
https://www.cqcqde.com/fs/cqohm/33805

IC-R8600専用のACアダプタ電源内蔵スピーカーは今もアマゾンで売ってる。本体だけが無い。

DX-SR9の改造後の送信範囲。

アルインコのDX-SR9。送信範囲を広げる改造方法が存在するが、結論を言うとCB帯ロックがかかっていて完全なゼネカバ送信にはならない。違法CB用に使おうとしないように。

アルインコDXSR8Jの送信改造(ゼネカバ)方法を教えてください。- Yahoo知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11171324786

回答ではDX-SR9にも言及してて写真もあげている。画像はYouTubeのキャプチャっぽい。YouTubeではSR9、SR8ともにCB帯送信改造の動画が上がっていて、どちらも基板のパッドA、Bをショート。

Alinco DX SR9 MARS mod TX unlock for CB operation
https://www.youtube.com/watch?v=MiD04ISVo4k

ALINCO DX-SR8、MARS MODIFICATION(GENERAL -TX)
https://www.youtube.com/watch?v=EkJzEPXXqNA

動画をよく見ると27.55482MHz、27.555MHzで送信できることを見せていて、ヤフー知恵袋の質問者が補足している「26,965~27,415MHzがどうしても[OFF]です。」という範囲の外で試している。この改造方法でも26.965MHz以上~27.415MHz未満は送信不可。ヤフー知恵袋の回答者、現物は確認してないんだろうなって思った。ヤフオクでSR9を売り飛ばそうとしている人はきちんと送信範囲を確認している。

ALINCO DX-SR9 – ヤフオク!
https://page.auctions.yahoo.co.jp/jp/auction/o1009271584
送信出力は概ね、約90W弱を確認しました(未校正のSWR計・ダミーロード測定)/ ゼネカバ送信改造済みです…ただ残念ながらCBバンド帯(26.965~27.415MHz間)は送信しません。」オークションID q1028412222、即決価格33,000円、入札件数 1。

DX-SR9M(50W)機を買って、100W化済みのうえにゼネカバ送信改造済み。言うことないね! この値段なら追加用にもう一台欲しかった。

商品写真は27.500MHzで送信デモ


アナログな無線機を調達したい。
https://mzex.wordpress.com/2021/10/02/18800/

調べた値の再掲。
NG 0.135MHz- 1.59999MHz
TX 1.600MHz-26.69499MHz
NG 26.965MHz-27.41499MHz
TX 27.415MHz-29.99999MHz

クレカ番号入力アプリを作った。

無計画に買った磁気カードリーダー、高くは無いが3000円近くしたからこのままゴミにするのももったいない。何かに使えないか、考えてみた。

磁気カードリーダーMSR90 – アマゾン
https://amzn.to/3vIw8ib

昨日、ソニーストアで買い物をしたら、クレジットカードなどの情報を入れる画面で確認ボタンを押して次の画面に遷移してから入力に間違いがあると言われたり、自分で気づいて前の画面に戻ると、クレジットカードに関する情報が消えていてもう一度入れ直す必要があるというクソ仕様。5回くらい間違えて、そのたびにクレジットカード番号、期限、名義、セキュリティコードとなぜか誕生日を毎回入れ直す必要すハメに。

アイボのいちごミルクを買いたい(買いたくない)

ブラウザにはカード番号やCVC/CVV番号を保存する機能があるが、そんな気持ち悪い機能は使いたくないので毎回入力しているのだが、5回も入れ直しさせられると面倒になってくる。

そこで前回買ったカードリーダーを活用してクレジットカードを磁気カードリーダーに読ませるとウェブフォームに入力できるアプリを作ってみる。



※WordPress.comがケチでzipファイル直接置けないのでワード文書にOLEとして埋め込んだ。今どきのdocx自体がzipファイルなのに。→Windows Defenderが信頼されていない、と警告してくるのでソースだけ公開に変更。

使い方は簡単で、クレジットカード番号を入力する必要が出てきたらMagCard.exeアプリを起動してから、入力したい場所にカーソルを合わせる。もう一度MagCard.exeのウィンドウをアクティブにしてからカードをカードリーダーに読み込ませる。ウィンドウが消えてカード番号を入力する部分にキーストロークとして入力される。

起動すると微妙に怪しげな感じのウィンドウを表示する。
磁気カードをスワイプすると番号が入る。

こんな怪しげなソフトは自分以外の誰も使わないと思うけど、カード番号を読み込ませるとかいう極めてセキュアな用途に使用されるから、ソースコードはプロジェクトファイルも含めて全部アーカイブに入れてある。ソースにコメントを書いていないが初心者プログラマーでも読み解けるだろう。

動作としてカード番号自体はどこにも保存していないので、カード番号やパスワードを保存してまとめて管理できますなんてソフトなんかよりずっとセキュアじゃないかな※。ちなみにアメックスやダイナースのハイステータスなカードは持てないから試してない。(カードの桁数が異なるから、持ってないとうまく動くか試せない)

※個人的には、パスワード管理ツールって、最低限オープンソースかつデータストアに汎用なOneDriveかGoogleDriveを指定できるものでなければ、何やってるか分からないから絶対に使いたくない。それにオープンソースであっても動作を完全に掌握できるわけでもないし、コードやバイナリの安全性なんて個人で評価できるものでもない。安全って宣伝されたってそれを担保できる根拠が無ければクレジットカードの番号なんて怖くて預けられない。

これでUIがクソなECサイトでの買い物も楽になる。



取り出したMagCard.exeを実行するときにWindowsのSmart Screenが「信頼されていないファイル」として実行をブロックしてくれる。詳細情報で実行できるけど、嫌なら実行しなくてもいい。それにVisual StudioのソリューションファイルMagCard.slnを開くときも「信頼されていないソリューション」とか警告してくれるので、嫌なら開かなくてもいい。まあどこの馬の骨だか知らんやつが作ったファイルなんか迂闊に開いたり実行するなんてことは、情報リテラシーがある人ならしないのが基本だって知ってることだからSmart Screenの言ってることは正しい。

ということでバイナリ公開はやめてソースのみにする。よくある1個フォームのC#デスクトップアプリなんで特に説明も要らないかな。

MagCard.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MagCard
{
    public partial class MagCard : Form
    {
        int state;
        string keys; 

        public MagCard()
        {
            InitializeComponent();
            state = 0;
            keys = "";
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            switch(state)
            {
                case 0:
                    if(e.KeyChar == '%')
                    {
                        state = 1;
                    }
                    break;

                case 1: 
                    if(e.KeyChar == ';')
                    {
                        state = 2;
                        timer1.Interval = 500;
                        timer1.Start();
                    }
                    else
                    {
                        keys += e.KeyChar;
                    }
                    break;
            }    
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Stop();
            state = 3;

            try
            {
                keys = keys.Substring(1, 16);
                this.Text = keys;

                this.Hide();
                SendStr(keys);
                this.Close();
                
            }
            catch(ArgumentOutOfRangeException oe)
            {
                state = 0;
                keys = "";
            }
        }

        private void SendStr(string str)
        {
            string stroke = "";
            foreach(char c in str)
            {
                stroke += "{" + c + "}";
            }
            this.Text = stroke;
            SendKeys.Send(stroke);
        }
    }
}



MacCard.Designer.cs


namespace MagCard
{
    partial class MagCard
    {
        /// <summary>
        ///  Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        ///  Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        ///  Required method for Designer support - do not modify
        ///  the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // timer1
            // 
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
            // 
            // label1
            // 
            this.label1.Anchor = System.Windows.Forms.AnchorStyles.None;
            this.label1.AutoSize = true;
            this.label1.Font = new System.Drawing.Font("Calibri", 20F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
            this.label1.Location = new System.Drawing.Point(67, 104);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(408, 49);
            this.label1.TabIndex = 0;
            this.label1.Text = "Swipe Your Credit card !";
            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // MagCard
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 25F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(544, 251);
            this.Controls.Add(this.label1);
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "MagCard";
            this.Text = "Magnetic stripe card to Key Stroke";
            this.TopMost = true;
            this.Load += new System.EventHandler(this.Form1_Load);
            this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Timer timer1;
        private System.Windows.Forms.Label label1;
    }
}



Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MagCard
{
    static class Program
    {
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MagCard());
        }
    }
}

クレカをスキミングしてみる。

ゴールドカードというかクレジットカードの磁気ストライプに何が記録されているのか気になったので、スキミングしてみる。

80年代、90年代なら個人がISO/JIS磁気カードリーダー/ライターを所持しようものなら偽造変造カードのあらぬ容疑をかけられそうだが、21世紀の今はアマゾンで3000円未満で磁気カードリーダーが売っている。

磁気カードリーダーMSR90 – アマゾン
https://amzn.to/3vIw8ib

どうやって使うのかよく分からないがとりあえず注文したら2日後に届いた。箱に本体しか入ってなくて、ドライバやユーティリティ類も付いてない。製造元と思しきサイトを見るとよく似た型番のユーティリティはあるが、ドライバの類は基本的には要らない様子。型番MSR90で探すとコンフィグレーションソフトはあるものの、なぜか届いた個体を認識しなくて使えない。

PCにUSBで接続すると「ピッ!」と鳴って赤いLEDが点灯。

誇らしげなYosooの意味が分からない。

持っているカードをスキャンすると「ピッ!」と鳴ってLEDが一瞬緑色になる。何か読み取りされたことが分かる。

デバイスとしては標準HID入力デバイスとして認識されているので、キーボードのエミュレーションがあるんだろうと思って、メモ帳を起動してもう一度スキャンする。

%がトラックのスタートコードらしい

メモ帳にこんな感じで入力された。磁気ストライプの情報そのままキーストロークが生成される。まあそんだけといえばそんだけ。スキミングのためには何かデバイス制御のプログラミングしないといけないのかと思ってた。21世紀のスキミングにはUSBケーブルを正しいポートに挿せることと、メモ帳を起動するという極めて高度なスキルを要求される。

大阪にある ドルチェ楽器 の会員カード

% 13xxxx0000000000000000000000000000000000000000000000000000000000?

13xxxx の部分はカード表面のエンボスになっている番号と同じ

アパホテルのAPA CARD

%00000902xxxx(                   ?

0902xxxxの部分はカード裏面のAPA No.と同じ。

いろいろ試してみたら、厚みのある磁気カードはだいたい読み取れる。厚みの無いテレホンカードとかハイウェイカードとか駐車場のカードは読み取れない。

ICカードと違って、手動でシュッと読み込ませると「ピッ!」と鳴って楽しい。「クレカバトルゲーム」でも作って遊んだら楽しそう。(なおカード情報収集機能の実装は禁止)

ISOの3トラックやJISⅡにも対応していて、もちろんキャッシュカードもクレジットカードも読み取れる。磁気ストライプのデータにカードに印字されてる番号やエンボスと同じ値を含んでいることが分かる。クレジットカードを読み取った生データなんて危険すぎてPCに保存することすらはばかられるんで、伏字にしてもここには掲載したくないからしない。


磁気カードリーダーライター – アマゾン
https://amzn.to/3MkMLXb

ちょっと高かったから買わなかったけど磁気カードリーダーライターも普通に売ってるから、好きなようにカードの磁気データを書き換えることはできてしまうわけで、この手の会員カードは使用時にカードリーダーで読み取られるだけでカード表面の番号と照合もしないし、暗証番号などがあるわけでもないし、クレカやキャッシュカードでなければ偽造検出の仕組みを設けてない可能性が高くセキュリティがほぼ無い。ポイントカードだったらちょっと悪いこと試してもいいだろうはダメ。ゼッタイ。

基礎知識 刑法 – 国民のための情報セキュリティサイト – 総務省 より


■第161条の2(電磁的記録不正作出及び供用)
第百六十一条の二 人の事務処理を誤らせる目的で、その事務処理の用に供する権利、義務又は事実証明に関する電磁的記録を不正に作った者は、五年以下の懲役又は五十万円以下の罰金に処する。
2 前項の罪が公務所又は公務員により作られるべき電磁的記録に係るときは、十年以下の懲役又は百万円以下の罰金に処する。

■第168条の2(不正指令電磁的記録作成等)
第百六十八条の二 正当な理由がないのに、人の電子計算機における実行の用に供する目的で、次に掲げる電磁的記録その他の記録を作成し、又は提供した者は、三年以下の懲役又は五十万円以下の罰金に処する。
一 人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録

https://www.soumu.go.jp/


不法無線局を開設して公共の無線を妨害すると五年以下の懲役又は250万円以下の罰金だから、磁気カードいじりのほうが罪としては軽いらしい。(どっちもやっていいというわけではない。)