「予備部品カタログ」プログラムの例でのデータベース保護とハッキング

プログラムで使用されるデータベースを保護する場合、この情報は役立ちます。 たとえば、データベースの値を暗号化し、出力で復号化するなど、保護を改善する必要があります。



だから。 DATAフォルダーを備えたプログラムがあります。本当にそこからデータを取得したいです。



いくつかのオプションがあります。



まず、プログラムにデータが保存されている形式を確認する必要があります。 無料のTrIDプログラムを使用できます。 私たちは...



画像



悲しみ。 知られていないもの。 oleデータストアに基づいた独自の形式のように見えます。 これが真実であり、開発者が独自のDBMSをわざわざ作成することを決定した場合、データの抽出は非常に困難で時間がかかります。 オプション1を使用する方が簡単です。



しかし、すべてのプログラマーは怠け者であり、おそらくこれはある種のよく知られた形式です。 たとえば、AccessまたはFirebird。 私はそうするでしょう。 私はプログラムでディレクトリを調べましたが、ライブラリはありません。



さらに探索する。 Process explorerを使用して、非常に便利な無料のユーティリティをダウンロードします。これは、レジストリへのすべてのプログラムアクセス、ファイル、および可能なすべてを表示します。

1つのcatalog.exeプロセスのみが監視されるように構成します-プログラムのメイン実行可能ファイル。



画像



プログラムを実行し、どこに行くかを確認します。



画像



ああ! ODBCデータソースを使用します。 ほとんどの場合、使用されるデータベースはアクセスです! プラス記号を付けます。 さらに調べます。 TraceSQLModeレジストリには興味深いキーがあります。 グーグルでは、すべてのリクエストをファイルに書き込むことができます。 キーを変更し、ファイルを探します。 見つかった:



画像



リクエストを確認します。

SELECT



FROM spare LEFT JOIN photo ON photo.serial = spare.serial








ネームプレートはスペアと呼ばれ、スペアパーツを意味します。 したがって、これは補助データベースではなく、パーツの名前は実際にそこに保存されます。 素晴らしい。 さらに調べます。



画像



データベースファイルは、プログラムディレクトリではなくアクセスされています。 したがって、一時的にコピーされます。 私たちはアクセスで開くことを試みます-結果なしで、理解しません。



プログラムでアクションを実行し、ディレクトリ内の別の位置に適切に切り替え、ログをより詳しく調べます。



画像



要求の前に、ファイルの変更が発生し、何かが書き込まれます。 おそらく復号化されるか、ファイルヘッダーが変更されます。 リクエストの前にこのファイルをコピーすると、より高い確率で機能することがわかっているため、これはもはや重要ではありません。



そのため、ファイルが機能している間は、リクエストがあるまでプログラムを一時停止する必要があります。 そう、デバッガーのトレース。 デバッガ、たとえば、無料の1.3MBのOllyDbgをダウンロードします。



Windows Vista以降を使用している場合、管理者モードで起動します。

実行中のプロセスに参加する(アタッチ)



画像



プロセスを選択してください:



画像



Process Explorerに戻り、関数呼び出しスタック(イベントのコンテキストメニュー)を確認します。



画像



kernel32.dllシステムモジュールのCloseHandleファイルを閉じるための呼び出しにブレークポイントを設定できます。



デバッガーでこのモジュールに移動します。



画像



目的の機能を見つけます。



画像



ブレークポイント-F2を配置します。



画像



次に、F9を押してプログラムを実行します。 そして、実験プログラムでいくつかのアクションを実行します。 プログラムはブレークポイントで停止します。



要求を実行する前にレジストリアクセスレコードが表示されるまで、デバッガーでトレース(F8)。 これは、データベースファイルが接続するように変更され、読み取り可能であることを意味します。



その後、ファイルに移動して別の場所にコピーします。



画像



ここでファイルを確認します。



画像



100%mdb! これはMS Accessファイルです。 名前を変更して開き、すべてが正常であることを確認します。



画像



さらなる変更または別の形式への変換に適したデータベースを正常に受け取りました。



書き始めてから、データをMS AccessからPostgreSQLデータベースに変換するスクリプトをgroovyに投稿します。



ここにあります:

import groovy.sql.Sql

java.util.Properties prop = new java.util.Properties();

prop.put(“charSet”, “cp1251”);

sourceSql = Sql.newInstance('jdbc:odbc:catalog2',prop)

targetSql = Sql.newInstance(“jdbc:postgresql://localhost:5432/catalog”,”catalog”,”catalog”, “org.postgresql.Driver”)

def images = targetSql.dataSet(“image”);

sourceSql.eachRow('select * from image') {

def id = it.id

images.add(id:id,block:it.block);

def image=it.getProperty(“image”)

if (image) {

File f = new File(“D:/trid_w32/images/” + id + “.png”);

f.append(image);

}

}

def coords = targetSql.dataSet(“coord”);

sourceSql.eachRow('select * from coord') {

coords.add(id:it.id,block:it.block,x:it.x,y:it.y,r:it.r);

}

def spares = targetSql.dataSet(“spare”);

sourceSql.eachRow('select * from spare') {

spares.add(id:it.id,parent:it.parent,num:it.num,serial:it.serial,count:it.count,spec:it.spec,apply:it.apply,ru:it.ru,cn:it.cn);

}








通訳者によって起動された:



groovy _.groovy







結論:データベースを保護するには、(最も信頼性の高い)データを独自の形式で書き込むか、データベース内の値を暗号化して表示時に直接解凍するとともに、ファイル自体を暗号化する、ファイル署名を変更する、組み込みの暗号化を使用するなど、補助的な保護方法を使用する必要がありますdb



PSこの記事の著者はAlexander Surovtsevです。 素材が気に入ったら、彼を助けてHabrに招待してください。 残念ながら、招待状を配りました。 彼のメールアドレスはgmail.comのsurovtsev.alex、twitterはmobal1です。ありがとうございました!



All Articles