おそらく Delphi C++ Builder で記述され、AbsoluteDB が組み込まれた、かなり古いデスクトップ アプリケーションが提供されました。
Swing または Flex/Air を使用して新しいバージョンを作成する必要がありますが、その前に DB の正確なスキーマを確認する必要があります。
残念ながら、DB はパスワードで保護されていました。このアプリを書いたプログラマーはずっと前に会社を辞めました。
とにかくこのパスワードを回復する方法はありますか?
おそらく Delphi C++ Builder で記述され、AbsoluteDB が組み込まれた、かなり古いデスクトップ アプリケーションが提供されました。
Swing または Flex/Air を使用して新しいバージョンを作成する必要がありますが、その前に DB の正確なスキーマを確認する必要があります。
残念ながら、DB はパスワードで保護されていました。このアプリを書いたプログラマーはずっと前に会社を辞めました。
とにかくこのパスワードを回復する方法はありますか?
ナイーブ ブルート フォース攻撃
以下の理由から、ストックを使ってTABSDatabase
ブルート フォース攻撃を試みるのは無意味です。
あらゆる余分な負荷を取り除く
私は自分の試みで、この動作する裸の Delphi クラスを思いつきました:
type
TABSDBHack = class
private
FFilename: TFileName;
// 2 relevant contiguous headers of an Absolute Database file
FDBHeader: array [0..SIZEOFDBHEADER-1];
FCryptoHeader: array [0..SIZEOFCRYPTOHEADER-1];
// Mirror of the ControlBlock record from CryptoHeader
FControlBlock: array [0..SIZEOFCONTROLBLOCK-1] of Byte;
//
function GetEncrypted: Boolean;
function GetFileName: TFileName;
function GetPageSize: Word;
function GetPageCountInExtent: Word;
function GetCryptoAlgorithm: Byte;
protected
// Retrieving Data from stream into FDBHeader and FCryptoHeader
procedure ReadStream(F: TStream);
// Mainly FillChar(..., ...,#0) of the corresponding record
procedure ClearDBHeader;
procedure ClearCryptoHeader;
procedure ClearControlBlock;
// Probe the existence of 'ABS0LUTEDATABASE' as file signature
function CheckABSSignature: Boolean;
// Compute the CRC of FControlBlock record
function CRC32: Cardinal;
// Decrypt the persisted Control Block into FControlBlock
function InternalDecryptBuffer(const APassword: string):Boolean;
public
procedure Clear;
// Wrapping a ReadStream using a local TFileStream
procedure LoadFromFile(Filename: TFileName);
// Return True if the decrypted Control Block correspond to original plain one.
// Otherwise stated: The persisted CRC (in the Crypto Header) is equal to
// the value returned by the function CRC32
function CheckPassword(const APassword: string): Boolean;
property FileName: TFileName read GetFileName;
// Sample of plain Data peristed that can be retrieved
property PageSize: Word read GetPageSize;
property PageCountInExtent: Word read GetPageCountInExtent;
property Encrypted: Boolean read GetEncrypted;
property CryptoAlgorithm: Byte read GetCryptoAlgorithm;
end;
関連するデータをファイルから直接取得し、特定のパスワードを調査しました。
免責事項:
Absolute Database バージョン 6.0.7 の Personal Edition を使用して開発しました。
クラス定義は、配布された DCU からの型定義への参照が削除されたため、それに基づくバイナリを配布する資格がありません。
ご存知のように、主にハッシュと復号化の方法について、DCU のディストリビューションに強く依存しています。Absolute Database の内部構造に関する時間と知識があれば、その暗号化エンジンのクリーン ルームでの実装を作成することが可能になるはずです。これは、Hagen Reddmann によるフリーウェアであるDelphi Encryption Compendiumに基づいているようです。
その他の探索方向
結論
はい!規定によっては、パスワードを回復することができます。
TABSDBHack をいじる場合、成功の鍵は検索スペースを減らす方法を見つけることです (パスワードは文字列型です)。特に脆弱なパスワードの場合は、パイのように簡単です。私は強調します、それは機能します。
Component Ace の連中は頭が良く、仕事をうまくやり遂げました (特に暗号システムの考案): Absolute Database は信頼できます。私はそれを強く推奨します。