特定のアドレスを検索するには?

解決


十夜  2004-11-11 08:44:50  No: 86619

初めまして。十夜と申します。
VBでオーディオプレーヤを作成しておりまして、再配布防止の為にMACアドレスを認証Keyにしています。
Player.exeの初期はMACアドレスが"XXXXXXXXXXXX"。
これを別ExeにてバイナリモードでOpenして同じファイル名で書込をし、
アドレスを書き換える際に、
j = 19325 
For k = 0 To 11
 Put #FreeFile, j, MAC_ADD(k)  
 J = j + 2
Next
としています。jに代入している値はPlayer.exeをバイナリエディタで開いて、"XXXXXXXXXXXX"を見つけて、そのアドレスを10進数になおしています。
MAC_ADD(k)は画面で入力された値を1文字づつ格納している配列です。
これだとPlayer.exeに変更がある度に"XXXXXXXXXXXX"のアドレスが、
変わってしまうので、直接アドレスを指定するのではなく、"XXXXXXXXXXXX"
を検索して、先頭のアドレスを取得するようには出来ないでしょうか?
何卒ご教授の程、宜しく御願い致します。


ねろ  2004-11-11 19:58:57  No: 86620

めんどくさがらずに一つずつ比べればいいだけでは。
Dim n, m
Dim b() As Byte
Dim c() As Byte
Dim Fno As Integer
Dim MacAdd As Long 'Macアドレスの書かれた番地
Dim Flg As Boolean
s = "123456789ABC" '探すMACアドレス
ReDim c(Len(s) * 2)

For n = 1 To Len(s) * 2 Step 2
    '一つ飛びにセット
    c(n) = Asc(Mid(s, (n + 1) / 2, 1))
Next n

FileName = "project1.exe"
ReDim b(FileLen(FileName))
Fno = FreeFile
Open FileName For Binary As #Fno
Get #Fno, , b
Close #Fno
For n = 1 To UBound(b) - UBound(c)
    For m = 1 To UBound(c) Step 2
        '全て一致ならTrueで抜ける
        Flg = False
        If b(n + m) = c(m) Then
            Flg = True
        Else
            Exit For
        End If
    Next
    If Flg = True Then
        '全て一致アドレス発見
        MacAdd = n + 1
        Exit For
    End If
Next
もう少し良いアルゴリズムが有りそうだけど。。。


十夜  2004-11-12 07:21:48  No: 86621

ねろさん、返信が遅くなり申し訳ありません。
バイトでいつもこんな時間なので・・・。
御陰様で解決いたしました。本当にありがとうございます。

>もう少し良いアルゴリズムが有りそうだけど。。。
ねろさんのプログラムを参考に自分の力でいろいろやってみようと
思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加