解析方法

自分で作成したソフトでも時が経てば内容を把握するのが難しいのに、他人の作成したソフトを改造するのは更に困難になります。
余りにも内容が不明だと、最初から作り直した方が早いのではと考えたりもします。
ただ、専門家の作成したソフトには、様々なテクニックが駆使されている場合が多いので、こんな方法もあったのかと感心させられる事が多いものです。
良い点は真似れば良いですし、気に入らないと思った点は使わなければ良いだけです。
私の場合は、勉強になる場合の方が多くプログラムの解析は自分のレベルアップに役立っていると感じております。

他人の作成したプログラムの解析方法はこれがベストだと言うのは無いと思います。
要は、自分にとっていかに短い時間で内容が理解できるかですから方法には個人差があると思います。
一般的な人は特別な解析ツールなどは持っていませんから、与えられている環境のみで解析を行う事になります。
今回解析する「馬吉」は、VB6で記載されておりますからVB6がパソコンにインストールされていなければならないのは当然です。
私はVB6のDevelopmentバージョンを使用しましたが、Professional バージョンでも同じだと思います。
確かその下位バージョンなんかもあったと思うのですが、それは使用出来ないでしょう。
今時VB6でプログラムを作成する人は数少なくなったとは思いますが。

私が行った解析方法は以下の通りです。
前に述べたようにこれが最善と言うことではありませんので参考程度にしてください。

(1)プログラムを動かして動作を覚える
プログラムを動かさないでいきなり解析しようとする人はいないでしょうから、これは当たり前の事だと思います。
そんなに細かい動きまでは把握できませんので、大まかな流れを見る程度で良いと思います。
細かく知る必要があったら又動作させて調べれば良い事です。

(2)どんなファイルがあるのか一通り眺めて見る。
プログラムの内容とか動作の流れとかと別にファイルのどこにどんな内容が記載されているのかを漠然と見ます。
お店ならどこにどんな商品が並べてあるのかを知らないと名前が出てきても右往左往するばかりなのと同じです。
一度見ておくと、細かく調べている時に確かどこそこに記載してあったような気がすると思い出す事が多いものです。
全く判らない事が次から次へ出てくると嫌気がさすものですから、その防止にも役立つような気がします。

(3)プログラムの流れを掴む
これも当たりまえの事だと思います。
実際に動かした時の状況とプログラムに記載されている内容から流れは把握できると思います。
流れが100%掴めれば解析は楽なものですが、「馬吉」の場合は複雑でさっぱり判りませんでした。
兎に角、どこがどのように動いているのか全く理解出来なかったのです。

(4)エラーコードを全て外す
プログラムにはエラートラップがあります。
動作上でエラーが発生してもエラートラップがあるとエラーが発生している事すら判りません。
全てのエラートラップを外して(コメント化して)動作させてみます。
プログラムの中には、エラーの発生をプログラムの分岐に使用しているものもありますのでエラートラップを外しても正常に動作するかどうか(正常に動かした状態で)を確認する事は重要です。

(5)プログラムを変更する。
今回はデータベースをアクセスからSQLiteに変更させるのが目的ですからデータベース接続用のドライバーも必要です。
データベースの作成は、DOSコマンドで行いましたがテーブルの作成は接続ドライバを使用した別ソフトで行いました。
又、データを正常に取り込めるかどうかの確認のために、エクセルに簡単なデータ読み込みプログラムを作成して接続ドライバに問題が無い事を確認しました。
こうする事によって、接続ドライバの不具合などによって発生する無用なトラブルを避ける事が出来ます。
(今回利用させていただいた接続ドライバーは、SQLite ODBC ドライバ 0.83 です。)

エラーコードを外しますので、データベースをオープンできないとかテープルが無いとかはエラーが発生しますので不良箇所を把握する事が出来ます。
今回はプログラムの内容が全く不明な状態から始めたために、データが無いと表示されたり無限ループに入ったり、意味不明のエラーが出たりして大変な思いをしました。
今なら必要な箇所にデバッグポイントを設けられますので、かなり楽だと思います。
変更のポイントは一気に全てを変更しないで少しずつ行う事です。
急がば回れのたとえ通り、その方が効率的になる場合の方が多いようです。
それと常に変更程度に応じてプログラムのバックアップを必ず行う事が大切です。
先に進んでから急に動作しなくなった場合でも、変更程度に応じたバックアップが数種類あれば、そこまで一旦戻る事が出来ます。

又、エラーが出た場所や無限ループに入っていると思われる場所で対策が不明な場合は、コメントアウトしてそこの動作をスキップさせる事です。
だいたいが表示関係になるので、そこの表示は行いませんが動作は最後まで継続させる事が出来ます。
動作が一通り終了できるようになれば、コメントアウトした部分のコードを見直して修正を行います。

以上が私が行っている解析方法と改造方法です。
他人が作成したプログラムは、その人の独特の癖もありますし理解が困難な場合があります。
今回はデータベースがサポートしていないようなコードも多々ありましたので結構苦労しました。
ほっぽり出したい気持ちに何度もなりました。
やはり必要なのは根気だけだと改めて感じました。