以前,找游戏数据,都是从结构出发,基本一找就找到了。但是这次接手了一个新游戏。没有结构。。
或者是我太菜了。或者是人家给加密了?
放出我分析了3天的一些斗不能称之为是成果的东西。另外希望大牛给指点一下。。。。介到底是个嘛玩意?
1029A5A0 A1 9880A110 MOV EAX,DWORD PTR DS:[10A18098]
1029A5A5 |. 8B88 8C000000 MOV ECX,DWORD PTR DS:[EAX+8C] ; ([z+n*2c]+1)*8
1029A5AB |. 8B90 94000000 MOV EDX,DWORD PTR DS:[EAX+94] ; z=eax+94
1029A5B1 |. 890D ECA7A210 MOV DWORD PTR DS:[10A2A7EC],ECX ; n=eax+8c
1029A5B7 |. 6BC9 2C IMUL ECX,ECX,2C ; m=165d5bac
1029A5BA |. 03CA ADD ECX,EDX ; n=2
1029A5BC |. 56 PUSH ESI ; z=1630db00
1029A5BD |. 8BB0 90000000 MOV ESI,DWORD PTR DS:[EAX+90]
1029A5C3 |. 890D F8A7A210 MOV DWORD PTR DS:[10A2A7F8],ECX
1029A5C9 |. 8B48 38 MOV ECX,DWORD PTR DS:[EAX+38]
1029A5CC |. 890D F4A7A210 MOV DWORD PTR DS:[10A2A7F4],ECX ; [z+n*2c]+p1=x m+x*8=y if [y+4]=p2 eax=y
1029A5D2 |. 8B48 6C MOV ECX,DWORD PTR DS:[EAX+6C]
1029A5D5 |. 8915 F0A7A210 MOV DWORD PTR DS:[10A2A7F0],EDX
1029A5DB |. 8B50 68 MOV EDX,DWORD PTR DS:[EAX+68]
1029A5DE |. 8915 802B8210 MOV DWORD PTR DS:[10822B80],EDX
1029A5E4 |. 8B50 70 MOV EDX,DWORD PTR DS:[EAX+70]
1029A5E7 |. 890D 7C2B8210 MOV DWORD PTR DS:[10822B7C],ECX
1029A5ED |. 8B48 78 MOV ECX,DWORD PTR DS:[EAX+78]
1029A5F0 |. 8915 38188210 MOV DWORD PTR DS:[10821838],EDX
1029A5F6 |. 8B90 80000000 MOV EDX,DWORD PTR DS:[EAX+80] ; m=eax+80
1029A5FC |. 8B40 7C MOV EAX,DWORD PTR DS:[EAX+7C]
1029A5FF |. 8935 E8A7A210 MOV DWORD PTR DS:[10A2A7E8],ESI
1029A605 |. 890D FCA7A210 MOV DWORD PTR DS:[10A2A7FC],ECX
1029A60B |. 8915 E4A7A210 MOV DWORD PTR DS:[10A2A7E4],EDX ; [10a2a7e4]=m [10a2a7ec]=n [10a2a7f0]=z
1029A611 |. A3 E0A7A210 MOV DWORD PTR DS:[10A2A7E0],EAX
1029A616 |. 5E POP ESI
1029A617 \. C3 RETN
游戏官方用10A18098 这地方的结构体初始化了10A2A7E4 这里的结构体中的一些数据。
在10A2A7E4 中比较重要的几个数据如下所示,
[10a2a7e4]=m [10a2a7ec]=n [10a2a7f0]=z
102CDF2D > \56 PUSH ESI ; 161c09a8
102CDF2E . 6A 04 PUSH 4 ; [10a2a7e4]=m [10a2a7ec]=n [10a2a7f0]=z
102CDF30 . 6A 00 PUSH 0
102CDF32 . E8 29C9FDFF CALL CXCentau.102AA860 ; [z+n*2c]+p1=x m+x*8=y if [y+4]=p2 eax=y
102CDF37 . 6A 07 PUSH 7 ; 1562cd2c b 1546dbf0 399
102CDF39 . 6A 01 PUSH 1
102CDF3B . 8BF0 MOV ESI,EAX
102CDF3D . E8 1EC9FDFF CALL CXCentau.102AA860
然后,游戏用 func_102aa860(0,4) 返回了一个指针叫point04;用 func_102aa860(1,7) 返回了一个指针叫point17;
func_102aa860代码如下:
102AA860 $ A1 ECA7A210 MOV EAX,DWORD PTR DS:[10A2A7EC] ; dword arg1=globe10a2a7ec
102AA865 . 85C0 TEST EAX,EAX ; if arg1==0
102AA867 . 56 PUSH ESI
102AA868 . 57 PUSH EDI
102AA869 . 74 0C JE SHORT CXCentau.102AA877 ; goto a877
102AA86B . 8B0D F0A7A210 MOV ECX,DWORD PTR DS:[10A2A7F0] ; if arg1!=0 then
102AA871 . 6BC0 2C IMUL EAX,EAX,2C ; dword arg2=globe10a2a7f0
102AA874 . 8B0408 MOV EAX,DWORD PTR DS:[EAX+ECX] ; eax=arg1*2c
102AA877 > 8B7C24 0C MOV EDI,DWORD PTR SS:[ESP+C] ; dword param1
102AA87B . 03C7 ADD EAX,EDI ; eax=arg1*2c+param1
102AA87D . 3B05 FCA7A210 CMP EAX,DWORD PTR DS:[10A2A7FC] ; if eax<globe10a2a7fc
102AA883 . 7C 51 JL SHORT CXCentau.102AA8D6
102AA885 . 3B05 E0A7A210 CMP EAX,DWORD PTR DS:[10A2A7E0] ; if eax>= globe10a2a7e0
102AA88B . 7D 49 JGE SHORT CXCentau.102AA8D6
102AA88D . 8B15 F8A7A210 MOV EDX,DWORD PTR DS:[10A2A7F8] ; if eax>globe10a2a7fc <globe10a2a7e0
102AA893 . 3B7A 04 CMP EDI,DWORD PTR DS:[EDX+4] ; dword arg2=globe10a2a7f8
102AA896 . 7D 3E JGE SHORT CXCentau.102AA8D6 ; if param1>=globe10a2a7f8[4]
102AA898 . 8B0D E4A7A210 MOV ECX,DWORD PTR DS:[10A2A7E4] ; if param1<globe10a2a7f8[4]
102AA89E . 8B7424 10 MOV ESI,DWORD PTR SS:[ESP+10] ; dword arg3=globe10a2a7e4
102AA8A2 . 8D0CC1 LEA ECX,DWORD PTR DS:[ECX+EAX*8] ; ecx=globe10a2a7e4+(arg1*2c+PARAM1)*8
102AA8A5 . 0FB641 04 MOVZX EAX,BYTE PTR DS:[ECX+4]
102AA8A9 . 3BC6 CMP EAX,ESI
102AA8AB . 74 24 JE SHORT CXCentau.102AA8D1 ; ecx==poi10a2a7e4
102AA8AD . 81FE FF000000 CMP ESI,0FF ; eax=poi10a2a7f0+poi10a2a7ec*2c
102AA8B3 . 74 1C JE SHORT CXCentau.102AA8D1
102AA8B5 . E8 06BDFFFF CALL CXCentau.102A65C0 ; 这个eax返回一些变量属性 比方说指针,映射,void之类的
102AA8BA . 50 PUSH EAX
102AA8BB . 8BC6 MOV EAX,ESI
102AA8BD . E8 FEBCFFFF CALL CXCentau.102A65C0
102AA8C2 . 50 PUSH EAX
102AA8C3 . 83C7 01 ADD EDI,1
102AA8C6 . 57 PUSH EDI
102AA8C7 . 68 14CB6D10 PUSH CXCentau.106DCB14 ; ASCII "Bad type of argument %d, expected %s, got %s.\n"
102AA8CC . E8 1F3C0000 CALL CXCentau.102AE4F0 ; 这地方报错
102AA8D1 > 5F POP EDI
102AA8D2 . 8BC1 MOV EAX,ECX
102AA8D4 . 5E POP ESI
102AA8D5 . C3 RETN
不考虑函数中验证数据对错的地方,将这个函数换算成公式如下所示:
[10a2a7e4]=m [10a2a7ec]=n [10a2a7f0]=z
[z+n*2c]+p1=x m+x*8=y if [y+4]=p2 then eax=y
返回值==eax
然后。
102CDF42 . 8B36 MOV ESI,DWORD PTR DS:[ESI]
102CDF44 . 50 PUSH EAX ; eax==165102C8
102CDF45 . E8 E619FEFF CALL CXCentau.102AF930 ; 这个函数,在eax指针指向的内容的结构体中。寻找与esi想匹配的
102CDF4A . 83C4 14 ADD ESP,14 ; 具体实现方法:
102CDF4D . 85C0 TEST EAX,EAX ; poieax+14 and esi+8 ==index
102CDF4F . 5E POP ESI ; poieax+20+index*4 ==base
102CDF50 . 75 17 JNZ SHORT CXCentau.102CDF69 ; 在base的链表中,寻找与esi相匹配的。
这里通过point04与point17 两个指针,在函数102af930中进行了一些操作。
具体就是我后面注释的,然后在返回一个指针。。。这个指针,结构如下所示:
+0 1C06E51C 00000000
+4 1C06E520 159E7578
+8 1C06E524 00000004
+c 1C06E528 000001F9
其中,+0就是base的链表指针。+4是这个人物属性的一些说明的一个结构体指针。+8是一个我还不知道作用的flag吧。+c是这个人物属性的数值。
+4人物属性的说明的结构体指针:
159E7578 00000071
159E757C 0000000B
159E7580 00001C77
159E7584 159E758C ASCII "hp"
+0 是一个index么?我也不知道什么作用。+4也不知道。+8是上面函数102AF930里面要用的两个数值进行与运算时用到的一个数值。+c不用我说了。这个属性的名称。HP。
102AF930 这个函数,也逆了一下。
102AF930 /$ 51 PUSH ECX
102AF931 |. 837E 10 00 CMP DWORD PTR DS:[ESI+10],0
102AF935 |. 53 PUSH EBX
102AF936 |. 55 PUSH EBP
102AF937 |. 8B6C24 10 MOV EBP,DWORD PTR SS:[ESP+10]
102AF93B |. 57 PUSH EDI
102AF93C |. 75 07 JNZ SHORT CXCentau.102AF945
102AF93E |. 8BC5 MOV EAX,EBP
102AF940 |. 5F POP EDI
102AF941 |. 5D POP EBP
102AF942 |. 5B POP EBX
102AF943 |. 59 POP ECX
102AF944 |. C3 RETN
102AF945 |> F646 04 08 TEST BYTE PTR DS:[ESI+4],8
102AF949 |. 75 2E JNZ SHORT CXCentau.102AF979
102AF94B |. 8B3D 0C1A5A10 MOV EDI,DWORD PTR DS:[<&MSVCR80.strchr>] ; msvcr80.strchr
102AF951 |. BB 10000000 MOV EBX,10 ; 查找字符串s中首次出现字符c的位置
102AF956 |> 845E 04 /TEST BYTE PTR DS:[ESI+4],BL
102AF959 |. 75 2F |JNZ SHORT CXCentau.102AF98A
102AF95B |. 8B46 0C |MOV EAX,DWORD PTR DS:[ESI+C]
102AF95E |. 6A 2F |PUSH 2F ; 字符/
102AF960 |. 50 |PUSH EAX
102AF961 |. FFD7 |CALL EDI
102AF963 |. 83C4 08 |ADD ESP,8
102AF966 |. 85C0 |TEST EAX,EAX
102AF968 |. 75 06 |JNZ SHORT CXCentau.102AF970
102AF96A |. 834E 04 08 |OR DWORD PTR DS:[ESI+4],8
102AF96E |. EB 03 |JMP SHORT CXCentau.102AF973
102AF970 |> 095E 04 |OR DWORD PTR DS:[ESI+4],EBX
102AF973 |> F646 04 08 |TEST BYTE PTR DS:[ESI+4],8
102AF977 |.^ 74 DD \JE SHORT CXCentau.102AF956
102AF979 |> 8B45 00 MOV EAX,DWORD PTR SS:[EBP] ; ebp=21A11EB4
102AF97C |. 56 PUSH ESI
102AF97D |. E8 7E8DFFFF CALL CXCentau.102A8700 ; 这个函数,在eax所在的链表中找esi想匹配的。
102AF982 |. 83C4 04 ADD ESP,4
102AF985 |. 5F POP EDI
102AF986 |. 5D POP EBP
102AF987 |. 5B POP EBX
102AF988 |. 59 POP ECX
102AF989 |. C3 RETN
函数中主要是调用了102a8700这个函数。。
102A8700 /$ 53 PUSH EBX
102A8701 |. 55 PUSH EBP
102A8702 |. 8B6C24 0C MOV EBP,DWORD PTR SS:[ESP+C]
102A8706 |. 56 PUSH ESI
102A8707 |. 8BF0 MOV ESI,EAX
102A8709 |. 8B5E 10 MOV EBX,DWORD PTR DS:[ESI+10]
102A870C |. 83E3 01 AND EBX,1
102A870F |. 57 PUSH EDI
102A8710 |. 74 1C JE SHORT CXCentau.102A872E
102A8712 |. 0FB745 08 MOVZX EAX,WORD PTR SS:[EBP+8] ; 最上面的esi
102A8716 |. 66:85C0 TEST AX,AX
102A8719 |. 75 1B JNZ SHORT CXCentau.102A8736
102A871B |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
102A871E |. B9 20000000 MOV ECX,20
102A8723 |. E8 18270400 CALL CXCentau.102EAE40
102A8728 |. 66:8945 08 MOV WORD PTR SS:[EBP+8],AX
102A872C |. EB 08 JMP SHORT CXCentau.102A8736
102A872E |> 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
102A8731 |. E8 7A270400 CALL CXCentau.102EAEB0
102A8736 |> 8B4E 14 MOV ECX,DWORD PTR DS:[ESI+14]
102A8739 |. 8B56 20 MOV EDX,DWORD PTR DS:[ESI+20] ; esi=2213417c
102A873C |. 0FB7C0 MOVZX EAX,AX
102A873F |. 23C8 AND ECX,EAX ; eax=e877
102A8741 |. 8B348A MOV ESI,DWORD PTR DS:[EDX+ECX*4] ; edx=2E4D1C70
102A8744 |. 85F6 TEST ESI,ESI ; ecx=77 esi==223e99b4
102A8746 |. 74 2F JE SHORT CXCentau.102A8777 ; if esi==0 break
102A8748 |> 807E 08 04 /CMP BYTE PTR DS:[ESI+8],4
102A874C |. 75 23 |JNZ SHORT CXCentau.102A8771 ; if esi.esi+8 !=4 continu
102A874E |. 8B7E 04 |MOV EDI,DWORD PTR DS:[ESI+4]
102A8751 |. 8BCF |MOV ECX,EDI
102A8753 |. 8BD5 |MOV EDX,EBP
102A8755 |. E8 A6350100 |CALL CXCentau.102BBD00
102A875A |. 85C0 |TEST EAX,EAX
102A875C |. 75 20 |JNZ SHORT CXCentau.102A877E ; if f(x)ebp,esi+4 !=0 break
102A875E |. 85DB |TEST EBX,EBX
102A8760 |. 75 0F |JNZ SHORT CXCentau.102A8771 ; if ebx!=0 continu
102A8762 |. 8B45 0C |MOV EAX,DWORD PTR SS:[EBP+C]
102A8765 |. 8B4F 0C |MOV ECX,DWORD PTR DS:[EDI+C]
102A8768 |. E8 F3690000 |CALL CXCentau.102AF160
102A876D |. 85C0 |TEST EAX,EAX
102A876F |. 74 0D |JE SHORT CXCentau.102A877E
102A8771 |> 8B36 |MOV ESI,DWORD PTR DS:[ESI]
102A8773 |. 85F6 |TEST ESI,ESI
102A8775 |.^ 75 D1 \JNZ SHORT CXCentau.102A8748
102A8777 |> 5F POP EDI
102A8778 |. 5E POP ESI
102A8779 |. 5D POP EBP
102A877A |. 33C0 XOR EAX,EAX
102A877C |. 5B POP EBX
102A877D |. C3 RETN
102A877E |> 5F POP EDI
102A877F |. 8D46 0C LEA EAX,DWORD PTR DS:[ESI+C]
102A8782 |. 5E POP ESI
102A8783 |. 5D POP EBP
102A8784 |. 5B POP EBX
102A8785 \. C3 RETN
简单说这个函数,就是给定了一个属性说明的结构体,esi。又给定了另外一个貌似是加密了的结构体。eax。
用eax+14指针的内容,和esi+8的内容进行与运算之后得到的数值乘以8作为偏移。eax+20的指针加这个偏移,就能找到几个属性的一个链表了。然后,在这个链表中,遍历出esi的位置。然后就能得到上面说的,HP这个属性的结构体了。。
3天了。分析了这点东西。我勒个去。介系个嘛玩意?是加密了么同志们?
还是我被骗了?
哦对了。游戏的主循环。。。==我放代码出来。
10060358 . 68 203F6A10 PUSH CXCentau.106A3F20 ; ASCII "vm_mainLoop"
1006035D . 8D8D 70FFFFFF LEA ECX,DWORD PTR SS:[EBP-90]
10060363 . FF15 4C315A10 CALL DWORD PTR DS:[<&stlport.5.2.??0?$basic_str>; stlport_.??0?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@QAE@PBDABV?$allocator@D@1@@Z
游戏中有这种字样。。。请问这是嘛意思?
1005DE72 |> /0FB645 F2 /MOVZX EAX,BYTE PTR SS:[EBP-E]
1005DE76 |. |85C0 |TEST EAX,EAX
1005DE78 |. |0F85 2C010000 |JNZ CXCentau.1005DFAA
1005DE7E |. |8B4D B0 |MOV ECX,DWORD PTR SS:[EBP-50]
1005DE81 |. |0FB651 59 |MOVZX EDX,BYTE PTR DS:[ECX+59]
1005DE85 |. |85D2 |TEST EDX,EDX
1005DE87 |. |0F85 1D010000 |JNZ CXCentau.1005DFAA
1005DE8D |. |A1 001EA210 |MOV EAX,DWORD PTR DS:[10A21E00]
1005DE92 |. |83E0 01 |AND EAX,1
1005DE95 |. |0F85 91000000 |JNZ CXCentau.1005DF2C
1005DE9B |. |8B0D 001EA210 |MOV ECX,DWORD PTR DS:[10A21E00]
1005DEA1 |. |83C9 01 |OR ECX,1
1005DEA4 |. |890D 001EA210 |MOV DWORD PTR DS:[10A21E00],ECX
1005DEAA |. |C745 FC 00000>|MOV DWORD PTR SS:[EBP-4],0
1005DEB1 |. |8D55 D3 |LEA EDX,DWORD PTR SS:[EBP-2D]
1005DEB4 |. |8955 AC |MOV DWORD PTR SS:[EBP-54],EDX
1005DEB7 |. |C645 FC 01 |MOV BYTE PTR SS:[EBP-4],1
1005DEBB |. |8B45 AC |MOV EAX,DWORD PTR SS:[EBP-54]
1005DEBE |. |50 |PUSH EAX
1005DEBF |. |68 743B6A10 |PUSH CXCentau.106A3B74 ; ASCII "singleProgress"
1005DEC4 |. |8D4D D4 |LEA ECX,DWORD PTR SS:[EBP-2C]
1005DEC7 |. |FF15 4C315A10 |CALL DWORD PTR DS:[<&stlport.5.2.??0?$basic_st>; stlport_.??0?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@QAE@PBDABV?$allocator@D@1@@Z
1005DECD |. |C645 FC 02 |MOV BYTE PTR SS:[EBP-4],2
1005DED1 |. |8D4D B6 |LEA ECX,DWORD PTR SS:[EBP-4A]
1005DED4 |. |894D A8 |MOV DWORD PTR SS:[EBP-58],ECX
1005DED7 |. |C645 FC 03 |MOV BYTE PTR SS:[EBP-4],3
1005DEDB |. |8B55 A8 |MOV EDX,DWORD PTR SS:[EBP-58]
1005DEDE |. |52 |PUSH EDX
1005DEDF |. |B9 E41DA210 |MOV ECX,CXCentau.10A21DE4 ; ASCII "singleProgress"
1005DEE4 |. |FF15 74315A10 |CALL DWORD PTR DS:[<&stlport.5.2.??0?$basic_st>; stlport_.??0?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@QAE@ABV?$allocator@D@1@@Z
1005DEEA |. |C645 FC 05 |MOV BYTE PTR SS:[EBP-4],5
1005DEEE |. |8D45 D4 |LEA EAX,DWORD PTR SS:[EBP-2C]
1005DEF1 |. |50 |PUSH EAX
1005DEF2 |. |B9 E41DA210 |MOV ECX,CXCentau.10A21DE4 ; ASCII "singleProgress"
1005DEF7 |. |FF15 54315A10 |CALL DWORD PTR DS:[<&stlport.5.2.??4?$basic_st>; stlport_.??4?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@QAEAAV01@ABV01@@Z
1005DEFD |. |C705 FC1DA210>|MOV DWORD PTR DS:[10A21DFC],1
1005DF07 |. |C645 FC 01 |MOV BYTE PTR SS:[EBP-4],1
1005DF0B |. |8D4D D4 |LEA ECX,DWORD PTR SS:[EBP-2C]
1005DF0E |. |FF15 94315A10 |CALL DWORD PTR DS:[<&stlport.5.2.??1?$basic_st>; stlport_.??1?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@QAE@XZ
1005DF14 |. |C645 FC 00 |MOV BYTE PTR SS:[EBP-4],0
1005DF18 |. |68 00A05910 |PUSH CXCentau.1059A000
1005DF1D |. |E8 9FBB4B00 |CALL CXCentau.10519AC1
1005DF22 |. |83C4 04 |ADD ESP,4
1005DF25 |. |C745 FC FFFFF>|MOV DWORD PTR SS:[EBP-4],-1
1005DF2C |> |C745 EC E41DA>|MOV DWORD PTR SS:[EBP-14],CXCentau.10A21DE4 ; ASCII "singleProgress"
1005DF33 |. |8B4D EC |MOV ECX,DWORD PTR SS:[EBP-14]
1005DF36 |. |8B51 18 |MOV EDX,DWORD PTR DS:[ECX+18]
1005DF39 |. |52 |PUSH EDX
1005DF3A |. |8B45 EC |MOV EAX,DWORD PTR SS:[EBP-14]
1005DF3D |. |50 |PUSH EAX
1005DF3E |. |FF15 30265A10 |CALL DWORD PTR DS:[<&OgreMain.?getSingleton@Pr>; OgreMain.?getSingleton@Profiler@Ogre@@SAAAV12@XZ
1005DF44 |. |8BC8 |MOV ECX,EAX
1005DF46 |. |FF15 38265A10 |CALL DWORD PTR DS:[<&OgreMain.?beginProfile@Pr>; OgreMain.?beginProfile@Profiler@Ogre@@QAEXABV?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@I@Z
1005DF4C |. |C745 FC 06000>|MOV DWORD PTR SS:[EBP-4],6
1005DF53 |. |C645 F1 00 |MOV BYTE PTR SS:[EBP-F],0
1005DF57 |. |8D4D F2 |LEA ECX,DWORD PTR SS:[EBP-E]
1005DF5A |. |51 |PUSH ECX
1005DF5B |. |8D55 F1 |LEA EDX,DWORD PTR SS:[EBP-F]
1005DF5E |. |52 |PUSH EDX
1005DF5F |. |8B0D 3019A210 |MOV ECX,DWORD PTR DS:[?ms_Singleton@?$Singleto>
1005DF65 |. |E8 76CE1F00 |CALL CXCentau.?onSingleProgress@NativeManager@>
1005DF6A |. |0FB645 F1 |MOVZX EAX,BYTE PTR SS:[EBP-F]
1005DF6E |. |85C0 |TEST EAX,EAX
1005DF70 |. |75 0B |JNZ SHORT CXCentau.1005DF7D
1005DF72 |. |8B4D B0 |MOV ECX,DWORD PTR SS:[EBP-50]
1005DF75 |. |E8 F6200000 |CALL CXCentau.?singleProgress@CXApp@@QAE_NXZ
1005DF7A |. |8845 F2 |MOV BYTE PTR SS:[EBP-E],AL
1005DF7D |> |C745 FC FFFFF>|MOV DWORD PTR SS:[EBP-4],-1
1005DF84 |. |8B4D EC |MOV ECX,DWORD PTR SS:[EBP-14]
1005DF87 |. |8B51 18 |MOV EDX,DWORD PTR DS:[ECX+18]
1005DF8A |. |52 |PUSH EDX
1005DF8B |. |8B45 EC |MOV EAX,DWORD PTR SS:[EBP-14]
1005DF8E |. |50 |PUSH EAX
1005DF8F |. |FF15 30265A10 |CALL DWORD PTR DS:[<&OgreMain.?getSingleton@Pr>; OgreMain.?getSingleton@Profiler@Ogre@@SAAAV12@XZ
1005DF95 |. |8BC8 |MOV ECX,EAX
1005DF97 |. |FF15 98265A10 |CALL DWORD PTR DS:[<&OgreMain.?endProfile@Prof>; OgreMain.?endProfile@Profiler@Ogre@@QAEXABV?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@I@Z
1005DF9D |. |8B4D B0 |MOV ECX,DWORD PTR SS:[EBP-50]
1005DFA0 |. |E8 1B3A0000 |CALL CXCentau.?updateGameProfilerEnabled@CXApp>
1005DFA5 |.^\E9 C8FEFFFF \JMP CXCentau.1005DE72
这就是游戏的主循环。。。
高手指一个吧。
分析了3天。心理防线已经几近崩溃。之所以发出来。1是想有人能指点一下。2,是有些佩服。说实话,市面上很多游戏弱爆了。这游戏,OD,CE随便附加。刚开始我没看代码,一看没保护直接和人家说2天出基本功能。我擦,扇自己个大嘴巴啊。3天了尼玛我连个HPMP都没分析出来。3,也有些担忧。这是什么?这到底是神马?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课