剑侠精灵破解全过程(1)

默认分类   2008-02-11 22:54   阅读612   评论2  
字号:    

 在网上找了N久的剑侠精灵的免费版,一直没看见一个正主,看来金山对大家还是有一定作用的,今天开始对金山剑侠游戏自己的外挂开始破解,希望在这个过程中能提高自己的能力.

 先来看看剑侠精灵的是用什么做壳,首先重要查壳软件出场了

 PEiD_095_20060510_WestKing_HA.exe (呵呵,我一般都用他了)

软件介绍

  PEiD 可以探测大多数的 PE 文件封包器、加密器和编译器。当前可以探测 600 多个不同签名。
  PEiD 是最强大的一个查壳工具。

运行PEiD把要脱壳的 jxjl.1.53\jl_f.exe (免费区的启动程序) 托入PEiD中

ASProtect 2.1x SKE -> Alexey Solodovnikov 显示为此壳 点->插件 让peid找到ASProtect 2.1x 壳的具体版本

Version: ASProtect 2.11 SKE build 03.13 Release [1] 查到了

----------------------------------------------------------------------------------------------------------------------

用OD载入程序,忽略除内存访问异常 与  同样忽略异常范围,其余全打钩,运行VolX提供强大的脚本,几步到达OEP

004256A7    6A 60           PUSH 60              OEP
004256A9    68 B8C94400     PUSH OnlyMe.0044C9B8
004256AE    E8 61040000     CALL OnlyMe.00425B14
004256B3    BF 94000000     MOV EDI,94
004256B8    8BC7            MOV EAX,EDI
004256BA    E8 A1040000     CALL OnlyMe.00425B60
在这里脱壳后,用IRCOMPAT进行修复,修复完毕(RVA:256A7)
在这里看一下内存镜像
Memory map, 项目 23
地址=00401000
大小=00033000 (208896.)
属主=OnlyMe   00400000
区段=
包含=代码
类型=映像 01001002
访问=R
初始访问=RWE

OD忽略除内存访问异常 与  同样忽略异常范围,其余全打钩!!SHIFT+F9
好像是三十二次 下断 异常你们慢慢看.机子不同次数可能不一样的.

OD载入:

00401000 >  68 01004A00     PUSH OnlyMe.004A0001
00401005    E8 01000000     CALL OnlyMe.0040100B
0040100A    C3              RETN
0040100B    C3              RETN

第一次异常停在这里:
00AE0781    C601 BE         MOV BYTE PTR DS:[ECX],0BE
00AE0784    64:97           XCHG EAX,EDI                             ; 多余前缀
00AE0786    41              INC ECX
00AE0787    F3:             PREFIX REP:                              ; 多余前缀
00AE0788    96              XCHG EAX,ESI
00AE0789    629D 8467648F   BOUND EBX,QWORD PTR SS:[EBP+8F646784]
00AE078F    06              PUSH ES
00AE0790    0000            ADD BYTE PTR DS:[EAX],AL
00AE0792    83C4 04         ADD ESP,4
00AE0795    83E9 BF         SUB ECX,-41
00AE0798    B9 B6BC4800     MOV ECX,48BCB6
00AE079D    59              POP ECX
00AE079E    68 E4DDAB00     PUSH 0ABDDE4
00AE07A3    68 0808AE00     PUSH 0AE0808
00AE07A8    68 5CE9AD00     PUSH 0ADE95C
00AE07AD    68 58F5AD00     PUSH 0ADF558
00AE07B2    68 68E2AD00     PUSH 0ADE268
00AE07B7    68 98D3AD00     PUSH 0ADD398
00AE07BC    68 10FCAD00     PUSH 0ADFC10
00AE07C1    C3              RETN

第二次:
00ADFDEF    C601 DE         MOV BYTE PTR DS:[ECX],0DE
00ADFDF2    17              POP SS                                   ; 段寄存器修饰
00ADFDF3    40              INC EAX
00ADFDF4  ^ 74 A3           JE SHORT 00ADFD99


00AE0023    0156 00         ADD DWORD PTR DS:[ESI],EDX          第三次


00AE0183    891F            MOV DWORD PTR DS:[EDI],EBX          第四次


00ADDAF4    893B            MOV DWORD PTR DS:[EBX],EDI          第五次


00ADDB8A    C700 B74F36E6   MOV DWORD PTR DS:[EAX],E6364FB7     第六次


00ADDCB4    C601 7E         MOV BYTE PTR DS:[ECX],7E            第七次

00ADDF3F    0156 00         ADD DWORD PTR DS:[ESI],EDX         第八次
=======================================================================
最后一次:
00ADFAA5    C700 EFCA5C85   MOV DWORD PTR DS:[EAX],855CCAEF
00ADFAAB    67:64:8F06 0000 POP DWORD PTR FS:[0]
00ADFAB1    83C4 04         ADD ESP,4
00ADFAB4    83E8 AF         SUB EAX,-51
00ADFAB7    83C8 4B         OR EAX,4B
00ADFABA    58              POP EAX
00ADFABB    A1 0C38AE00     MOV EAX,DWORD PTR DS:[AE380C]
00ADFAC0    8B00            MOV EAX,DWORD PTR DS:[EAX]
00ADFAC2    8B68 1C         MOV EBP,DWORD PTR DS:[EAX+1C]
00ADFAC5    A1 0C38AE00     MOV EAX,DWORD PTR DS:[AE380C]
00ADFACA    8B00            MOV EAX,DWORD PTR DS:[EAX]
00ADFACC    8B00            MOV EAX,DWORD PTR DS:[EAX]
00ADFACE    894424 04       MOV DWORD PTR SS:[ESP+4],EAX
00ADFAD2    A1 0C38AE00     MOV EAX,DWORD PTR DS:[AE380C]
00ADFAD7    8B00            MOV EAX,DWORD PTR DS:[EAX]
00ADFAD9    8D78 18         LEA EDI,DWORD PTR DS:[EAX+18]
00ADFADC    A1 8C37AE00     MOV EAX,DWORD PTR DS:[AE378C]
00ADFAE1    8858 08         MOV BYTE PTR DS:[EAX+8],BL
00ADFAE4    833F 00         CMP DWORD PTR DS:[EDI],0
00ADFAE7    75 1D           JNZ SHORT 00ADFB06
00ADFAE9    83C5 20         ADD EBP,20
00ADFAEC    A1 8436AE00     MOV EAX,DWORD PTR DS:[AE3684]
00ADFAF1    8078 0A 00      CMP BYTE PTR DS:[EAX+A],0
00ADFAF5    75 0F           JNZ SHORT 00ADFB06
00ADFAF7    B8 1F000000     MOV EAX,1F
00ADFAFC    E8 C32DFDFF     CALL 00AB28C4

堆栈:
0012FF34   0012FF80  指向下一个 SEH 记录的指针
0012FF38   00ADFA6E  SE 处理器            跟随反汇编窗口
0012FF3C   E850D8BF
0012FF40   BE409BC0
0012FF44   D34C9C60
0012FF48   0012FF64
0012FF4C   00ABBA61  返回到 00ABBA61 来自 00ABB988

来到这里:
00ADFA6E    56              PUSH ESI        在这下断  下断后Shift+f9运行到这里,消除断点.打开内存镜像
00ADFA6F    F2:             PREFIX REPNE:                            ; 多余前缀
00ADFA70    EB 01           JMP SHORT 00ADFA73
00ADFA72    F0:037424 38    LOCK ADD ESI,DWORD PTR SS:[ESP+38]       ; 不允许锁定前缀
00ADFA77    C1DE 83         RCR ESI,83                               ; 位移常数超出 1..31 的范围


00ADFA6E    56              PUSH ESI
00ADFA6F    F2:             PREFIX REPNE:                            ; 多余前缀
00ADFA70    EB 01           JMP SHORT 00ADFA73
00ADFA72    F0:037424 38    LOCK ADD ESI,DWORD PTR SS:[ESP+38]       ; 不允许锁定前缀
00ADFA77    C1DE 83         RCR ESI,83                               ; 位移常数超出 1..31 的范围

Memory map, 项目 23
地址=00401000
大小=00033000 (208896.)
属主=OnlyMe   00400000
区段=
包含=代码
类型=映像 01001002
访问=R
初始访问=RWE
Shift+f9到达光明之巅!!!

OEP:

004256A7    6A 60           PUSH 60              OEP
004256A9    68 B8C94400     PUSH OnlyMe.0044C9B8
004256AE    E8 61040000     CALL OnlyMe.00425B14
004256B3    BF 94000000     MOV EDI,94
004256B8    8BC7            MOV EAX,EDI
004256BA    E8 A1040000     CALL OnlyMe.00425B60

----------------------------------------------------------------------------------------------------------------------

以上代码是一段对其他程序的破解过程,用来借鉴一下

开始正式使用od分析了,第二个软件上场 ODbyDYK v1.10 12 动态脱壳的BB

打开ODbyDYK  加入 jxjl.1.53\jl_f.exe 询问压缩选否

00401000 > 68 01A04600      PUSH jl_f.0046A001 F8
00401005   E8 01000000      CALL jl_f.0040100B 上来就是个CALL,很猛呀F8过他,呵呵不怕
0040100A   C3               RETN
0040100B   C3               RETN
0040100C   4E               DEC ESI
0040100D   2F               DAS
0040100E   CD F0            INT 0F0
00401010   C147 D2 B1       ROL DWORD PTR DS:[EDI-2E],0B1            ; 移动常数超出 1..31 的范围
00401014   CB               RETF                                     ; 远返回
00401015   8134B5 C83FFD9F >XOR DWORD PTR DS:[ESI*4+9FFD3FC8],5243FB>
00401020   60               PUSHAD
00401021   3BDB             CMP EBX,EBX
00401023   6E               OUTS DX,BYTE PTR ES:[EDI]                ; I/O 命令
00401024   83BC6F 89E4FAFB >CMP DWORD PTR DS:[EDI+EBP*2+FBFAE489],0B
0040102C   D83440           FDIV DWORD PTR DS:[EAX+EAX*2]
0040102F   B1 E9            MOV CL,0E9
00401031   0807             OR BYTE PTR DS:[EDI],AL
00401033   E4 F3            IN AL,0F3                                ; I/O 命令
00401035   3D 5B78BBC9      CMP EAX,C9BB785B
0040103A   06               PUSH ES
0040103B   F2:              PREFIX REPNE:                            ; 多余的前缀
0040103C   44               INC ESP
0040103D  ^77 F1            JA SHORT jl_f.00401030
0040103F   2211             AND DL,BYTE PTR DS:[ECX]
00401041   8AC9             MOV CL,CL
00401043   4F               DEC EDI
00401044   04 47            ADD AL,47
00401046   5F               POP EDI
00401047   6A BB            PUSH -45
00401049   ED               IN EAX,DX                                ; I/O 命令
0040104A   F0:42            LOCK INC EDX                             ; 不允许锁定前缀

 

 

评论(?)
阅读(?)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
网易公司版权所有 ©1997-2009