3

.py ソース ファイルに変換できる 2 つの .pyo python ファイルがありますが、decompyle の検証で示唆されているように、完全にはコンパイルされません。

したがって、ソース コードを見ると、config.pyo には配列内の変数が含まれているだけであることがわかります。

ADMIN_USERIDS = [116901、141、349244、39、1159488]

これらの ID の 1 つを変更するために、元の .pyo と逆アセンブリ、または必要なものをすべて取得したいと思います。

または....

model.pyo では、ソースは

if (productsDeveloperId != self.getUserId()):

私がやりたいのは、!= を 16 進編集して == にすることだけです。Windows exe プログラムでは簡単ですが、適切な python 逆アセンブラーがどこにも見つかりません。

どんな提案も歓迎します...私はバイトコードを読むのが初めてで、Pythonも初めてです。

4

5 に答える 5

0

これが直接役立つかどうかはわかりませんが、Pythonにはすでにバイトコード逆アセンブラーがあります。

逆の操作、つまりバイトコードの生成には、いくつかの代替手段があります。一方では標準のコンパイラ パッケージがあり、次にBytecodeAssembler ライブラリもあり、ニーズにより適している場合があります。

于 2012-09-11T10:20:09.793 に答える
0

6.0 までの IDA には、.pyc 逆コンパイル モジュールがありません。

于 2010-10-09T01:10:14.487 に答える
0

.pyo ファイルを .py に変換してから .py を編集し、.py ファイルに対して python を実行します。Python は .pyo ファイルを再生成します pyo を編集しないでください

Pythonバイトコードはわかりませんが、文字列 == または 1= が .pyo ファイルに表示されるとは思えません

はるかに良い方法は、元の .py ファイルを取得して使用することです。!= を == に変更したいという暗示として間違ったプログラムを提供した場合は、サプライヤーにバグを修正するよう依頼できます。

于 2010-05-11T10:03:31.220 に答える
0

質問者のブライアンです。

試行錯誤と16進編集、16進編集...そしてソースを変換するだけで、必要なことを完了しました...変更内容を確認してください..最終的に探していたものを絞り込むまで。定数 (管理者 ID) は、変換された 16 進数 (明らかに) として 16 進数ファイルにありましたが、逆です。

!= を見つける方法や場所はまだわかりません

IDA Pro の最新バージョンは Python をサポートしていると聞きましたが、Python で動作させる方法を学んでいません。

于 2010-05-11T21:40:28.683 に答える
0

ごく最近、この種の作業に役立つツールを開発しました。一部のものはまだ非常にアルファ版ですが、いくつかの作業を行うことで、ここで使用できた可能性があります。

いくつかの逆アセンブラがあり、通常は逆コンパイラに表示されます。もちろん、私が好きなのはxdisと呼ばれるものです。これは、バイトコード ファイルの内容について最も多くの情報を提供するためです。C++ で記述された pycdas というものもあり、pycdc デコンパイラを含むプロジェクトに含まれています。その部分は新しいものではありません。

また、逆コンパイラを使用したことを示しているように、完全ではありませんでした。uncompyle6と呼ばれる以降のバージョンでは、これらのバグが解決されていることを願っています。そうでない場合は、github の問題を報告してください。

Ok。それでは、新しいものについて説明します。最近、私は逆アセンブラを修正して修正しやすくし、それを pyc バイトコード形式に戻す Python アセンブラを作成しました。これはまだアルファ版です。http://github.com/rocky/python-xasmで見つけてください。

これで、定数と条件テストに簡単な変更を加えることができます。

では、具体的に質問されましたが、ここでは完全には回答されていないため、条件テストに進みましょう。

次の単純な Python コードを検討してください。

  ___file__ == '__main'

それを pydisasm で分解しましょう:

...
# Constants:
#    0: '__main'
#    1: None
# Names:
#    0: ___file__
  1:           0 LOAD_NAME                 0 (___file__)
               3 LOAD_CONST                0 ('__main')
               6 COMPARE_OP                2 (==)
               9 POP_TOP
              10 LOAD_CONST                1 (None)
              13 RETURN_VALUE

Ok。 したがって、これは 2 としてエンコードされ==た命令のオペランドであることがわかります。COMPARE_OP

このhttps://docs.python.org/3.6/library/dis.html#opcode-COMPARE_OPのドキュメントを見ると (これはPython 3.6用ですが、ほとんどすべてのPythonバージョンで同じです)、わずかに役立つ説明:

The operation name can be found in cmp_op[opname].

しかし、秘密のデコーダ リング情報については、おそらくディスクのどこかにある opcode.py の Python ソース コードにアクセスする必要がありますが、ここにリンクがあります: https://github.com/python/cpython/blob/ master/Lib/opcode.py#L24がある場所

 cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is', ...

==whileは 2、!=は 3であることがわかります。

[116901, 141, 349244, 39, 1159488]私の逆アセンブラーのセクションに表示される定数を変更するConstants場合は、基本的にそこで数値を変更してからアセンブラーを実行します。

于 2017-07-07T06:10:08.283 に答える