1. 程式人生 > >第五章——演示版保護技術-序列號保護方式

第五章——演示版保護技術-序列號保護方式

1.獲取序列號的思路:
  • 根據輸入註冊碼後,軟體通常會在快取區內獲取輸入的資訊進行比較,我們可以找到註冊碼的地方,進行跟蹤比較。常用的API有:GetWindowText, GetDIgItemText, GetDlgItemInt,
  • 也可以根據顯示對話方塊,告訴使用者是否正確,這樣可以根據這一點棧回溯檢視註冊碼 ,這樣的API:MessageBox ShowWindow CreateDiaologParamA,CreateDialog,IndirectParamA
  • 還有一種思路,可以根據序列號存在的位置,有的序列號會放在登錄檔中,例如RegQueryValueExA 。如果序列號存再INI檔案中,可以使用GetPrivateProfileString、GetPrivateProfileIntA、GetProfileString。 如果序列號存在普通的檔案中,可以使用CreateFile _lopen
  2.資料約束性——大多數的序列號會在某個時刻存放在記憶體中,資料約束性就是根據這一點,多數情況下存放在使用者輸入的序列號±90h位元組的地方,我們可以根據OD來檢視記憶體,聯絡上下文可以檢視到真正序列號   3.利用提示資訊:在OD或者IDA(shift+F12)中,檢視對應的ASCLL或者Unicode字串來定位到關鍵程式碼附近進行序列號回溯   4.字串比較形式:         序列號分析時候,加密者會有效防止解密者修改跳轉指令,會採取一些技巧,迂迴的比較字串
  •  暫存器直接比較
            mov  eax   [   ]             mov  ebx   [   ]             cmp  eax, ebx             jz XXX  
  • 函式比較
            call XXXXXX             test  eax, eax             jz xxx                 函式比較通常檢視返回值(大部分BOOL型別)  
  •     串比較
            lea edi  [  ]             lea esi   [  ]             repz  cmpsd             jz  XXX