1

Advent Axys、ファイナンシャル プランナー向けのソフトウェアなどと統合するプログラムを作成しようとしています。製品のサイトはこちら: http://www.advent.com/solutions/asset-managers-software/axys-platform

価格ファイルに新しいエントリを書き込む必要がありますが、それらの多くはバイナリです。私はオンラインで見回しましたが、あまり見つかりませんでした。サポートに電子メールを送りましたが、それが役立つとは思えません.

私は短いダミーファイルと、プログラムがそのファイルに与える印刷物を持っています。それが単語の文字または記号である場合は文字を出力し、それ以外の場合は ASCII val を出力する ruby​​ スクリプトを介してファイルを実行しました。Rubyスクリプトは次のとおりです。

pri = File.read '062109_dummy.pri'
pri.each_byte do |char|
  print char.chr =~ /[\w!@#\$%\^&\*\(\)\-\\\/\+\.]/ ? char.chr : ' ' + char.to_s + ' '
end

そして出力:


pri1.001 254  250  251  252  29  0  0  2 adusnok 0  0  0  0  0  0  0  0  0 33333s7@ 1  254  250  251  252  29  0  0  2 csusxom 0  0  0  0  0  0  0  0  0 H 225 z 20  174 GA@ 1  254  250  251  252  29  0  0  2 etusvv 0  0  0  0  0  0  0  0  0  0  246 (\ 143  194  213 F@ 1  254  250  251  252  29  0  0  2 fdusoakbx 0  0  0  0  0  0  0  174 G 225 z 20  174 (@ 1  254  250  251  252  29  0  0  2 oousfidde09 0  0  0  0  0  154  153  153  153  153  185 S@ 1  254  250251  252  29  0  0  2 qpusfid_eqix 0  0  0  0  164 p 61  10  215 cL@ 1  254  250  251  252  29  0  0  2 vausvg_sc 0  0  0  0  0  0  0 )\ 143  194  245  248 P@ 1 

数値の周りにスペースがある場合、それはバイトの値であることを意味し、そうでない場合、バイトの値はその数値の ASCII 表現であることに注意してください。

文字列(「adusnok」など)が株などを表していることは知っています。次に、シンボルのスペースが固定サイズであるため、0 のビットがあります (これが、長いシンボルの後に 0 が少ない理由です)。このシーケンス@ 1 254 250 251 252 29 0 0 2は、新しいレコードのシンボルの直前に来て、レコードの終わりを示しているようです。あるいは、これらすべてに同じものを意味するものもありますが、同じようには見えません。その後は、基本的に何も知りません。私は、プログラムがマップすると考えているもののプリントアウトを持っています。各列を 3 つのスペースで区切ると、次のようになります。

adus   nok   23.45   NOKIA CORP ADR   0.393  05/30/2008
csus   xom   34.56   EXXON MOBIL CORPORATION COM   1.68   06/10/2009
etus   vv    45.67   VANGUARD LRG CAP ETF US PRIME MKT 750   1.04   3/31/2009

もっとありますが、それはあなたにかなり良いアイデアを与えるはずです. 説明やその他の可能性があるものが他のファイルに保存されており、単に検索されている可能性は十分にあると思います。しかし、これらは価格ファイルであり、それが要点であるため、価格がそのファイルにあることは知っています。そう:

33333s7 => 23.45 H225 z 20 174 GA => 34.56 246 (\143 194 213 F => 45.67

3 と 7 を最初の 1 つに保存してください。すべての数値はバイトの値であり、値の ASCII 表現ではありません。また、これらの値は単なる価格ではありませんが、間違いなく価格を表していることに注意してください。

何か案は?一般的なバイナリ エンコーディングには詳しくありませんが、かなり一般的な方法を使用していても驚かないでしょう。

4

1 に答える 1

3

リバース エンジニアリングされたコーデックを出荷する場合、バイナリ形式のリバース エンジニアリングは危険です。彼らは警告なしにファイル形式を変更するかもしれません。ただし、あなたがそれを行うことに縛られ、決心している場合:

できることの 1 つは、IEEE 浮動小数点数の形式を調べることです。

http://steve.hollasch.net/cgindex/coding/ieeefloat.html

次に、ファイルの最初のバイトから始めて、4 バイトまたは 8 バイトのデータを読み取ります。両方のセット (4 バイトと 8 バイト) を float 値と double 値に変換します。ファイルに含まれていることがわかっている値と一致するかどうかを確認します。もしそうなら、おそらく価格の相殺を見つけたでしょう。それを印刷し、オフセットを加えます。そうでない場合は、シークを 1 バイトずつ増やしてから、やり直してください。

そのようにしてすべての値を見つけることができれば、同様の操作を実行することで、実行時にバイナリ ファイルに安全にパッチを適用できる可能性があります。そこにあることがわかっている価格を探し、適切な場所で価格値を変更します。

データのランダムなシーケンスが一致する場合があるため、これはまったく確実ではありません。オフセット間の明確な距離、または常に存在するシジルに気付いた場合、またはおそらくさらに良いことに、それらのオフセット値をファイルに戻すことができれば、適度に安定したものがある可能性があります。

于 2009-06-25T20:15:53.083 に答える