質問

私は前職を使用していました第三者のコンポーネント基本的にはただのDLLとヘッダファイルです。そのモジュールの取り扱いで印刷にWin32.ただし、当社の成分たbankcruptいなかったバグを報告います。

とやりがいを感じていました不具合を修正しました自分自身をアンインストールします。何より驚いたこと抗デバッグコードをほとんどどこでも通常の IsDebuggerPresent, なものに興味をもったのはこの

    ; some twiddling with xor 
    ; and data, result in eax 
    jmp eax 
    mov eax, 0x310fac09 
    ; rest of code here 

最初に見いだけの強化のルーチンと呼ばれた、そのものだったバナナ.しばらく実感したのはビットtwiddling結果も同じで、のjmp eax常に飛び込んに mov eax, 0x310fac09 ました。私は解剖のバイトがありましたが、 0f31, は、 rdtsc し、その指示を測定するために使用した時間の間でも話のDLL.

なので私の質問です: 何かお気に入りの抗デバッグトリック?

役に立ちましたか?

解決

私のお気に入りのトリックは無名のマイクロプロセッサのための単純な命令エミュレータを書くことです。

コピー保護とコア機能のいくつかは、マイクロプロセッサ用にコンパイル(GCCはここに大きな助けである)とバイナリブロブとしてプログラムにリンクされます。

この背後にある考え方は、コピープロテクトが通常のx86コードに及び、そのようなを分解することができないとして存在していないこと、です。これはプログラムからコア機能を削除しますので、あなたは、どちらかの全体エミュレータを削除することはできません。

プログラムをハックする唯一のチャンスは、マイクロプロセッサエミュレータが何をリバースエンジニアリングすることです。

エミュレートするのは簡単だったので、私はエミュレーションのためのMIPS32を使用しました(それは、単純なCコードのわずか500行を取りました)。物事はもっとあいまいにするために、私は生のMIPS32のオペコードを使用していませんでした。代わりに、各オペコードは、それ自身のアドレスとXORた。

コピー保護のバイナリはゴミデータのように見えます。

強くお勧めします!亀裂が出てきた前に、それは(それがゲームプロジェクトのためだった)より6ヶ月かかっています。

他のヒント

私は多くのRCEコミュニティのメンバーとなってきたし、ハッキング&クラッキングの私の公正なシェアを持っていました。私の時間から私は、このような薄っぺらなトリックは、通常、揮発性とかなり無益であることを実現しました。一般的な抗デバッグトリックのほとんどは、すべての「ポータブル」OS固有ではありません。

上記の例では、あなたはおそらく、インラインアセンブリとx64アーキテクチャ上でコンパイルするときMSVCでサポートされていないnaked機能__declspec、両方を使用しています。十分な長さのために逆転された前述のトリックが、誰もがほんの数分でそのトリックを発見し、倒すことができるようになります実装する方法はまだ、もちろんあります。

だから、一般的に、私は検出のためIsDebuggerPresentのAPIを利用する外反デバッグトリックを使用しないことをお勧めしたいです。代わりに、私はあなたがスタブおよび/または仮想マシンをコーディングすることをお勧めしたいです。私は自分の仮想マシンをコード化し、今で長年にわたってそれを改善してきたと私はそれがはるかに私が今までに私のコードを保護に関してで作った最高の決断となっていることを正直に言うことができます。

デバッガとして親にアタッチ&キー変数を変更した子プロセスのスピンオフ。子プロセス常駐を維持し、特定のキー操作のためのIPCの一種として、デバッガのメモリ動作を使用するためのボーナスポイント。

私のシステムでは、同じプロセスに2つのデバッガをアタッチすることはできません。

彼らは物事は何もブレーク/ wを改ざんしようとしない限り、

この1のいいところです。

リファレンス初期化されていないメモリ! (そして、他の黒魔術/ vodoo ...)

これは非常にクールな読み取りです。 http://spareclockcycles.org/ 2012/02/14 /スタック死霊術-破っ・デバッガ・バイ・調達・デッド/

最も近代的な難読化を行なう方法、仮想マシン。

基本的に一部のオブジェクトコードに変換する独自のbytecode形式です。その後を追加したり、小さな仮想マシンがこのコードです。唯一の方法を適切にデバッグのこのコードをコードエミュレータまたは逆アセンブラにおVMの指導の形式です。もちろん必要なと思い性能です。もbytecodeているコミュニケーションを取れより遅くなネイティブコードです。

最も古い技てなし現在:

  • Isdebuggerpresent:非常にラメが簡単なパッチ
  • その他のデバッガ/ブレークポイント検出
  • Ring0。ユーザーに嫌トドライバーが実際に休憩なんかのシステム等
  • その他の些細なものを誰もが知っていたこのソフトウェアに不安定です。覚えている場合でも割れないことにごプログラムの不安定なもので、このunstabilityする責任をお願いします。

また、VMコードの溶液に自分が良いプログラム販売な利用に一つだけ指示形式です。で多様な、異なる部品のコードを異なる形式です。このようにすべてのコードできないように文書でエミュレータ/逆アセンブラ.例えば、MIPS液人に提供するようで簡単に壊れたのでMIPS命令形式で文書化し、分析のリーディングプロジェクトIDAで分解したものです。

リストの命令をサポートしていまIDA pro逆アセンブラ

私は、人々は、信頼性の高い固体であり、行うことが宣伝されて何がソフトウェアを作成することを好むだろう。彼らはまた、合理的なライセンスを持つ合理的な価格のためにそれを販売していること。

私は、私が唯一の顧客とベンダーのための問題を引き起こすのライセンス体系を複雑しているベンダーを扱うあまりにも多くの時間を無駄にしていることを知っています。常にこれらのベンダーを避けるために、私のオススメです。原子力発電所で働く私たちは、特定のベンダーの製品を使用することを余儀なくされているので、それらのライセンススキームに対処する必要がすることを余儀なくされています。私は個人的に私たちの作業ライセンス製品を与えるために彼らの失敗を扱う浪費している時間を取り戻すための方法があったことを望みます。それは聞いて小さなことのように思えるが、まだ自分の利益のためにあまりにもトリッキー得る人々のため難しいものだそうです。

私は、第二の仮想マシンの提案。私は(今)はmipsel-ELF-gccで生成されたバイナリを実行することができるMIPS Iシミュレータを実現しました。そのコード/データ暗号化機能(AESまたは任意の他のアルゴリズムを用いて)に追加する、自己シミュレーションの能力は(あなたがシミュレータを入れ子にしていることができます)、あなたはかなり良いコードの難読化ツールを持っています。

MIPS Iを選択する便利な機能は、1)それは私のデスクトップ上に、Cで2)私は書くことができ、デバッグにコードを実装し、それが終了したときだけMIPSのためにそれをクロスコンパイルするのは簡単だということです。カスタムオペコードをデバッグするか、手動でカスタムのコードを記述する必要はありませんVM ..

私の個人的なお気に入りは、コプロセッサ(のブリッタの)プロセッサから独立した大量のデータ転送を行うことがあるアミーガ、上にありました。このチップは、すべてのメモリをクリアし、タイマーIRQからリセットするように指示されます。

あなたはプロアクションリプレイカートリッジを取り付けた場合は、CPUを停止すると、ブリッタのメモリをクリアし続けることを意味する。

合法的の真ん中に

計算のジャンプを見たが本当に実際の命令指示を隠すには、私のお気に入りです。彼らは、とにかく人間のために検出するのは簡単ですが、多くの場合、自動化ツールの混乱、それをアップ。

また、スタック上のリターンアドレスを交換するには良い時間の無駄になります。

デバッガを介してアセンブリを除去するために NOP に使用することは有用トリックです。もちろん、バックのコードを置くことは多くの困難です!!!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top