• <menu id="w2i4a"></menu>
  • logo VMProtect用戶手冊

    文檔首頁>>VMProtect用戶手冊>>代碼保護軟件VMProtect用戶手冊之內(nèi)置功能(1)——字符串功能作用

    代碼保護軟件VMProtect用戶手冊之內(nèi)置功能(1)——字符串功能作用


    VMProtect是一種很可靠的工具,可以保護應(yīng)用程序代碼免受分析和破解,但只有在應(yīng)用程序內(nèi)保護機制正確構(gòu)建且沒有可能破壞整個保護的嚴(yán)重錯誤的情況下,才能實現(xiàn)最好的效果。

    本文繼續(xù)對VMProtect中強大的內(nèi)置腳本的使用進行介紹,希望對您有所幫助。

    【下載VMProtect最新試用版】

    VMProtect具有內(nèi)置的強大腳本語言LUA,極大地增強了VMProtect在每個保護階段的默認(rèn)保護功能。LUA語法非常類似于JavaScript,但與之不同的是,LUA不包含顯式類。不過,腳本語言允許輕松地實現(xiàn)類、繼承和事件等面向?qū)ο蟮木幊虣C制。

    對于如何使用腳本語言,可以進行以下三類的介紹:

    • 內(nèi)置功能
    • 事件

    第二部分:內(nèi)置功能

    除了腳本語言的類方法和屬性之外,VMProtect還為用戶提供了執(zhí)行基本操作的各種函數(shù)。一般的系統(tǒng)功能包括處理字符串、日期和數(shù)字、處理應(yīng)用程序的命令行和顯示消息;和專門的功能,以配合VMProtect的核心和水?。?/span>

    • 字符串
    • 表格
    • 運算
    • bit32
    • IO
    • OS
    • vmprotect


    字符串

    該庫提供了字符串操作的通用函數(shù),例如查找和提取子字符串以及模式匹配。 在Lua中索引字符串時,第一個字符位于位置1(而不是0,如在C中)。 允許指數(shù)為負(fù)數(shù),并從字符串末尾解釋為向后索引。 因此,最后一個字符位于-1,依此類推。

    字符串庫在表字符串中提供其所有函數(shù)。 它還為字符串設(shè)置元表,其中__index字段指向字符串表。 因此,您可以在面向?qū)ο蟮臉邮街惺褂米址瘮?shù)。 例如,string.byte(s,i)可以寫成s:byte(i)。

    string.byte (s [, i [, j]])

    返回字符s [i],s [i + 1],...,s [j]的內(nèi)部數(shù)字代碼。 i的默認(rèn)值為1; j的默認(rèn)值是i。 這些索引遵循相同的函數(shù)規(guī)則來更正。字符串?dāng)?shù)字代碼不一定是跨平臺可移植的。

    string.char (···)

    接收零個或多個整數(shù)。 返回一個長度等于參數(shù)個數(shù)的字符串,其中每個字符的內(nèi)部數(shù)字代碼等于其對應(yīng)的參數(shù)。數(shù)字代碼不一定是跨平臺可移植的。

    string.dump (function)

    返回一個字符串,該字符串包含給定函數(shù)的二進制表示形式,因此稍后對該字符串的加載將返回函數(shù)的副本。

    string.find (s, pattern [, init [, plain]])

    在字符串s中查找pattern的第一個匹配項。 如果找到匹配,則find返回此事件開始和結(jié)束的s的索引; 否則,它返回零。 第三個可選的數(shù)字參數(shù)init指定從哪里開始搜索; 它的默認(rèn)值是1,可以是負(fù)數(shù)。 值為true,作為第四個,可選參數(shù)plain關(guān)閉模式匹配工具,因此該函數(shù)執(zhí)行簡單的“查找子串”操作,模式中的字符不被視為魔術(shù)。 注意,如果給出了plain,那么也必須給出init。如果模式具有捕獲,則在成功匹配中,在兩個索引之后也返回捕獲的值。

    string.format (formatstring, ···)

    返回其可變數(shù)量的參數(shù)的格式化版本,遵循其第一個參數(shù)(必須是字符串)中給出的描述。 格式字符串遵循與ISO C函數(shù)sprintf相同的規(guī)則。 唯一的區(qū)別是不支持選項/修飾符*,h,L,l,n和p,并且有一個額外的選項q。 q選項在雙引號之間格式化一個字符串,必要時使用轉(zhuǎn)義序列以確保Lua解釋器可以安全地讀回它。例如:

      string.format('%q', 'a string with "quotes" and \n new line')

    string.gmatch (s, pattern)

    返回一個迭代器函數(shù),每次調(diào)用它時,都會返回字符串s上的模式的下一個捕獲。 如果pattern指定沒有捕獲,則在每次調(diào)用中生成整個匹配。例如,以下循環(huán)將遍歷字符串s中的所有單詞,每行打印一個:

     s = "hello world from Lua"
         for w in string.gmatch(s, "%a+") do
           print(w)
         end

    下一個例子將給定字符串中的所有對key=value收集到一個表中:

      t = {}
         s = "from=world, to=Lua"
         for k, v in string.gmatch(s, "(%w+)=(%w+)") do
           t[k] = v
         end

    string.gsub (s, pattern, repl [, n])

    返回s的副本,其中模式的所有(或前n個,如果給定的)出現(xiàn)已被repl指定的替換字符串替換,該替換字符串可以是字符串,表或函數(shù)。 gsub還返回第二個值,即發(fā)生的匹配總數(shù)。

    • 如果repl是字符串,則其值用于替換。 字符%用作轉(zhuǎn)義字符:%d形式的repl中的任何序列,d在1和9之間,代表第d個捕獲的子字符串的值。 序列%0代表整個匹配。 序列%%代表單個%。
    • 如果repl是一個表,則使用第一個捕獲作為鍵來查詢每個匹配的表。
    • 如果repl是一個函數(shù),那么每次匹配發(fā)生時都會調(diào)用此函數(shù),并按順序?qū)⑺胁东@的子字符串作為參數(shù)傳遞。
    • 如果表查詢或函數(shù)調(diào)用返回的值是字符串或數(shù)字,則將其用作替換字符串; 否則,如果它是假或零,則沒有替換。

    下面是一個示例:

      x = string.gsub("hello world", "(%w+)", "%1 %1")
         --> x="hello hello world world"
         
         x = string.gsub("hello world", "%w+", "%0 %0", 1)
         --> x="hello hello world"
         
         x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
         --> x="world hello Lua from"
         
         x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
         --> x="home = /home/roberto, user = roberto"
         
         x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
               return load(s)()
             end)
         --> x="4+5 = 9"
         
         local t = {name="lua", version="5.2"}
         x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
         --> x="lua-5.2.tar.gz"

    string.len (s)

    接收一個字符串并返回其長度。 空字符串“”的長度為0.嵌入的零計數(shù),因此“a \ 000bc \ 000”的長度為5。

    string.lower (s)

    接收一個字符串并返回此字符串的副本,所有大寫字母都更改為小寫。 所有其他字符保持不變。 大寫字母的定義取決于當(dāng)前的語言環(huán)境。

    string.match (s, pattern [, init])

    在字符串s中查找pattern的第一個匹配項。 如果找到一個,則匹配返回模式中的捕獲;否則它返回零。 如果pattern指定沒有捕獲,則返回整個匹配。

    string.rep (s, n [, sep])

    返回一個字符串,該字符串是由字符串sep分隔的字符串s的n個副本的串聯(lián)。 sep的默認(rèn)值是空字符串(即沒有分隔符)。

    string.reverse (s)

    返回一個與字符串s相反的字符串。

    string.sub (s, i [, j])

    返回從i開始并繼續(xù)直到j(luò)的s的子字符串; 我和j可以是負(fù)面的。 如果j不存在,則假定它等于-1(與字符串長度相同)。 特別是,調(diào)用string.sub(s,1,j)返回長度為j的s前綴,string.sub(s,-i)返回長度為i的后綴s。

    如果在負(fù)指數(shù)的平移之后,i小于1,則將其校正為1.如果j大于字符串長度,則將其校正為該長度。 如果在這些更正之后,i大于j,則該函數(shù)返回空字符串。

    string.upper (s)

    接收一個字符串并返回此字符串的副本,并將所有小寫字母更改為大寫。 所有其他字符保持不變。 小寫字母的定義取決于當(dāng)前的語言環(huán)境。

    - 持續(xù)更新中 -


    VMProtect正版授權(quán)專享在線訂購特享超低價格!還不趕緊加入你的訂購清單?>>更多詳情可點擊咨詢購買

    掃描關(guān)注“慧聚IT”微信公眾號,及時獲取最新動態(tài)及最新資訊

    1562572142.jpg


    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();