〜 スクリプト 〜
パックしたファイルを不正に取り出されないような対策 (要HSPCMP.DLL)

EXEにはPackFileで指定したファイルをDPMファイルとして埋め込むことが可能です。
埋め込んだファイルはコチラに書いた通り、埋め込んだファイル名が分かっていれば取り出すことが可能で、
第3者(利用者)は通常、どんな名前のファイルで埋め込められているのかわからないので、
取り出し方法が分かっていても取り出すことが出来ません。
しかし、第3者(利用者)でも、EXEのバイナリデータを見ることでファイル名を知ることが可能です。
提供者としては、埋め込んだファイルの不正取出を快く思わないのが普通でしょう。
HSP3以降でなければ対策を講じられませんが、HSPCMP.DLLの機能を用いることで、
少し特殊な暗号化を施したDPMファイルを作成することができ、
暗号化時に指定したキーコードが分からなければ、不正にファイル取出が出来ないようになります。
正規に読み込み・取り出す際、HSPCMP.DLL自体は不要ですが、暗号キーを指定する必要があります。
尚、HSPCMP.DLLは、他のDLLと異なり、HSP一式の同梱なしに配布することは出来ません。
ココで言う暗号化は、HSP2でもPackFile指定時に出来るファイル単位の暗号化のことではなく、
パックして1つにまとまったファイルの暗号化のことです。勘違いしないようにしましょう。
残念ながらHSP2では機能しませんので、対策する必要がある場合はHSP3以降に乗り換えてください。
	
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "hspcmp.as"

	sdim txt, 128, 4 // 0:パックするファイル 1:暗号化キー 2:作成DPM名 3:重複チェック
	sdim items, 128
	notesel items
	pos 370,  10 : button gosub "参照", *sansyou
	pos 440,  10 : button gosub "追加", *add
	pos 370,  40 : button gosub "削除", *del
	pos 370, 130 : button gosub "作成", *making
	objsize 200, 20
	pos  10,  10 : mes "パックするファイル"
	pos 160,  10 : input txt
	pos  10,  40 : mes "パック予定ファイル"
	pos 160,  40 : listbox index, 50, items
	pos  10, 100 : mes "暗号キー(0:標準)"
	pos 160, 100 : input txt.1, 100, 20
	pos  10, 130 : mes "作成DPM名"
	pos 160, 130 : input txt.2, 200, 20
	stop

*sansyou
	dialog "", 16, "追加ファイル"
	if stat : objprm 4, refstr
	return

*add
	dupchk = 0 // 重複追加制御フラグ
	repeat notemax
		noteget txt.3, cnt
		if txt.0 = txt.3 : dupchk = 1 : break
	loop
	exist txt
	// 追加できないファイル
	if strsize = -1 || dupchk = 1 {
		dialog "「" + txt + "」は追加できません。"
	// 追加可能なファイル
	} else {
		noteadd txt, -1
		objprm 5, items
	}
	objprm 4, ""
	return

*del
	if index ! -1 {
		noteget txt.3
		objprm 4, txt.3 // パックするファイルに戻す
		notedel index
		objprm 5, items // パック予定ファイルから除名する
	}
	return

*making
	if items = "" {
		dialog "パックするファイルを設定してください。"
		return
	}
	if txt.2 = "" {
		dialog "DPMを決定してください。"
		return
	}
	// PackFile作成
	chdir dir_exe
	notesave "packfile"
	// DPM作成
	pack_ini txt.2
	pack_make 1, int(txt.1)
	hsc_getmes txt.3 // HSPCMP.DLLからメッセージを受け取る
	dialog txt.3     // 結果を表示
	return