Crackme017の逆解析
1.観測プログラム
2.単純な検索ケース
シェルなしで書かれたVB5を使用してください。
3.プログラムの解析
ODローダー、検索文字列を使用し、従うために、コードをクリックしてください
プログラムを実行し、ブレークポイントで比較声明から遠くない見ることができ、ブレークポイントでプログラムオフ
ZFフラグを変更し、プログラムを続け、プログラムは成功を促し
で、見られるように、単にプログラムへの鍵であると比較します。
ここでも、ブレークポイントまで実行関数のパラメータを参照してください
あなたはこのプログラムは2つのパラメータがあり、見ることができます。パラメータが0である、引数FFFFがあります。
割り当てがあり、上記のコードを見つけ、コードを観察し続けます
これは、コード行で、パラメータ2の値がFFFFなります。
私たちは推測するベンチャー企業、FFFFは右のサインです。
パラメータ1の値は、プログラムが正しく求められ、FFFFに変更されます。
コード、ブレークポイントに頭部、チェックボタンをクリックして、プログラムがブレークダウンします
コードのデバッグダウン、実際に新しいプロンプトに登場したプログラムを見つけます
上記のコードを見ると、プログラムは時間の無駄を最初のサイクルを使用して、サイクルタイムの終わりマイナスサイクルの開始時間を使う時間が大きすぎると、それはプログラムがデバッグされていると判断され、それがヒントをポップアップ表示されます
長さが5未満であれば、プログラムは、エラーを直接ので、長さを検出します
次に、シーケンス番号の長さに応じてループを作成するプログラムは、シーケンス番号は長さのサイクル数であります
ループでは、プログラムは文字が同じとされているかどうかを順番に各文字を比較します
文字の後の文字と同じではないが、次のサイクルを入力する場合は、同じならば、それはメモリ0012F558で1を追加します
そして、比較のためのシリアル番号の長さマイナス1した後、同じ場合は、そのエラーにジャンプ
また、それは同じ値にしないすべてのシリアル番号、例えば、1であることを述べました。
次に、それはサイクルです
配列決定プログラム番号の長さ、及び、文字列に変換
そして、文字列に最後に左端の文字のシリアル番号を取得し、
最後に関数を呼び出し、すなわちシーケンス番号の長さの値とASCII文字シーケンス番号を乗じ、2つの数値を乗算
引き継いだ、プログラムは追加のシリアルナンバーが続きます
サイクル、プログラムおよび乗算結果の加算結果の終了が比較されます。それらが等しい場合は、FFFFが返され、0がなどを返すようにしたくありません。
最後に、比較及びFFFFは、同じ説明が正しいです。
4. RI
- 5未満でありません
- すべて同じではありません
- 最初のシーケンス番号とシーケンス番号とあなたの合計に等しい長さの積
RIは、書きたかったが、私は面白い法則を発見したので、私たちは、書かれたRIを持っていません
シリアル番号は5桁の時間になると。ちょうどその値は、ASCIIコード表内の上下2つの値のうちの隣接する2つの値を発見され、使用することができるシリアル番号であり、最初のシーケンス番号値を埋めます。
私のGithubで関連文書:https://github.com/UnreachableLove/160-Crackme/tree/master/Crackme017
2019年9月18日夜9時00分21秒