菜鳥學算法<一>基礎知識篇

菜鳥學算法<一>知識準備篇

剛剛上任,急着給兄弟們一點見面禮,嘿嘿


前言:論壇上有關算法分析的文章不少,也不少精品
但對於剛學CARACK來說,只是歎爲觀止
原因如下:
1.論壇高手如雲,菜鳥也不佔少數,有些甚至對彙編指令還不是很熟悉
2.不少算法分析文章分析的是相當完美了,但是作者僅僅展示給的是最終的成果,而沒有把分析的思路,分析的過程展示給我們

相信更多的兄弟需要的是一種分析思想,分析理念!
本文(本系列)將對這些問題展開逐一討論
第一篇:必要基礎知識
第二篇:軟件註冊流程
第三篇:算法分析實例


聲明:
1.以下內容都是個人在學習中的一些心得體會,寫給新手的,高手飄過
2.文章難免有疏漏之處,歡迎各位兄弟批評指正
3.本文原創於UnPaKcN,如轉載,請保持文章完整性


==文章結構==

1.ASCii表(基礎)

2.對特殊彙編指令講解(推薦)

3.定位程序註冊代碼


一、ASCII表

◇數 字類:
數    字  0  1  2  3  4  5  6  7  8  9  
十六進制  30 31 32 33 34 35 36 37 38 39
十  進制  48 49 50 51 52 53 54 55 56 57

◇大寫字母:
字    母  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  
十六進制  41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A
十  進制  65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90

◇小寫字母:
小寫字母  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
十六進制  61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A
十  進制  97 98 99 100101102103104105106107108109110111112113114115116117118119120121122

◇特殊字符:
字    符     !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  :  ;  <  =  >  ?  @  [  \  ]  ^  _  `  {  |  }  ~
十六進制  20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 3A 3B 3C 3D 3E 3F 40 5B 5C 5D 5E 5F 60 7B 7C 7D 7E
十  進制  32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 58 59 60 61 62 63 64 91 92 93 94 95 96123124125126


=>記憶技巧<=

數    字:'0'~'9' -> 30~39
大寫字母:'A'~'Z' -> 41~5A
小寫字母:'a'~'z' -> 61~7A

特別字符:空  格' '  -> 20
         連字符'-'  -> 2D
備註:連字符在序列號中經常用到,應熟記


■對字符的ASCII值一定要熟悉,深入分析非密碼學算法的關鍵
很多算法是在字符的ASCII值上"做文章"的

#舉個典型的例子
算法描述如下:
->取用戶名每個字符的ASCII值,累加以後做爲序列號
示例代碼
004B32BB  |>  8B4D F0       /mov     ecx, dword ptr [ebp-10]         ;  ASCII "[email][email protected][/email]"
004B32BE  |.  8A0C01        |mov     cl, byte ptr [ecx+eax]          ;  字符串的第i個字符
004B32C1  |.  81E1 FF000000 |and     ecx, 0FF                        ;  取cl
004B32C7  |.  0FAFC8        |imul    ecx, eax                        ;  ECX = ECX * EAX
004B32CA  |.  03F9          |add     edi, ecx                        ;  EDI = EDI + ECX
004B32CC  |.  40            |inc     eax                             ;  EAX++
004B32CD  |.  4A            |dec     edx                             ;  EDX--
004B32CE  |.^ 75 EB         \jnz     short 004B32BB                  ;  循環length(string)次


■大寫小寫轉化

大寫 -> 小寫: 加20H
小寫 -> 大寫: 減20H


■另外,還要對一下知識有一定了解

1.數值的十進制和16進制轉化
2.字符直接變數字
3.數字直接變字符
4....



二、彙編指令

1.數據傳送(Data transfer)
2.算術運算(Arithmetic)
3.邏輯運算和移位指令(Logic& Shift)
4.串操作(String manipulation)
5.控制轉移(Control Transfer)
6.處理器控制(Processor Control)

具體查閱8086系統指令手冊


常用指令特別講解

●指令MOV作用:
1.完成寄存器與寄存器、寄存器與內存之間數據傳遞
2.完成標誌位、密碼錶等的初始化
  其中密碼錶一般爲內存地址
      標誌位一般爲寄存器,少量是內存地址

●關於堆棧的指令
1.壓棧
  ESP的值要減少
2.出棧
  ESP的值要增加
跟蹤堆棧的時候,不同的ESP格式的內存地址指向同一內存地址

建議儘量不要在內存地址是ESP格式的情況下鎖定跟蹤


●目的地址傳送指令LEA
作用主要有兩個
1.裝載有效地址
  指令示例:
      mov     eax, dword ptr [esi+XX]          ;  
      lea     ebx, dword ptr [esi+XX]          ;  
  經過跟蹤發現[esi+XX]存放的是某字符串
 那麼EBX保存的是該字符串的地址

2.完成算術運算
      lea     eax, dword ptr [edi+XX]          ;
      等價於:EAX = EDI + XX;

●算術運算指令
求反:NEC
主要理解其用法:以 0 減之
往往和OR一起結合,完成對字符串長度的取值

乘法MUL
MUL ECX
運算:EAX = EAX * ECX

除法DIV
DIV ECX
運算:EAX = EAX / ECX
     EDX = EAX % ECX

●邏輯運算指令

"與"運算&

"或"運算^

"異或"運算|

以上三條指令常用作算法運算
註冊機時候分析起來比較頭痛

"測試"test
操作,進行異或運算
特點:
(1).不保存異或結果
(2).常和條件跳轉指令結合在一起

測試一般有三個方向
1.對標誌位值進行測試
格式如下
test EAX,EAX
je/jne xxxxxxxx

2.對某位進行測試
test EAX,4
je/jne xxxxxxxx

對倒數第三位進行測試

3.進行奇偶測試
test EAX,80000001
je/jne xxxxxxxx


●移位指令
左移->乘
SHL  EAX,2
等價於EAX = EAX * (2^2)

右移->除
SHR  EAX,3
等價於EAX = EAX / (2^3)




三、定位程序註冊代碼段

1.試註冊,判斷保護方式 
序列號(變相的序列號)
所謂變相的序列號就是程序沒有輸入註冊碼的地方,但會以文本文件方式通過讀取特定的文件
如keyfile等
這類仍可以歸類爲序列號保護方式


2.查殼/脫殼
有殼脫之
無殼進行下一步


3.定位程序註冊代碼段

(1)超級字符串定位
A.有錯誤提示"invalid regcode!"

B.沒有錯誤提示,但有正確提示"Thank you,..."

C.[unregistered]


(2)通過API斷點

A.有對話框
   bp MessageBoxA(W)

B.沒有對話框
   bp GetWindowTextA(W)
   bp GetDlgItemTextA(W)

C.重啓驗證
bp RegCreateKeyA(W)
bp RegDeleteKeyA(W)
bp RegQueryValueA(W)
bp RegCloseKey
bp RegOpenKeyA(W)

(3)其它
對付不同語言的工具選擇
DEDE:確定delphi的按鈕動作對應的代碼

VB:SmartCheck
注意:必須是明碼比較的VB程序

4.方法的選擇
選擇流程如下
字符串->對話框->文本->其它

調試還很依賴經驗和運氣,暫時無思路的程序可以先放放
有時候可以根據軟件註冊對話框樣式猜出大致用什麼思路定位,甚至可以猜到它的加密算法


5.AntiDbg
"高級話題",暫時迴避{偶暫時對這方面涉獵太少}o(n_n)o


暫時先告一段落,希望能對論壇的兄弟們有所幫助~~  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章