Thursday, August 23, 2012

デバッグ:手動でWindows、プログラム、電気ショック療法をクラックする方法を学ぶ

デバッグ:手動でWindows、プログラム、電気ショック療法をクラックする方法を学ぶ

デバッグは、DOSの最近のバージョン(私はDOSで外出荷を開始したときに知らない)が付属していたプログラムです。とにかく、すべてのWindowsユーザーが既にそれを持っている必要があります。

それは、プログラムを逆アセンブルdebugingと割れて、ブートセクタのような "隠れた"メモリ領域を読み込み、および大いに多くのための素晴らしいツールです。

我々は彼が分からないので、以下は、私たちは信用できない作者のアセンブリのチュートリアルからコピーされました。

DOSとタイプ "デバッグ"に入るには、このようなプロンプトが表示されます。
-

"?"とタイプすると、次の応答を取得する必要があります:
[アドレス]を組み立てる
Cの範囲のアドレスを比較する
ダンプD [範囲]
Eアドレスを入力して[ファイル一覧]
Fの範囲のリストを埋める
行くG [=アドレス] [アドレス]
六角H value1がvalue2を
入力Iポート
負荷L [アドレス] [ドライブ] [firstsector] [番号]
Mの範囲のアドレスを移動
名前N [パス名] [引数リスト]
出力Oポートバイト
続行P [=アドレス] [番号]
Qを終了
R [レジスタ]を登録する
検索S範囲リスト
トレースT [=アドレス] [値]
U [範囲]をアセンブル
書き込みW [アドレス] [ドライブ] [firstsector] [番号]
拡張メモリXA [#ページ]割り当てる
拡張メモリの割り当てを解除XD [ハンドル]
マップ拡張メモリページXM [Lpage] [PPAGE] [処理]
拡張メモリのステータスXSを表示

これらの各コマンドを通過することができます。
アセンブルします。

-
107A:0100

この時点で、あなただけのアセンブラを使用するように、いくつかのプログラムを組み立て開始することができます。あなたはおそらくわかりますしかし、デバッグ、アセンブラは非常に限られている。簡単なプログラムを入力しようとすることができます。

-
107A:0100 MOV AH、02
107A:0102 MOV DL、41
107A:0104 INT 21
107A:0106 INT 20
-gオプション
A

プログラムが正常に終了し

それは我々が前の章の終わりに行ったのと同じプログラムです。あなたは単に "g"で入力され、また、セットアップの部分はありませんか注意プログラムを実行する方法に注目?デバッグはあまりにもそれをサポートするために限られているためです。
あなたが組み立てるで行うことができますもう一つは、デフォルトでは、あなたが開始するアドレスを指定し、すべてのCOMファイルが開始されることがあるので、これは0100です。
比較:

比較は、メモリの2ブロックを取得し、並べて表示され、バイトのバイト。貸し付けは、例を実行します。かなり外のデバッグは、すでに "q"を使用していない場合。今すぐタイプ "デバッグC:\ command.com"

-cを0100リットル8 0200
10A3:0100 7A 06 10A3:0200

このコマンドは8バイトの長さの0200と0100を比較してオフセット。デバッグは違った場所で応答しました。 2つの位置が同じであればすべてが同じデバッグであれば、デバッグは単に任意の応答せずにプロンプ​​トに戻って、それらを省略しました。
ダンプ:

ダンプは、指定されたメモリセグメントをダンプします。再度、アセンブリプログラムは、コードをテストするには:

C:\>デバッグ
-
107A:0100 MOV AH、02
107A:0102 MOV DL、41
107A:0104 INT 21
107A:0106 INT 20
-dを0100リットル8
107A:0100 B4 02 B2 41 CD 21 CD 20
A. ...!

"B4 02 B2 41 CD 21 CD 20"あなただけの機械語で行われたプログラムです。

B4 02 = MOV AH、02
B2 41 = MOV DL、41
CD 21 = INT 21
CD 20 = INT 20

"... A.!"の部分は、ASCIIでのプログラムです。 "。"非印字可能文字を表します。そこにAに注目してください。
次のコマンドを入力します。

これはハードのコマンドのいずれかです。それを使用すると、特定のメモリ領域を入力する/変更することができます。それはAの代わりにBを出力するように、我々のプログラムを変更することができます
-E 0103 < - セグメント0103で編集プログラム
107A:0103 41.42 < - 変更41から42
-gオプション
B

プログラムが正常に終了し
-
その驚くべきではなかった?
記入してください:

このコマンドはかなり無駄ですが、誰が知っている....
これは、指定されたデータで指定したメモリ量を満たします。例えば、我々のプログラムであることを起こる0108へセグメント0100からのすべてのメモリをクリアすることができます。
-fを0100リットル8 0 < - ファイル0で8バイトの長さのために0100をオフセット
-dを0100リットル8 < - それが働いていることを確認
107A:0100 00 00 00 00 00 00 00 00 .......
うん、それが働いた。
移動します。

これまで我々が作成したプログラムを起動しに行く(G)を使用しました。しかし、多くのために使用することができます移動します。 0100:たとえば、することができます我々は107Bでプログラムを実行したいと言う:
-R CS < - CSレジスタは107Bを指すように設定
CS 107A
:107B
-G = 100

また、ブレークポイントを設定できます。
- < - 私たちは何かを持っているので、独自のプログラムを入力します。
107A:0100 MOV AH、02で動作するように
107A:0102 MOV DL、41
107A:0104 INT 21
107A:0106 INT 20
-G 102 < - 107Aにブレークポイントを設定する:0102

この時点で、プログラムはすべてのレジスタと、現在の命令を表示するには、停止します。
HEX:

これは非常に役立ちます。それは、2つの16進値を減算し、追加されています。
-H 2 1
0003 0001 < - 2H + 1 + = 3Hと2h - 1H = 1H

後で見るようにこれは、プログラムの長さを計算するために非常に便利です。
入力:

これは、より高度なコマンドの一つであり、私は今のところあまりにもそれについて話をしないことに決めました。それはあなたのコンピュータの任意のI / Oポート(キーボード、マウス、プリンタなど)からデータのバイトを読み込みます。

-I 3FD
60
-

あなたのデータは異なる場合があります。
あなたが知りたい場合には、3FDも最初の非同期アダプタとして知られているCOMポート1です。
負荷:

このコマンドは、2つの形式を持っています。これは、nameコマンド(n)で指定されたファイル名を読み込むために使用することも、特定のセクターをロードすることができます。

-nをC:\ command.com
-lを

これは、デバッグにcommand.comをロードします。有効なプログラムがロードされたときにすべてのレジスタは、設定し、プログラムを実行できるようになります。
他の方法はもう少し複雑ですが、また、より便利ポテンシャル。構文は次のとおりです。

load>に<address>は<drive letter/> <sector> <amount L
-L 100 2 10 20

これは、ドライブから0100をオフセットC(0 = A、1 = B、2 = Cなど)から始まる20時間のセクタのセクタ10hをロードします。これはあなたが削除したファイルを回復するのに役立ちます。
移動します。

この動きは、開始アドレスからバイトを受け取り、宛先アドレスに移動します。これは、元のプログラムに影響を与えることを心配することなく、それを操作するよりも、空き領域に一時的なデータの移動に非常に良いです。私が後で取得するには、rコマンドと組み合わせて使用​​する場合に特に便利です。例を試すことができます。
- < - 私たちは何かを持っているので、独自のプログラムを入力します。
107A:0100 MOV AH、02で動作するように
107A:0102 MOV DL、41
107A:0104 INT 21
107A:0106 INT 20
-M 107A:0100 L 8 107B:0100 < - 107Aから、より8バイト:107Bに0100:0100
-E 107B:0103 < - 編集107B:0103
107B:0103 41.42 < - と、それを変更42(
-D 107A:0100 L 8 < - それが働いたことを確認してください
107A:0100 B4 02 B2 41 CD 21 CD 20 ... A.!
-D 107B:0100 L 8
107A:0100 B4 02 B2 42 CD 21 CD 20 ... B.!。
-M 107B:0100 L 8 107A:0100 < - 我々は変化を好むので、元のプログラムを復元します。
名前:

これは、I / Oコマンドに使用するファイル名でアップデバッグに設定します。あなたは、ファイル拡張子を含める必要があり、あなたはほかのコマンドを使用することがあります。

-nをC:\ command.com
出力:

正確にはそれがどう思うか。出力は、I / Oポートにものを送信します。あなたはその上にそれらのクールなライトが付いている外付けのモデムを持っていれば、これをテストすることができます。モデムがオンになっているどのポートを見つけると、以下の対応する16進数を使用します。

COM 1 = 3F8 - 3FF(鉱山の3DF)
COM 2 = 2F8 - 2FF
COM 3 =? - ? (誰かが知っていれば、私に知らせてください)

今までは01h送信する​​ことにより、DTA(データ端末レディ)ビットをオンにします。
は、-o XXX 1 < - XXXは、16進数でのCOMポートです。

あなたがモデムを見て、エンターキーを押しするとすぐに、あなたは光の光を参照してください。あなたは、出力コマンドを使用して、さらにより多くの楽しみを持つことができます。誰かが "あなたの"コンピュータ上でそれらのBIOSパスワードのいずれかを置くと言う。通常はそれを取り除くために電池を取り出して持っているではなく、もはやだろう:

MI / AWARD BIOS
は、-o 70 17
は、-o 71 17

QPHOENIX BIOS
は、-o 70 FF
は、-o 71 17

QGENERIC
は、-o 70 2E
は、-o 71 FF

これらのコマンドは、このようにパスワードを無効に、BIOSのメモリがクリアされます。
手順に従います。

私は後で説明します通常ヤナギトレース一緒に使用するプログラムの実行における収入、。 goコマンドと同様に、起動するには、そこからアドレスを指定することができます

=アドレスを使用して、
-P 2

デバッグレジスタと実行する現在のコマンドで応答します。
非常に:

これは、デバッグ、それを終了し、デバッグの最も先進的な機能となるようになっています!

-Q
登録:

このコマンドは、すべてのレジスタの現在値を表示するために、または、それらを手動で設定することができます。これは、後で見るようにファイルを書き込むために非常に便利です。

-R AX
AX:011B
:5
-
検索:

もう一つとても便利なコマンド。それは、特定のバイトの発生、またはセグメント内の一連のバイトを見つけるために使用されています。データは、文字、または16進値で缶を検索します。進数の値は、それらの間にスペースまたはカンマで入力され、文字は引用符(シングルまたはダブル)で囲まれています。また、同じ文字列で進と文字を検索することができます。
-NC:\ command.com < - 負荷command.com我々が検索するためのいくつかのデータを持っているので、
-lを
-S 0 L 0 "MS-DOS" < - "MS-DOS"を検索して全体のメモリブロック
10A3: - :39E9 39E9 <10A3内の文字列を発見した

注:検索で大文字と小文字が区別される!
トレース:

これは、デバッグの真の偉大な機能です。それは、それぞれの後の命令とレジスタを表示し、一度プログラムを1命令をトレースします。 goコマンドのようなあなたは、どのように長い間から実行を開始する場所を指定することができます。
- < - はい、このことを再び
107A:0100 MOV AH、02
107A:0102 MOV DL、41
107A:0104 INT 21
107A:0106 INT 20
-T = 0100 8

あなたがトレースする命令の量を省いている場合、あなたが望む限り、実行を継続するに進んでください(p)を使用することができます。
アセンブル:

コー​​ドのブロックをUnassembles。デバッグのための偉大な(とクラッキング)
-uを100 L 8 < - オフセット100から始まる8バイトをunassembles
107A:0100 MOV AH、02 < - デビューの応答
107A:0102 MOV DL、41
107A:0104 INT 21
107A:0106 INT 20
書き込み:

このコマンドはロードすることが非常に似ています。と、正確な位置を指定することによって、名前を使用して:それはまた、動作することができます2つの方法を持っています。詳細については、ロードするためのバックアップを参照してください。

注:CXレジスタを記述するためにファイルサイズを設定する必要があります!
注:書き込みは書き込みません​​EXEまたはHEXファイルを[SIZE = 7] [SIZE = 14]。