MobileSearch(手機號碼歸屬地查詢) v2.0註冊演算法,附序號產生器~~~~~~ (30千字)

看雪資料發表於2002-03-29

名稱:MobileSearch(手機號碼歸屬地查詢) v2.0 測試版 資料庫[2002-02-17]
下載:http://www.SearchCN.net (作者主頁)或天天安全網(正式版)

簡介:本軟體收錄了34300多條手機號碼歸屬地資訊,可以詳細查詢到手機號碼的開戶地資訊,包括該號碼所屬省份、城市、長途區號以及該號碼SIM卡型別。號碼資源收錄容量極大,可以方便地幫你瞭解任何一個手機來電、簡訊息的來源地。

限制:在2002年2月3日前,您可以使用該註冊測試版的全部功能,在2002年2月3日後,除了您不能使用線上更新資料庫功能外,其他功能完全可以使用,但是,您無法獲得我們的升級服務。

原因:不久前下載了MobileSearch v2.0 測試版,裡面附有另類序號產生器,但不能用,於是自己動手,可能因為是測試版,它的保護很弱,輸入註冊碼後會直接明碼比較,所以找了個註冊碼自己使用.上個星期,在網上看到出了正式版,下載後發現保護加強,不直接比較,須退出後驗證,試著把測試版的註冊碼填入可註冊成功,說明它演算法沒變(已證實,請留意文章後部分),雖然可確定它的註冊資訊儲存在MobileSearch.ini中,可下bpx GetPrivateProfileString來追,但感覺測試版比較容易入手,於是決定寫個序號產生器以免日後麻煩,當追到它演算法部分時更堅定了這個決心!

為何釋出序號產生器:正式版中的使用條款上只說未註冊不能使用超過一個月,不可修改本軟體,不可使用修改版,不可獲取和使用軟體資料庫,沒說不能使用序號產生器:-) 另外我覺得,使用一個這麼複雜煩瑣而且應該不可逆的演算法算出註冊碼,最後來個明碼比較,這樣的保護不如沒有好,不過也難怪作者好象是第一次寫軟體,但願以後我們的程式設計師都不要這樣為好!同時說明一下如何用程式本身來寫序號產生器

開始:軟體是用Borland C++寫的,沒加殼,我的註冊名Sam Von,我是用TRW直接bpm註冊名找到下面程式碼的,用TRW而不用w32dasm的原因是可以比較容易確定那裡才是演算法的開始,因為程式可能會分幾個部分來算註冊碼,缺點是很容易迷失方向.以下資料如不特別說明均為16進位制數.另外要注意測試版未註冊會在標題處有(註冊版)字樣,每次進入都會提示,註冊成功後會消失!

==Main Code=================================================
這裡比較明顯,第1第2個Call是一樣的,說明程式經過了兩次相同的演算法來獲得正確的註冊碼,第3個Call是進行註冊碼比較的地方,很簡單我沒貼出來,我的目的是瞭解演算法寫出序號產生器

0187:004075D6  MOV      BYTE [EBP-77],00
0187:004075DA  PUSH    DWORD [EBP-70]    <---這裡指向一個字串"MobileSearch2",重要資料
0187:004075DD  LEA      ECX,[EBP+FFFFFF6C] <---ecx指向我的註冊名"Sam Von"
0187:004075E3  PUSH    ECX               
0187:004075E4  CALL    00401C00
0187:004075E9  ADD      ESP,BYTE +08
0187:004075EC  MOV      [EBP-6C],EAX
0187:004075EF  PUSH    DWORD [EBP-70]    <---"MobileSearch2"
0187:004075F2  PUSH    DWORD [EBP-6C]    <---這裡指向上面Call算出的結果,稱為
0187:004075F5  CALL    00401C00              中間註冊碼,用它代替註冊名來運算
0187:004075FA  ADD      ESP,BYTE +08
0187:004075FD  MOV      [EBP-6C],EAX
0187:00407600  LEA      EAX,[EBP+FFFFFF7C]
0187:00407606  PUSH    EAX
0187:00407607  PUSH    DWORD [EBP-6C]    <---這裡就是正確的註冊碼了
0187:0040760A  CALL    004707F0
0187:0040760F  ADD      ESP,BYTE +08
0187:00407612  TEST    EAX,EAX
0187:00407614  JNZ      NEAR 00407809
==Main Code End================================================

==Main Call====================================================
這個演算法可心說又臭又長,我寫不出它的演算法公式,光是在追Call 1的過程裡我就做了4頁紙的筆記,Call 2我就沒做記錄了,如果想了解它的演算法請大家自己追一下,我只講個大概:
1.程式先用字元"MobileSearch2"的前兩位查表,得到兩個資料,並將前兩位當作註冊碼的前兩位
2.將註冊名的每一位X2,如Sam Von(53 61 6D 20 56 6F 6E)-->A6 C2 DA 40 AC DE DC 00
3.註冊名最多隻取8位,不夠就用0補上
4.將2步得到的資料進行N次移位,補位,去位,前後4位相運算,查表得到"中間"註冊碼
5.重複1~4步,不過要將2中的註冊名用"中間"註冊碼代替來運算,最後查表得正確註冊碼

注:下面註解中所說的"第2次運算"是指進入Main Code中(004075F5 CALL 00401C00)這個Call裡記憶體的狀態,因為雖然兩個Call的過程一樣,不過兩次運算中記憶體的資料有了變化,除錯過程中請注意[ebp+??]這樣的地址!!

0187:00401C00  PUSH    EBP
0187:00401C01  MOV      EBP,ESP
0187:00401C03  ADD      ESP,FFFFFF40
0187:00401C09  XOR      EAX,EAX
0187:00401C0B  MOV      [EBP-14],EAX
0187:00401C0E  XOR      EDX,EDX
0187:00401C10  MOV      [EBP-18],EDX          第1次運算這裡為0,第二次運算這裡是
0187:00401C13  LEA      ECX,[EBP-38]      <---Call 2的運算結果37 8E 9C 0C  FD F9 75 96
0187:00401C16  MOV      [EBP-3C],ECX          可先不管這一步
0187:00401C19  MOV      EAX,[EBP+0C]
0187:00401C1C  CMP      BYTE [EAX],00    <---[eax]="MobileSearch2"
0187:00401C1F  JNZ      00401C25
0187:00401C21  MOV      DL,41
0187:00401C23  JMP      SHORT 00401C2A
0187:00401C25  MOV      ECX,[EBP+0C]
0187:00401C28  MOV      DL,[ECX]          <---"M"
0187:00401C2A  MOV      [00487694],DL    <---這裡是最後儲存註冊碼的地方
0187:00401C30  XOR      EAX,EAX
0187:00401C32  MOV      AL,DL
0187:00401C34  MOV      [EBP-0C],EAX
0187:00401C37  MOV      ECX,[EBP-0C]
0187:00401C3A  XOR      EAX,EAX
0187:00401C3C  MOV      AL,[ECX+0047E4B4] <---用"M"查表,資料請參照序號產生器的資料DATA1
0187:00401C42  MOV      [EBP-14],EAX      <---Save
0187:00401C45  MOV      EDX,[EBP+0C]
0187:00401C48  CMP      BYTE [EDX+01],00
0187:00401C4C  JNZ      00401C52
0187:00401C4E  MOV      CL,41
0187:00401C50  JMP      SHORT 00401C58
0187:00401C52  MOV      EAX,[EBP+0C]
0187:00401C55  MOV      CL,[EAX+01]      <---"o"
0187:00401C58  MOV      [00487695],CL
0187:00401C5E  XOR      EAX,EAX
0187:00401C60  MOV      AL,CL
0187:00401C62  MOV      [EBP-0C],EAX
0187:00401C65  MOV      EDX,[EBP-0C]
0187:00401C68  XOR      EAX,EAX
0187:00401C6A  MOV      AL,[EDX+0047E4B4] <---用"o"查表,並shl它
0187:00401C70  SHL      EAX,04
0187:00401C73  MOV      [EBP-18],EAX      <---Save
0187:00401C76  XOR      EDX,EDX
0187:00401C78  MOV      [EBP-04],EDX
0187:00401C7B  MOV      ECX,[EBP+08]
0187:00401C7E  MOV      AL,[ECX]          <---"Sam Von"
0187:00401C80  MOV      [EBP-3D],AL
0187:00401C83  INC      DWORD [EBP+08]
0187:00401C86  CMP      BYTE [EBP-3D],00
0187:00401C8A  JZ      00401CA1
0187:00401C8C  MOV      DL,[EBP-3D]
0187:00401C8F  ADD      EDX,EDX          <---ADD
0187:00401C91  MOV      ECX,[EBP-04]
0187:00401C94  MOV      [EBP+ECX-2C],DL
0187:00401C98  INC      DWORD [EBP-04]
0187:00401C9B  CMP      DWORD [EBP-04],BYTE +08
0187:00401C9F  JC      00401C7B
0187:00401CA1  CMP      DWORD [EBP-04],BYTE +08
0187:00401CA5  JNC      00401CB8
0187:00401CA7  MOV      EAX,[EBP-04]
0187:00401CAA  MOV      BYTE [EBP+EAX-2C],00
0187:00401CAF  INC      DWORD [EBP-04]    <---最多取8位,不夠補0
0187:00401CB2  CMP      DWORD [EBP-04],BYTE +08
0187:00401CB6  JC      00401CA7
0187:00401CB8  LEA      EDX,[EBP+FFFFFF40]
0187:00401CBE  PUSH    EDX
0187:00401CBF  LEA      ECX,[EBP-2C]
0187:00401CC2  PUSH    ECX
0187:00401CC3  CALL    00401514          <---Call 1先進去看看
0187:00401CC8  ADD      ESP,BYTE +08
0187:00401CCB  PUSH    DWORD [EBP-18]<---340
0187:00401CCE  PUSH    DWORD [EBP-14]<---18
0187:00401CD1  LEA      EAX,[EBP+FFFFFF40]  <---指向Call 1結果 lea eax,[esp]=mov eax,esp
0187:00401CD7  PUSH    EAX
0187:00401CD8  LEA      EDX,[EBP-1C]
0187:00401CDB  PUSH    EDX
0187:00401CDC  LEA      ECX,[EBP-20]
0187:00401CDF  PUSH    ECX
0187:00401CE0  CALL    00401825      <---進入Call 2
0187:00401CE5  ADD      ESP,BYTE +14  <---esp指向Call 2結果
0187:00401CE8  MOV      EAX,[EBP-20]  <---Call 2結果前4位
0187:00401CEB  MOV      [EBP-24],EAX
0187:00401CEE  MOV      DL,[EBP-24]
0187:00401CF1  AND      DL,FF
0187:00401CF4  MOV      ECX,[EBP-3C]
0187:00401CF7  MOV      [ECX],DL
0187:00401CF9  INC      DWORD [EBP-3C]
0187:00401CFC  MOV      EAX,[EBP-24]
0187:00401CFF  SHR      EAX,08
0187:00401D02  AND      AL,FF
0187:00401D04  MOV      EDX,[EBP-3C]
0187:00401D07  MOV      [EDX],AL
0187:00401D09  INC      DWORD [EBP-3C]
0187:00401D0C  MOV      ECX,[EBP-24]
0187:00401D0F  SHR      ECX,10
0187:00401D12  AND      CL,FF
0187:00401D15  MOV      EAX,[EBP-3C]
0187:00401D18  MOV      [EAX],CL
0187:00401D1A  INC      DWORD [EBP-3C]
0187:00401D1D  MOV      EDX,[EBP-24]
0187:00401D20  SHR      EDX,18
0187:00401D23  AND      DL,FF
0187:00401D26  MOV      ECX,[EBP-3C]
0187:00401D29  MOV      [ECX],DL
0187:00401D2B  INC      DWORD [EBP-3C]
0187:00401D2E  MOV      EAX,[EBP-1C]
0187:00401D31  MOV      [EBP-24],EAX
0187:00401D34  MOV      DL,[EBP-24]
0187:00401D37  AND      DL,FF
0187:00401D3A  MOV      ECX,[EBP-3C]
0187:00401D3D  MOV      [ECX],DL
0187:00401D3F  INC      DWORD [EBP-3C]
0187:00401D42  MOV      EAX,[EBP-24]
0187:00401D45  SHR      EAX,08
0187:00401D48  AND      AL,FF
0187:00401D4A  MOV      EDX,[EBP-3C]
0187:00401D4D  MOV      [EDX],AL
0187:00401D4F  INC      DWORD [EBP-3C]
0187:00401D52  MOV      ECX,[EBP-24]
0187:00401D55  SHR      ECX,10
0187:00401D58  AND      CL,FF
0187:00401D5B  MOV      EAX,[EBP-3C]
0187:00401D5E  MOV      [EAX],CL
0187:00401D60  INC      DWORD [EBP-3C]
0187:00401D63  MOV      EDX,[EBP-24]
0187:00401D66  SHR      EDX,18
0187:00401D69  AND      DL,FF
0187:00401D6C  MOV      ECX,[EBP-3C]
0187:00401D6F  MOV      [ECX],DL
0187:00401D71  INC      DWORD [EBP-3C]
0187:00401D74  XOR      EAX,EAX
0187:00401D76  MOV      [EBP-10],EAX
0187:00401D79  MOV      BYTE [EBP-3E],80  <---這幾個資料是要參與運算的
0187:00401D7D  MOV      BYTE [EBP-30],00
0187:00401D81  MOV      DWORD [EBP-04],02
0187:00401D88  MOV      BYTE [EBP-3D],00
0187:00401D8C  XOR      EDX,EDX
0187:00401D8E  MOV      [EBP-08],EDX
0187:00401D91  SHL      BYTE [EBP-3D],1
0187:00401D94  MOV      ECX,[EBP-10]
0187:00401D97  MOV      AL,[EBP+ECX-38]  <---取結果第一位
0187:00401D9B  AND      AL,[EBP-3E]
0187:00401D9E  JZ      00401DA4
0187:00401DA0  OR      BYTE [EBP-3D],01
0187:00401DA4  SHR      BYTE [EBP-3E],1
0187:00401DA7  CMP      BYTE [EBP-3E],00
0187:00401DAB  JNZ      00401DB4
0187:00401DAD  INC      DWORD [EBP-10]
0187:00401DB0  MOV      BYTE [EBP-3E],80
0187:00401DB4  INC      DWORD [EBP-08]
0187:00401DB7  CMP      DWORD [EBP-08],BYTE +06  <---上面這一小段作運算
0187:00401DBB  JC      00401D91
0187:00401DBD  XOR      EDX,EDX
0187:00401DBF  MOV      DL,[EBP-3D]
0187:00401DC2  MOV      CL,[EDX+0047E534] <---查表得到註冊碼,請參照序號產生器的szDATA
0187:00401DC8  MOV      EAX,[EBP-04]      <---eax=2
0187:00401DCB  MOV      [EAX+00487694],CL <---跳過註冊碼前兩位"Mo"來儲存
0187:00401DD1  INC      DWORD [EBP-04]
0187:00401DD4  CMP      DWORD [EBP-04],BYTE +0D  <---註冊碼為13(D)位
0187:00401DD8  JC      00401D88
0187:00401DDA  MOV      BYTE [004876A1],00 <---最後補上0
0187:00401DE1  MOV      EAX,00487694  <---d 487694,"中間"註冊碼和正確註冊碼都儲存在此
0187:00401DE6  MOV      ESP,EBP
0187:00401DE8  POP      EBP
0187:00401DE9  RET   


==Call 1=================================================
0187:00401514  PUSH    EBP        <---這裡可能有花指令
0187:00401515  MOV      EBP,ESP
0187:00401517  ADD      ESP,BYTE -1C
0187:0040151A  MOV      EAX,[EBP+0C]
0187:0040151D  MOV      [EBP-18],EAX
0187:00401520  MOV      EDX,[EBP+08]
0187:00401523  MOV      [EBP-14],EDX
0187:00401526  MOV      ECX,[EBP-14]
0187:00401529  XOR      EAX,EAX        這裡指向註冊名變形後的結果
0187:0040152B  MOV      AL,[ECX]  <---A6 C2 DA 40  | AC DE DC 00
0187:0040152D  MOV      [EBP-04],EAX
0187:00401530  INC      DWORD [EBP-14]
0187:00401533  MOV      EDX,[EBP-14]
0187:00401536  XOR      ECX,ECX
0187:00401538  MOV      CL,[EDX]
0187:0040153A  SHL      ECX,08
0187:0040153D  OR      [EBP-04],ECX
0187:00401540  INC      DWORD [EBP-14]
0187:00401543  MOV      EAX,[EBP-14]
0187:00401546  XOR      EDX,EDX
0187:00401548  MOV      DL,[EAX]
0187:0040154A  SHL      EDX,10
0187:0040154D  OR      [EBP-04],EDX
0187:00401550  INC      DWORD [EBP-14]
0187:00401553  MOV      ECX,[EBP-14]
0187:00401556  XOR      EAX,EAX
0187:00401558  MOV      AL,[ECX]
0187:0040155A  SHL      EAX,18
0187:0040155D  OR      [EBP-04],EAX
0187:00401560  INC      DWORD [EBP-14]
0187:00401563  MOV      EDX,[EBP-14]
0187:00401566  XOR      ECX,ECX
0187:00401568  MOV      CL,[EDX]
0187:0040156A  MOV      [EBP-08],ECX
0187:0040156D  INC      DWORD [EBP-14]
0187:00401570  MOV      EAX,[EBP-14]
0187:00401573  XOR      EDX,EDX
0187:00401575  MOV      DL,[EAX]
0187:00401577  SHL      EDX,08
0187:0040157A  OR      [EBP-08],EDX
0187:0040157D  INC      DWORD [EBP-14]
0187:00401580  MOV      ECX,[EBP-14]
0187:00401583  XOR      EAX,EAX
0187:00401585  MOV      AL,[ECX]
0187:00401587  SHL      EAX,10
0187:0040158A  OR      [EBP-08],EAX
0187:0040158D  INC      DWORD [EBP-14]
0187:00401590  MOV      EDX,[EBP-14]
0187:00401593  XOR      ECX,ECX
0187:00401595  MOV      CL,[EDX]
0187:00401597  SHL      ECX,18            這上面是將它變成這樣
0187:0040159A  OR      [EBP-08],ECX  <---AC DE DC 00 | A6 C2 DA 40
0187:0040159D  INC      DWORD [EBP-14]
0187:004015A0  MOV      EAX,[EBP-08]  <---這裡下面進行了前後4位相互間的運算
0187:004015A3  SHR      EAX,04            除錯時注意幾個地方就能搞清楚,
0187:004015A6  XOR      EAX,[EBP-04]      [ebp-8]是前4位,[ebp-4]是後4位
0187:004015A9  AND      EAX,0F0F0F0F      [ebp-c]儲存臨時結果,其它的是些資料
0187:004015AE  MOV      [EBP-0C],EAX      指標和計數器等
0187:004015B1  MOV      EDX,[EBP-0C]
0187:004015B4  XOR      [EBP-04],EDX
0187:004015B7  MOV      ECX,[EBP-0C]
0187:004015BA  SHL      ECX,04
0187:004015BD  XOR      [EBP-08],ECX
0187:004015C0  MOV      EAX,[EBP-04]
0187:004015C3  SHL      EAX,12
0187:004015C6  XOR      EAX,[EBP-04]
0187:004015C9  AND      EAX,CCCC0000
0187:004015CE  MOV      [EBP-0C],EAX
0187:004015D1  MOV      EDX,[EBP-04]
0187:004015D4  XOR      EDX,[EBP-0C]
0187:004015D7  MOV      ECX,[EBP-0C]
0187:004015DA  SHR      ECX,12
0187:004015DD  XOR      EDX,ECX
0187:004015DF  MOV      [EBP-04],EDX
0187:004015E2  MOV      EAX,[EBP-08]
0187:004015E5  SHL      EAX,12
0187:004015E8  XOR      EAX,[EBP-08]
0187:004015EB  AND      EAX,CCCC0000
0187:004015F0  MOV      [EBP-0C],EAX
0187:004015F3  MOV      EDX,[EBP-08]
0187:004015F6  XOR      EDX,[EBP-0C]
0187:004015F9  MOV      ECX,[EBP-0C]
0187:004015FC  SHR      ECX,12
0187:004015FF  XOR      EDX,ECX
0187:00401601  MOV      [EBP-08],EDX
0187:00401604  MOV      EAX,[EBP-08]
0187:00401607  SHR      EAX,1
0187:00401609  XOR      EAX,[EBP-04]
0187:0040160C  AND      EAX,55555555
0187:00401611  MOV      [EBP-0C],EAX
0187:00401614  MOV      EDX,[EBP-0C]
0187:00401617  XOR      [EBP-04],EDX
0187:0040161A  MOV      ECX,[EBP-0C]
0187:0040161D  ADD      ECX,ECX
0187:0040161F  XOR      [EBP-08],ECX
0187:00401622  MOV      EAX,[EBP-04]
0187:00401625  SHR      EAX,08
0187:00401628  XOR      EAX,[EBP-08]
0187:0040162B  AND      EAX,00FF00FF
0187:00401630  MOV      [EBP-0C],EAX
0187:00401633  MOV      EDX,[EBP-0C]
0187:00401636  XOR      [EBP-08],EDX
0187:00401639  MOV      ECX,[EBP-0C]
0187:0040163C  SHL      ECX,08
0187:0040163F  XOR      [EBP-04],ECX
0187:00401642  MOV      EAX,[EBP-08]
0187:00401645  SHR      EAX,1
0187:00401647  XOR      EAX,[EBP-04]
0187:0040164A  AND      EAX,55555555
0187:0040164F  MOV      [EBP-0C],EAX
0187:00401652  MOV      EDX,[EBP-0C]
0187:00401655  XOR      [EBP-04],EDX
0187:00401658  MOV      ECX,[EBP-0C]
0187:0040165B  ADD      ECX,ECX
0187:0040165D  XOR      [EBP-08],ECX
0187:00401660  MOV      EAX,[EBP-08]
0187:00401663  AND      EAX,FF
0187:00401668  SHL      EAX,10
0187:0040166B  MOV      EDX,[EBP-08]
0187:0040166E  AND      EDX,FF00
0187:00401674  OR      EAX,EDX
0187:00401676  MOV      ECX,[EBP-08]
0187:00401679  AND      ECX,00FF0000
0187:0040167F  SHR      ECX,10
0187:00401682  OR      EAX,ECX
0187:00401684  MOV      EDX,[EBP-04]
0187:00401687  AND      EDX,F0000000
0187:0040168D  SHR      EDX,04
0187:00401690  OR      EAX,EDX
0187:00401692  MOV      [EBP-08],EAX
0187:00401695  AND      DWORD [EBP-04],0FFFFFFF
0187:0040169C  XOR      EAX,EAX
0187:0040169E  MOV      [EBP-1C],EAX
0187:004016A1  MOV      ECX,[EBP-1C]            <---從這裡開始至ret前是一個迴圈
0187:004016A4  CMP      BYTE [ECX+0047E4A4],00  <---這裡查表使下面的運算產生分支
0187:004016AB  JZ      004016D1                    資料參照序號產生器的DATA5
0187:004016AD  MOV      EAX,[EBP-04]
0187:004016B0  SHR      EAX,02
0187:004016B3  MOV      EDX,[EBP-04]
0187:004016B6  SHL      EDX,1A
0187:004016B9  OR      EAX,EDX
0187:004016BB  MOV      [EBP-04],EAX
0187:004016BE  MOV      ECX,[EBP-08]
0187:004016C1  SHR      ECX,02
0187:004016C4  MOV      EAX,[EBP-08]
0187:004016C7  SHL      EAX,1A
0187:004016CA  OR      ECX,EAX
0187:004016CC  MOV      [EBP-08],ECX
0187:004016CF  JMP      SHORT 004016F1
0187:004016D1  MOV      EDX,[EBP-04]
0187:004016D4  SHR      EDX,1
0187:004016D6  MOV      ECX,[EBP-04]
0187:004016D9  SHL      ECX,1B
0187:004016DC  OR      EDX,ECX
0187:004016DE  MOV      [EBP-04],EDX
0187:004016E1  MOV      EAX,[EBP-08]
0187:004016E4  SHR      EAX,1
0187:004016E6  MOV      EDX,[EBP-08]
0187:004016E9  SHL      EDX,1B
0187:004016EC  OR      EAX,EDX
0187:004016EE  MOV      [EBP-08],EAX
0187:004016F1  AND      DWORD [EBP-04],0FFFFFFF
0187:004016F8  AND      DWORD [EBP-08],0FFFFFFF
0187:004016FF  MOV      ECX,[EBP-04]
0187:00401702  SHR      ECX,06
0187:00401705  AND      ECX,BYTE +03
0187:00401708  MOV      EAX,[EBP-04]
0187:0040170B  SHR      EAX,07
0187:0040170E  AND      EAX,BYTE +3C
0187:00401711  OR      ECX,EAX
0187:00401713  MOV      EDX,[ECX*4+0047DDA4]  <---往下請注意此形式的程式碼,它是在查表
0187:0040171A  MOV      ECX,[EBP-04]              共有3個表,每個都很大
0187:0040171D  AND      ECX,BYTE +3F
0187:00401720  OR      EDX,[ECX*4+0047DCA4]  <---47DCA4是表1的開始,請參照序號產生器的DATA2
0187:00401727  MOV      EAX,[EBP-04]
0187:0040172A  SHR      EAX,0D
0187:0040172D  AND      EAX,BYTE +0F
0187:00401730  MOV      ECX,[EBP-04]
0187:00401733  SHR      ECX,0E
0187:00401736  AND      ECX,BYTE +30
0187:00401739  OR      EAX,ECX
0187:0040173B  OR      EDX,[EAX*4+0047DEA4]
0187:00401742  MOV      EAX,[EBP-04]
0187:00401745  SHR      EAX,14
0187:00401748  AND      EAX,BYTE +01
0187:0040174B  MOV      ECX,[EBP-04]
0187:0040174E  SHR      ECX,15
0187:00401751  AND      ECX,BYTE +06
0187:00401754  OR      EAX,ECX
0187:00401756  MOV      ECX,[EBP-04]
0187:00401759  SHR      ECX,16
0187:0040175C  AND      ECX,BYTE +38
0187:0040175F  OR      EAX,ECX
0187:00401761  OR      EDX,[EAX*4+0047DFA4]
0187:00401768  MOV      [EBP-10],EDX
0187:0040176B  MOV      EAX,[EBP-08]
0187:0040176E  SHR      EAX,07
0187:00401771  AND      EAX,BYTE +03
0187:00401774  MOV      EDX,[EBP-08]
0187:00401777  SHR      EDX,08
0187:0040177A  AND      EDX,BYTE +3C
0187:0040177D  OR      EAX,EDX
0187:0040177F  MOV      EAX,[EAX*4+0047E1A4]
0187:00401786  MOV      EDX,[EBP-08]
0187:00401789  AND      EDX,BYTE +3F
0187:0040178C  OR      EAX,[EDX*4+0047E0A4]  <---表2開始,請參照序號產生器的DATA3
0187:00401793  MOV      ECX,[EBP-08]
0187:00401796  SHR      ECX,0F
0187:00401799  AND      ECX,BYTE +3F
0187:0040179C  OR      EAX,[ECX*4+0047E2A4]
0187:004017A3  MOV      EDX,[EBP-08]
0187:004017A6  SHR      EDX,15
0187:004017A9  AND      EDX,BYTE +0F
0187:004017AC  MOV      ECX,[EBP-08]
0187:004017AF  SHR      ECX,16
0187:004017B2  AND      ECX,BYTE +30
0187:004017B5  OR      EDX,ECX
0187:004017B7  OR      EAX,[EDX*4+0047E3A4]
0187:004017BE  MOV      [EBP-0C],EAX
0187:004017C1  MOV      EAX,[EBP-0C]
0187:004017C4  SHL      EAX,10
0187:004017C7  MOV      EDX,[EBP-10]
0187:004017CA  AND      EDX,FFFF
0187:004017D0  OR      EAX,EDX
0187:004017D2  AND      EAX,BYTE -01
0187:004017D5  MOV      ECX,[EBP-18]
0187:004017D8  MOV      [ECX],EAX              <---儲存在此,請打d ecx觀察運算的結果
0187:004017DA  ADD      DWORD [EBP-18],BYTE +04
0187:004017DE  MOV      EAX,[EBP-10]
0187:004017E1  SHR      EAX,10
0187:004017E4  MOV      EDX,[EBP-0C]
0187:004017E7  AND      EDX,FFFF0000
0187:004017ED  OR      EAX,EDX
0187:004017EF  MOV      [EBP-10],EAX
0187:004017F2  MOV      EAX,[EBP-10]
0187:004017F5  SHL      EAX,04
0187:004017F8  MOV      ECX,[EBP-10]
0187:004017FB  SHR      ECX,1C
0187:004017FE  OR      EAX,ECX
0187:00401800  MOV      [EBP-10],EAX
0187:00401803  MOV      EAX,[EBP-10]
0187:00401806  AND      EAX,BYTE -01
0187:00401809  MOV      EDX,[EBP-18]
0187:0040180C  MOV      [EDX],EAX            <---儲存在此
0187:0040180E  ADD      DWORD [EBP-18],BYTE +04
0187:00401812  INC      DWORD [EBP-1C]
0187:00401815  CMP      DWORD [EBP-1C],BYTE +10  <---共迴圈16(D)次,迴圈完後會在記憶體中產生
0187:00401819  JL      NEAR 004016A1                一個共32(D) dword的資料
0187:0040181F  XOR      EAX,EAX
0187:00401821  MOV      ESP,EBP
0187:00401823  POP      EBP
0187:00401824  RET                <---請先返回Main Call


==Call 2==========================================================
0187:00401825  PUSH    EBP
0187:00401826  MOV      EBP,ESP
0187:00401828  ADD      ESP,BYTE -24
0187:0040182B  XOR      EAX,EAX
0187:0040182D  MOV      [EBP-04],EAX
0187:00401830  XOR      EDX,EDX
0187:00401832  MOV      [EBP-08],EDX
0187:00401835  MOV      ECX,[EBP+10]
0187:00401838  MOV      [EBP-14],ECX
0187:0040183B  MOV      EAX,[EBP+14]  <---這是用"M"查表得到的18
0187:0040183E  MOV      [EBP-20],EAX  <---Save Here
0187:00401841  MOV      EDX,[EBP+18]  <---這是用"o"查表得到的340
0187:00401844  MOV      [EBP-24],EDX  <---Save Here
0187:00401847  XOR      ECX,ECX
0187:00401849  MOV      [EBP-1C],ECX  <---計數器
0187:0040184C  XOR      EAX,EAX
0187:0040184E  MOV      [EBP-18],EAX
0187:00401851  MOV      EDX,[EBP-08]
0187:00401854  SHR      EDX,10
0187:00401857  XOR      EDX,[EBP-08]
0187:0040185A  MOV      [EBP-0C],EDX
0187:0040185D  MOV      ECX,[EBP-0C]
0187:00401860  AND      ECX,[EBP-20]
0187:00401863  MOV      [EBP-10],ECX
0187:00401866  MOV      EAX,[EBP-24]
0187:00401869  AND      [EBP-0C],EAX
0187:0040186C  MOV      EDX,[EBP-14]  <---指向Call 1結果
0187:0040186F  MOV      ECX,[EBP-18]
0187:00401872  MOV      EAX,[EDX+ECX*4]    <---取第1個dword
0187:00401875  MOV      EDX,[EBP-10]
0187:00401878  SHL      EDX,10
0187:0040187B  XOR      EDX,[EBP-10]
0187:0040187E  XOR      EDX,[EBP-08]
0187:00401881  XOR      EAX,EDX
0187:00401883  MOV      [EBP-10],EAX
0187:00401886  MOV      ECX,[EBP-14]
0187:00401889  MOV      EAX,[EBP-18]
0187:0040188C  MOV      EDX,[ECX+EAX*4+04] <---取第2個dword
0187:00401890  MOV      ECX,[EBP-0C]
0187:00401893  SHL      ECX,10
0187:00401896  XOR      ECX,[EBP-0C]
0187:00401899  XOR      ECX,[EBP-08]
0187:0040189C  XOR      EDX,ECX
0187:0040189E  MOV      [EBP-0C],EDX
0187:004018A1  MOV      EAX,[EBP-0C]
0187:004018A4  SHR      EAX,04
0187:004018A7  MOV      EDX,[EBP-0C]
0187:004018AA  SHL      EDX,1C
0187:004018AD  OR      EAX,EDX
0187:004018AF  MOV      [EBP-0C],EAX
0187:004018B2  MOV      ECX,[EBP-0C]
0187:004018B5  AND      ECX,BYTE +3F
0187:004018B8  MOV      EAX,[ECX*4+0047D5A4]  <---經運算後查表
0187:004018BF  MOV      EDX,[EBP-0C]
0187:004018C2  SHR      EDX,08
0187:004018C5  AND      EDX,BYTE +3F
0187:004018C8  OR      EAX,[EDX*4+0047D7A4]
0187:004018CF  MOV      ECX,[EBP-0C]
0187:004018D2  SHR      ECX,10
0187:004018D5  AND      ECX,BYTE +3F
0187:004018D8  OR      EAX,[ECX*4+0047D9A4]
0187:004018DF  MOV      EDX,[EBP-0C]
0187:004018E2  SHR      EDX,18
0187:004018E5  AND      EDX,BYTE +3F
0187:004018E8  OR      EAX,[EDX*4+0047DBA4]
0187:004018EF  MOV      ECX,[EBP-10]
0187:004018F2  AND      ECX,BYTE +3F
0187:004018F5  OR      EAX,[ECX*4+0047D4A4]  <---表3開始,請參照序號產生器的DATA4
0187:004018FC  MOV      EDX,[EBP-10]
0187:004018FF  SHR      EDX,08
0187:00401902  AND      EDX,BYTE +3F
0187:00401905  OR      EAX,[EDX*4+0047D6A4]
0187:0040190C  MOV      ECX,[EBP-10]
0187:0040190F  SHR      ECX,10
0187:00401912  AND      ECX,BYTE +3F
0187:00401915  OR      EAX,[ECX*4+0047D8A4]
0187:0040191C  MOV      EDX,[EBP-10]
0187:0040191F  SHR      EDX,18
0187:00401922  AND      EDX,BYTE +3F
0187:00401925  OR      EAX,[EDX*4+0047DAA4]
0187:0040192C  XOR      [EBP-04],EAX
0187:0040192F  MOV      EAX,[EBP-04]
0187:00401932  SHR      EAX,10
0187:00401935  XOR      EAX,[EBP-04]
0187:00401938  MOV      [EBP-0C],EAX
0187:0040193B  MOV      ECX,[EBP-0C]
0187:0040193E  AND      ECX,[EBP-20]
0187:00401941  MOV      [EBP-10],ECX
0187:00401944  MOV      EAX,[EBP-24]
0187:00401947  AND      [EBP-0C],EAX
0187:0040194A  MOV      EDX,[EBP-14]
0187:0040194D  MOV      ECX,[EBP-18]
0187:00401950  MOV      EAX,[EDX+ECX*4+08] <---取第3個dword
0187:00401954  MOV      EDX,[EBP-10]
0187:00401957  SHL      EDX,10
0187:0040195A  XOR      EDX,[EBP-10]
0187:0040195D  XOR      EDX,[EBP-04]
0187:00401960  XOR      EAX,EDX
0187:00401962  MOV      [EBP-10],EAX
0187:00401965  MOV      ECX,[EBP-14]
0187:00401968  MOV      EAX,[EBP-18]
0187:0040196B  MOV      EDX,[ECX+EAX*4+0C] <---取第4個dword
0187:0040196F  MOV      ECX,[EBP-0C]
0187:00401972  SHL      ECX,10
0187:00401975  XOR      ECX,[EBP-0C]
0187:00401978  XOR      ECX,[EBP-04]
0187:0040197B  XOR      EDX,ECX
0187:0040197D  MOV      [EBP-0C],EDX
0187:00401980  MOV      EAX,[EBP-0C]
0187:00401983  SHR      EAX,04
0187:00401986  MOV      EDX,[EBP-0C]
0187:00401989  SHL      EDX,1C
0187:0040198C  OR      EAX,EDX
0187:0040198E  MOV      [EBP-0C],EAX
0187:00401991  MOV      ECX,[EBP-0C]
0187:00401994  AND      ECX,BYTE +3F
0187:00401997  MOV      EAX,[ECX*4+0047D5A4]  <---查表3
0187:0040199E  MOV      EDX,[EBP-0C]
0187:004019A1  SHR      EDX,08
0187:004019A4  AND      EDX,BYTE +3F
0187:004019A7  OR      EAX,[EDX*4+0047D7A4]
0187:004019AE  MOV      ECX,[EBP-0C]
0187:004019B1  SHR      ECX,10
0187:004019B4  AND      ECX,BYTE +3F
0187:004019B7  OR      EAX,[ECX*4+0047D9A4]
0187:004019BE  MOV      EDX,[EBP-0C]
0187:004019C1  SHR      EDX,18
0187:004019C4  AND      EDX,BYTE +3F
0187:004019C7  OR      EAX,[EDX*4+0047DBA4]
0187:004019CE  MOV      ECX,[EBP-10]
0187:004019D1  AND      ECX,BYTE +3F
0187:004019D4  OR      EAX,[ECX*4+0047D4A4]
0187:004019DB  MOV      EDX,[EBP-10]
0187:004019DE  SHR      EDX,08
0187:004019E1  AND      EDX,BYTE +3F
0187:004019E4  OR      EAX,[EDX*4+0047D6A4]
0187:004019EB  MOV      ECX,[EBP-10]
0187:004019EE  SHR      ECX,10
0187:004019F1  AND      ECX,BYTE +3F
0187:004019F4  OR      EAX,[ECX*4+0047D8A4]
0187:004019FB  MOV      EDX,[EBP-10]
0187:004019FE  SHR      EDX,18
0187:00401A01  AND      EDX,BYTE +3F
0187:00401A04  OR      EAX,[EDX*4+0047DAA4]
0187:00401A0B  XOR      [EBP-08],EAX
0187:00401A0E  ADD      DWORD [EBP-18],BYTE +04
0187:00401A12  CMP      DWORD [EBP-18],BYTE +20  <---迴圈8次,每次處理4個dword
0187:00401A16  JL      NEAR 00401851
0187:00401A1C  MOV      EAX,[EBP-04]
0187:00401A1F  MOV      [EBP-0C],EAX
0187:00401A22  MOV      ECX,[EBP-08]
0187:00401A25  MOV      [EBP-04],ECX
0187:00401A28  MOV      EAX,[EBP-0C]
0187:00401A2B  MOV      [EBP-08],EAX
0187:00401A2E  INC      DWORD [EBP-1C]
0187:00401A31  CMP      DWORD [EBP-1C],BYTE +19  <---這是大迴圈,共25(D)次,迴圈完後
0187:00401A35  JL      NEAR 0040184C                就會得到一個2個dword的資料
0187:00401A3B  MOV      EDX,[EBP-08]
0187:00401A3E  MOV      [EBP-0C],EDX
0187:00401A41  MOV      ECX,[EBP-04]
0187:00401A44  SHR      ECX,1
0187:00401A46  MOV      EAX,[EBP-04]
0187:00401A49  SHL      EAX,1F
0187:00401A4C  OR      ECX,EAX
0187:00401A4E  MOV      [EBP-08],ECX
0187:00401A51  MOV      EDX,[EBP-0C]
0187:00401A54  SHR      EDX,1
0187:00401A56  MOV      ECX,[EBP-0C]
0187:00401A59  SHL      ECX,1F
0187:00401A5C  OR      EDX,ECX
0187:00401A5E  MOV      [EBP-04],EDX
0187:00401A61  AND      DWORD [EBP-04],BYTE -01
0187:00401A65  AND      DWORD [EBP-08],BYTE -01
0187:00401A69  MOV      EAX,[EBP-08]
0187:00401A6C  SHR      EAX,1
0187:00401A6E  XOR      EAX,[EBP-04]
0187:00401A71  AND      EAX,55555555
0187:00401A76  MOV      [EBP-0C],EAX
0187:00401A79  MOV      EDX,[EBP-0C]
0187:00401A7C  XOR      [EBP-04],EDX
0187:00401A7F  MOV      ECX,[EBP-0C]
0187:00401A82  ADD      ECX,ECX
0187:00401A84  XOR      [EBP-08],ECX
0187:00401A87  MOV      EAX,[EBP-04]
0187:00401A8A  SHR      EAX,08
0187:00401A8D  XOR      EAX,[EBP-08]
0187:00401A90  AND      EAX,00FF00FF
0187:00401A95  MOV      [EBP-0C],EAX
0187:00401A98  MOV      EDX,[EBP-0C]
0187:00401A9B  XOR      [EBP-08],EDX
0187:00401A9E  MOV      ECX,[EBP-0C]
0187:00401AA1  SHL      ECX,08
0187:00401AA4  XOR      [EBP-04],ECX
0187:00401AA7  MOV      EAX,[EBP-08]
0187:00401AAA  SHR      EAX,02
0187:00401AAD  XOR      EAX,[EBP-04]
0187:00401AB0  AND      EAX,33333333
0187:00401AB5  MOV      [EBP-0C],EAX
0187:00401AB8  MOV      EDX,[EBP-0C]
0187:00401ABB  XOR      [EBP-04],EDX
0187:00401ABE  MOV      ECX,[EBP-0C]
0187:00401AC1  SHL      ECX,02
0187:00401AC4  XOR      [EBP-08],ECX
0187:00401AC7  MOV      EAX,[EBP-04]
0187:00401ACA  SHR      EAX,10
0187:00401ACD  XOR      EAX,[EBP-08]
0187:00401AD0  AND      EAX,FFFF
0187:00401AD5  MOV      [EBP-0C],EAX
0187:00401AD8  MOV      EDX,[EBP-0C]
0187:00401ADB  XOR      [EBP-08],EDX
0187:00401ADE  MOV      ECX,[EBP-0C]
0187:00401AE1  SHL      ECX,10
0187:00401AE4  XOR      [EBP-04],ECX
0187:00401AE7  MOV      EAX,[EBP-08]
0187:00401AEA  SHR      EAX,04
0187:00401AED  XOR      EAX,[EBP-04]
0187:00401AF0  AND      EAX,0F0F0F0F
0187:00401AF5  MOV      [EBP-0C],EAX
0187:00401AF8  MOV      EDX,[EBP-0C]
0187:00401AFB  XOR      [EBP-04],EDX
0187:00401AFE  MOV      ECX,[EBP-0C]
0187:00401B01  SHL      ECX,04
0187:00401B04  XOR      [EBP-08],ECX
0187:00401B07  MOV      EAX,[EBP+08]
0187:00401B0A  MOV      EDX,[EBP-04]
0187:00401B0D  MOV      [EAX],EDX    <---上面得到的資料再經過運算儲存在這裡
0187:00401B0F  MOV      ECX,[EBP+0C]
0187:00401B12  MOV      EAX,[EBP-08]
0187:00401B15  MOV      [ECX],EAX    <---Save here
0187:00401B17  XOR      EAX,EAX
0187:00401B19  MOV      ESP,EBP
0187:00401B1B  POP      EBP
0187:00401B1C  RET   
==End=============================================================
      _/_/_/
    _/          _/_/_/  _/_/_/  _/_/
    _/_/    _/    _/  _/    _/    _/
        _/  _/    _/  _/    _/    _/
_/_/_/      _/_/_/  _/    _/    _/

                                              Sam.com
                                          5:10 2002-3-29

相關文章