成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當前位置:首頁>>軟件教程>>新聞內容  
注冊機破解法的原理和應對方法
作者:周侃 發布時間:2003-11-5 10:50:07 | 【字體:

  認識注冊機破解法

  顧名思義,寫注冊機來破解軟件注冊的方法,就是模仿你的注冊碼生成算法或者逆向注 冊碼驗證算法而寫出來的和你一模一樣的注冊機。如果被寫出注冊機,你的軟件只好免費了。或者你必須更換算法,但以前注過冊的合法用戶都得被迫更換注冊碼了。

  上期《與暴力破解過招》的方法雖然可以避免爆破,但注冊機的威脅還是存在的。Cracker要寫注冊機必須詳細研究你軟件的驗證模塊,這必須先將你的軟件脫殼,再反匯編或者用調試器跟蹤。市面上許多加殼和保護軟件都吹噓不可能被脫殼,但到目前為止沒有一個軟件兌現了自己的諾言。由于CPU最終執行的都是有效指令,所以等你的程序自解壓完成后再從內存中Dump出來就可以實現脫殼。因此不要在殼上面花很多功夫,因為沒有這個必要。

  第一招:制造假相

  反匯編和調試器跟蹤都是不可能防止的,因為所有的Win32程序都必須通過API來調用Windows系統中的關鍵DLL的(如Kernel32.dll、GDI32.dll等),然而API是可以Hook的。我們只能從自己的代碼著手來保護我們的勞動果實了。

  為了自己調試和以后維護的方便,我們一般采用有意義的名字給我們的函數命名,可這給了Cracker可乘之機。例如這樣的函數是什么意思大家應該一目了然吧?IsRegistered(),IsLicensed(),LicenseVerify(),CheckReg()……這樣Cracker就可以輕松地從數千個函數中找到他的目標——你的注冊碼校驗函數!而且破解Delphi編寫的軟件還有一件TMG小組的破解利器——DeDe。它可以輕松地看到你軟件里的Form、Unit和函數名,還可以反匯編一部分代碼,更可以和Win32DASM合作反匯編更多的代碼,對Delphi編出的程序威脅極大。

  為了不給Cracker創造溫馨舒適的破解環境,要故意混亂(Obfuscate)我們的代碼,將軟件中所有的函數名全部替換成隨機生成的函數名。例如Func_3dfsa_fs32zlfv這個函數是什么意思?恐怕只有天知道了。網上有現成的代碼混亂器,按你使用的編程語言的種類可以找到一些。但要注意,只有當你要發布軟件時才使用它,而且一定注意備份源代碼。否則,當你看不懂你自己的代碼時就著急了:)

  第二招:用公匙,并改名

  另外,一定要使用公開密匙算法保護你的軟件。RSA、DSA和El Gamal之類的算法都可以從網上找到。但注意:將你算法單元中所有涉及到算法名稱的字符串全部改名。避免被Cracker發現你用的算法而模仿寫出注冊機來!你還可以張冠李戴,明明用的DSA,將名字全部替換成RSA。

  其它算法,如對稱算法和Hash算法也要注意改名,否則這樣:

  EncryptedCode = Blowfish(MD5(UserName),MD5(Key));

  //你的加密算法,使用了Blowfish(對稱算法)和MD5(Hash算法)

  雖然那些Cracker不了解Blowfish和MD5算法的原理,也不會逆向推測它們,但他們了解你的校驗算法的流程和算法名,便可馬上從網上找到類似的Blowfish和MD5算法包,從而模擬你的軟件仿造出注冊機。

  如果你用不常見的,算法如Skipjack(NASA美國航天局標準算法)、LOKI、3-WAY、Safer之類不出名但保密程度很高的算法,并且全部改名,這樣就會傷透他們腦筋了。

  當然,最好把Hash算法也全部改名,會給他們制造更多的困難。但注意,MD5和SHA之類的Hash初始值會被Cracker從內存中找到,這樣他就知道你用的Hash了。所以建議同時使用MD5的變形算法Ripe-MD(RMD)128或160或其它的Hash,如Tiger、Haval等算法。

  第三招:阻止別人調試

  還有一點,調試器對我們的威脅很大,我們不會讓Cracker們舒舒服服地使用SoftICE、TRW或OllyDbg來調試我們的程序。除了常用的MeItICE方法外,這里我給一個筆者寫的方法:

  {檢查自己的進程的父進程是否為Explorer.exe,否則是被調試器加載了}

  {不過注意,控制臺程序的父進程在WinNT下是Cmd.exe!}

  {注意加載TlHelp32.pas單元}

  procedure CheckParentProc;
  var //檢查自己的進程的父進程
  Pn: TProcesseNtry32;
  sHandle:THandle;
  H,ExplProc,ParentProc:Hwnd;
  Found:Boolean;
  Buffer:array[0..1023]of Char;
   Path:string;
  begin
  H:= 0;
  ExplProc:= 0;
  ParentProc:= 0;
  //得到Windows的目錄
  SetString(Path,Buffer)
  GetWindowsDirectory(Buffer,Sizeof(Buffer)- 1));
  Path:= UpperCase(Path)+ '\EX PLORER.EXE';//得到Explorer的路徑
  //得到所有進程的列表快照
  sHandle:= CreateToolHelp32Snap Shot(TH32CS_SNAPALL,0);
  Found:= Process32First(sHandle,Pn);//查找進程
  while Found do //遍歷所有進程
  begin
  if Pn.szExeFile = ParamStr(0)then //自己的進程
  begin
  ParentProc:= Pn.th32ParentProcessID://得到父進程的進程ID
  //父進程的句柄
  H:= OpenProcess(PRO CESS_ALL_ACCESS,True,Pn.th32Parent ProcessID);
  end
  else if UpperCase(Pn.szExeFile)= Path then
  ExplProc:= Pn.th32ProcessID;//Ex plorer的PID
  Found:= Process32Next(sHandle,Pn);//查找下一個
  end;
  //父進程不是Explorer,是調試器……
  if ParentProc <> ExplProc then
  begin
  TerminateProcess(H,0);//殺之!除之而后快也! :)
  //你還可以加上其它什么死機代碼來消遣消遣這位可愛的Cracker:)
   end
  end

  你可以在Delphi或者VC中試試,這樣可以把Delphi和VC殺掉了,因為你現在用的是Delphi和VC的內置調試器來運行你的程序。調試的時候你還是把它的注釋刪掉吧,發布時別忘記激活喲!

  第四招:保護字符串

  最后一個問題,這也是一個非常重要的問題:保護你的字符串!字符串在注冊模塊中非常重要!當一個富有經驗的Cracker破解你的軟件時,首先做的就是竊取你的字符串。比如他會輸入錯誤的注冊碼,得到你關于錯誤注冊碼的提示,通常是“無效的注冊碼,請重新輸入!”或者“Invalid key(please input again)”等等,然后用OllyDbg進行斷點調試或者用WinDASM、IDA Pro等靜態分析工具在被他脫殼后的程序中查找那個字符串,找到后進行分析。因此,請一定加密你的字符串! 使用時再臨時解密出來,而且要盡量少使用消息提示框,避免被Cracker找到漏洞。加密字符串不需要太復雜的算法,隨便找一個快速的對稱算法就可以了。

  最后提醒大家一句,不要在加密上花太多的功夫!你應該把更多的時間和精力都用來完善你的軟件,這樣會更合算。借用一位前輩的話來忠告大家吧:花點時間考慮你自己的軟件,看看它是否值得保護?如果沒人用你的軟件,保護也就沒有意義了,不要過高估計你的軟件“對世界的重要性”!

 


文章來源:電腦報
·常用注冊機的使用方法
 放生
 愚愛
 夠愛
 觸電
 白狐
 葬愛
 光榮
 畫心
 火花
 稻香
 小酒窩
 下雨天
 右手邊
 安靜了
 魔杰座
 你不像她
 邊做邊愛
 擦肩而過
 我的答鈴
 懷念過去
 等一分鐘
 放手去愛
 冰河時代
 你的承諾
 自由飛翔
 原諒我一次
 吻的太逼真
 左眼皮跳跳
 做你的愛人
 一定要愛你
 飛向別人的床
 愛上別人的人
 感動天感動地
 心在跳情在燒
 玫瑰花的葬禮
 有沒有人告訴你
 即使知道要見面
 愛上你是一個錯
 最后一次的溫柔
 愛上你是我的錯
 怎么會狠心傷害我
 不是因為寂寞才想
 親愛的那不是愛情
 難道愛一個人有錯
 寂寞的時候說愛我
主站蜘蛛池模板: 富顺县| 维西| 云浮市| 建始县| 健康| 白山市| 荆门市| 望都县| 通许县| 株洲县| 四会市| 获嘉县| 浑源县| 金山区| 京山县| 陕西省| 鄯善县| 昌邑市| 开鲁县| 宜良县| 湖口县| 嘉义县| 博湖县| 新乐市| 池州市| 德兴市| 莱州市| 安达市| 廊坊市| 叙永县| 邵武市| 阿尔山市| 容城县| 宜良县| 徐州市| 惠来县| 错那县| 辽源市| 新建县| 五河县| 修水县|