2015-04-01 61 views
-3

我想用VMProtect's Markers來標記包含應該受保護的字符串常量的代碼塊。Delphi 7 - VMProtect實現的一些錯誤

uses VMProtectSDK; 

VMProtectBegin(MARKER_NAME); 
... 
VMProtectEnd; 

// DELPHI FUNCTION EXAMPLE : 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
VMProtectBegin('Test marker'); 
if StrToIntDef(Edit1.Text, 0) mod 17=13 then 
    MessageDlg(VMProtectDecryptStringA('Correct password'), mtInformation, [mbOK], 0) 
else 
    begin 
    MessageDlg(VMProtectDecryptStringA('Incorrect password'), mtError, [mbOK], 0); 
    Edit1.SetFocus; 
    end; 
VMProtectEnd; 
end; 

我試圖實現它,但我得到了一些錯誤:

[Error] Unit1.pas(xx): Unterminated string 
[Error] Unit1.pas(xx): ')' expected but identifier 'Krypt1' found 
[Error] Unit1.pas(xx): Unterminated string 
[Error] Unit1.pas(xx): Missing operator or semicolon 
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' 

如何解決這個問題呢?我可以問你教我如何編寫正確的代碼行(或示例)。

我在我的Delphi 7代碼的實現:

procedure TForm1.IdMappedPortTCP1Execute(AThread: TIdMappedPortThread); 
var Payload, Host, Header, Krypt1, Krypt2:String; 
begin 
VMProtectBegin 
(' 
Krypt1 := EncryptString('website.com', 'pwd'); 
Krypt2 := EncryptString('website.net', 'pwd'); 
'); 
VMProtectEnd; 
     if (pos('CONNECT',athread.NetData)<>0) or (pos('HTTP',athread.NetData)<>0) then begin 
     if host.Text = 'Host' then begin 
      Payload := 'GET http://'+Krypt1+'/ HTTP/1.1'+#13#10; 
      Host := AddHeader(AThread.NetData,'Host: '+Krypt2+''#13#10); 
      AThread.NetData := Payload+Host; 
      end; 
    end; 
end; 

我希望得到任何幫助。

乾杯, RZV

+0

您提供的節目究竟是如何從Delphi代碼調用,具有特定的代碼示例的鏈接。 (這是兩張圖片之間的內容)很明顯,你發佈的代碼是無效的Delphi代碼(你不能像在這裏完成的那樣將兩行源代碼作爲函數參數傳遞)。仔細閱讀鏈接頁面,並研究它提供的代碼,這確實會加密嵌入的**字符串常量** - 它不會以您嘗試使用它的方式加密**變量**,因爲這些內容變量在編譯時不知道.. – 2015-04-01 22:28:04

+0

謝謝。那麼,你能幫我寫一個基於上述VMWare的delphi7函數來在我的代碼中使用嗎? – RzV 2015-04-02 00:42:45

+0

你能解釋一下VMWare是如何突然出現的。你能不能認識到你問過關於編譯錯誤的問題?我希望你不要指望我們爲你寫程序。 – 2015-04-02 08:59:47

回答

0
VMProtectBegin 
(' 
Krypt1 := EncryptString('website.com', 'pwd'); 
Krypt2 := EncryptString('website.net', 'pwd'); 
'); 

當編譯器說,這是一個未終止字符串。報價打開一個字符串,必須在同一行上終止。多行字符串沒有語法。最重要的是,您需要避免出現在字符串文字中的引號字符。

你正在嘗試寫這樣的事情我想:

VMProtectBegin 
('Krypt1 := EncryptString(''website.com'', ''pwd'');'+sLineBreak+ 
'Krypt2 := EncryptString(''website.net'', ''pwd'');'); 

這將編譯,但我不認爲它會做任何有用的東西。您需要將標記名稱傳遞給VMProtectBegin。我完全不清楚傳遞包含Pascal代碼的字符串是否合理。

也許你需要的是這樣的:

VMProtectBegin(nil); 
Krypt1 := EncryptString('website.com', 'pwd'); 
Krypt2 := EncryptString('website.net', 'pwd'); 
VMProtectEnd; 
+0

請注意,該問題詢問編譯錯誤,這是我試圖回答。 – 2015-04-01 20:40:29

+0

嗨,謝謝你的回答。你的第一個語法給了我[很多錯誤](http://pastebin.com/a76TJg4Y)。第二,沒有發現錯誤,但由於** nil **命令,VMProtect無法隱藏和保護我的字符串。 – RzV 2015-04-01 21:09:12

+0

對不起,我忘了逃避報價。我現在已經做到了。如果您需要使用VMProtect的幫助,請向供應商尋求支持。我想我回答了關於編譯錯誤的問題,遲到了。 – 2015-04-02 08:01:17