プラグインとクラックされたソフトウェアの理論と実践

プラグインとクラックされたソフトウェアの理論と実践

1理論

1.1 異なるオペレーティング システムでの実行可能ファイル

  1. Windows【PE】

PE 形式 (Portable Executable) は、
Windows での主要な実行可能ファイル形式です。名前に騙されないでください。PE ファイルは Windows 上のファイルでなければなりません。

  1. Linux【エルフ】

Linuxシステムの実行可能ファイル(ELFファイル、Executable and Linkable Format、実行可能リンク形式)は、先頭がファイルヘッダであり、プログラムのレイアウトやファイル全体の属性などの情報を記述します。ファイルが実行可能であるか、静的または動的リンクであるか、エントリアドレスおよびその他の情報が含まれます。含まれるプログラムヘッダーは実行可能コードではないため、生成されたファイルは純粋なバイナリ実行可能ファイルではありません。プログラムヘッダーを含むこのファイルをメモリに読み込んだ後、 、プログラムヘッダーからエントリアドレスを読み取り、実行のためにエントリアドレスにジャンプします。

  1. マック【マッハオー】

Mach-O は、Mach Object file format の略で、実行可能ファイル、オブジェクト コード、ダイナミック ライブラリ、コア ダンプに使用されるファイル フォーマットです。a.out 形式の代替として、Mach-O は拡張性を高め、シンボル テーブル内の情報へのアクセス速度を向上させます。

1.2 Windows でのソフトウェアクラッキングに関する知識

◼ Windowsプラットフォームソフトウェアのクラッキングに必要な知識
ファイル形式:PEファイル
アセンブリ言語:x86、x64アセンブリ
ツール:Ollydbg
Windows API

◼ よく使用される OD ショートカット キー
F2: ブレークポイントの切り替え
F9: プログラムの実行
F7: ステップイン
F8: ステップオーバー
Ctrl + G: コードの検索

1.3 梱包と開梱

  • ソフトウェアクラッキングに関する一般的なアイデア
    ここに画像の説明を挿入します

  • パッケージ化した後にソフトウェアをクラッキングするためのアイデア (通常のソフトウェアの上に追加のレイヤー)
    ここに画像の説明を挿入します

1.4 プラグインの性質

プラグインには 2 つの一般的な方法があります。

  • メモリ内のデータを変更する
    ここに画像の説明を挿入します

  • メモリ内のコードを変更する
    ここに画像の説明を挿入します

OD ソフトウェアを使用してアセンブリ コードを変更し、新しい .exe ファイルとして再保存します。

其实,数据和代码并没有本质区别,在内存中都是01

ここに画像の説明を挿入します

2 実践的なステップ

ソフトウェアアドレス:

链接:https://pan.baidu.com/s/1pIogCuXPR87p91og09zZZQ?pwd=zj8k 
提取码:zj8k

2.1 環境の準備

Visual Studio 2022: C++ デスクトップ開発 (MFC)、Visual Studio 拡張機能開発

ここに画像の説明を挿入します
拡張機能の開発:
ここに画像の説明を挿入します

2.2 OD アセンブリ (Ollydbg)

.exe ファイルをアセンブリに変換する

2.4 チーターエンジン

メモリ内の数値変化を検出するために使用されます

ここに画像の説明を挿入します

2.5 一般的な手順

ここに植物大战僵尸例があります

  1. Visual Studio を開いて MFC プロジェクトを作成します (Java のスイングに似ています)
    ここに画像の説明を挿入します
- 自定义log宏,简化打印
- 事件注册(手动、自动)
- 绑定变量(手动、自动)
- 单选框状态读取(勾选、不勾选)
  1. Plants vs. Zombies の実行ファイル (.exe ファイル) を OD にドラッグし、アセンブリを観察します。
  • アセンブリロジックを変更する
    ここに画像の説明を挿入します
前后修改尽量不动字节数,比如:前面一行代码占字节,我们修改后的代码占2字节,
那么我们就需要使用NOP填充,相当于是空,当cpu执行到nop时,会直接跳过,nop
只起到一个占用位置的作用

アイデア:

①秒杀僵尸:直接用僵尸的原有血量 - 僵尸的血量
②无限阳光:阳光存在一个struct中,通过地址找到值,然后使用API修改内存中的值
  • クラックされたexeファイルをエクスポートする
    ここに画像の説明を挿入します
  1. spy++を使用してウィンドウを検索

Windows プラグイン デスクトップ開発では、実行中のファイルのハンドル (ID) を取得し、制御する必要がある場合があります。

ここに画像の説明を挿入します
4. Visual Studio でコードを変更 [部分]

ゾンビを即座に殺し、無制限の太陽の光

// 用来监控游戏的线程
DWORD monitorThreadFunc(LPVOID lpThreadParameter) {
    
    
	while (1) {
    
    
		// 获得植物大战僵尸窗口的句柄
		HWND windowHandle = FindWindow(CString("MainWindow"), CString("植物大战僵尸中文版"));

		if (windowHandle == NULL) {
    
    
			g_dlg->m_bnKill.SetCheck(FALSE);
			g_dlg->m_bnSun.SetCheck(FALSE);
			g_dlg->m_bnKill.EnableWindow(FALSE);
			g_dlg->m_bnSun.EnableWindow(FALSE);

			g_processHandle = NULL;
		} else if (g_processHandle == NULL) {
    
    
			g_dlg->m_bnKill.EnableWindow(TRUE);
			g_dlg->m_bnSun.EnableWindow(TRUE);

			// 获得植物大战僵尸的进程ID
			DWORD processPid;
			GetWindowThreadProcessId(windowHandle, &processPid);
			// 获得植物大战僵尸的进程句柄
			g_processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processPid);
		}

		if (g_dlg->m_bnSun.GetCheck()) {
    
     // 需要无限阳光
			DWORD value = 9990;
			WriteMemory(&value, sizeof(value), 0x6A9EC0, 0x320, 0x8, 0x0, 0x8, 0x144, 0x2c, 0x5560, -1);
		}

		// 休息睡眠
		Sleep(1000);
	}
	return NULL;
}

おすすめ

転載: blog.csdn.net/weixin_45565886/article/details/128769701#comments_28471683