保护伞 发表于 2010-10-30 17:24:19

某游戏资源解密

第一次写文章,写的不好,见谅
因为我是做**的,接触的东西教多,杂七杂八,都是半通水,
来这里也那么久了,没发过什么实质性的文章,
在这里先介绍下,如何解密游戏资源,
因为很多游戏,都是用一些工具吧资源加密了,我们看不到文件里面的内容,但是,解密以后,就如同脱了衣服的娘们站在你面前,想怎么看就怎么看,
废话不多说了,下面进入正题,
需要工具:OllyDebug
               game.exe(游戏的主程序,我在这里就统称为game)
            optiot.ini(要解密的文件)
————————————————————————————————————————————————————————————
用od加载game.exe
到文件头:
05E69B33 >E8 00000000   call game.05E69B38
05E69B38    60            pushad
05E69B39    E8 4F000000   call game.05E69B8D
05E69B3E    F9            stc
05E69B3F    16            push ss
05E69B40    FB            sti
05E69B41    B8 C122F8EF   mov eax,EFF822C1
05E69B46    37            aaa

因为主程式是加了壳的,不需要脱也能解密,所以无视壳
下CreateFileA断点 F9运行程序后断下,
右下脚:
0012F8BC   05E6F67D/CALL 到 CreateFileA 来自 game.05E6F677
0012F8C0   003B2528|FileName = "E:\P\GAME.EXE"
0012F8C4   80000000|Access = GENERIC_READ
0012F8C8   00000001|ShareMode = FILE_SHARE_READ
0012F8CC   00000000|pSecurity = NULL
0012F8D0   00000003|Mode = OPEN_EXISTING
0012F8D4   00000000|Attributes = 0
0012F8D8   00000000\hTemplateFile = NULL

因为他这次是加载game的,所以无视,
在次按F9后断下
0012FC6C   05E74623/CALL 到 CreateFileA 来自 game.05E7461D
0012FC70   063B4210|FileName = "E:\P\game.exe-up.txt"
0012FC74   40000000|Access = GENERIC_WRITE
0012FC78   00000001|ShareMode = FILE_SHARE_READ
0012FC7C   00000000|pSecurity = NULL
0012FC80   00000002|Mode = CREATE_ALWAYS
0012FC84   00000080|Attributes = NORMAL
0012FC88   00000000\hTemplateFile = NULL

现在已经开始读文件了,但是,不是我们需要解密的文件
在次F9,断下

0012F5DC   05E772F4   /CALL 到 CreateFileA 来自 game.05E772EE
0012F5E0   066E6F98   |FileName = "E:\P\optiot.ini"
0012F5E4   80000000   |Access = GENERIC_READ
0012F5E8   00000003   |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012F5EC   0012F630   |pSecurity = 0012F630
0012F5F0   00000003   |Mode = OPEN_EXISTING
0012F5F4   00000080   |Attributes = NORMAL
0012F5F8   00000000   \hTemplateFile = NULL

看到fileName=optiot.ini
取消断点,CTRL+F9
返回上层,
05E772D9    FF75 20         push dword ptr ss:
05E772DC    FF75 1C         push dword ptr ss:
05E772DF    FF75 18         push dword ptr ss:
05E772E2    FF75 14         push dword ptr ss:
05E772E5    FF75 10         push dword ptr ss:
05E772E8    FF75 0C         push dword ptr ss:
05E772EB    FF75 08         push dword ptr ss:
05E772EE    FF15 A8D6E705   call dword ptr ds:            ; kernel32.CreateFileA
这个是调用的代码,不是我们需要的
在次CTRL+F9
0040BB0F    33F6            xor esi,esi
0040BB11    0FB64424 24   movzx eax,byte ptr ss:
0040BB16    8B4C24 1C       mov ecx,dword ptr ss:
0040BB1A    50            push eax
0040BB1B    51            push ecx
0040BB1C    8BCE            mov ecx,esi
0040BB1E    C74424 14 FFFFF>mov dword ptr ss:,-1
0040BB26    E8 559F0100   call game.00425A80
0040BB2B    85C0            test eax,eax

F8往下跟N次………………………………

004ADED3    52            push edx      
004ADED4    50            push eax
004ADED5    8BCD            mov ecx,ebp
004ADED7    E8 84F8FFFF   call game.004AD760这里就是解密的CALL

你问我为什么呢?我也是根据经验,然后看寄存器的地址,
内存数据   只要觉得可以的地址,就看内存数据的16进制,是否和文件的十六进制相同,如果一样的话,恭喜你,解密CALL里你不远啦!

004ADED7    E8 84F8FFFF   call game.004AD760这里就是解密的CALL
F7跟进,
004AD760    64:A1 00000000mov eax,dword ptr fs:
004AD766    6A FF         push -1
004AD768    68 69ED7100   push game.0071ED69
004AD76D    50            push eax
004AD76E    64:8925 0000000>mov dword ptr fs:,esp
004AD775    83EC 58         sub esp,58
004AD778    55            push ebp
004AD779    8BE9            mov ebp,ecx
004AD77B    8A45 04         mov al,byte ptr ss:
004AD77E    84C0            test al,al
004AD780    75 31         jnz short game.004AD7B3
004AD782    A1 7CD68100   mov eax,dword ptr ds:
004AD787    50            push eax
004AD788    8D4C24 1C       lea ecx,dword ptr ss:
004AD78C    FF15 98A67800   call dword ptr ds:               ; msvcp71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >
004AD792    50            push eax
004AD793    8D4C24 38       lea ecx,dword ptr ss:
004AD797    C74424 68 00000>mov dword ptr ss:,0
004AD79F    E8 0CF4FFFF   call game.004ACBB0
004AD7A4    68 A4B67D00   push game.007DB6A4
004AD7A9    8D4C24 38       lea ecx,dword ptr ss:
004AD7AD    51            push ecx
004AD7AE    E8 53212300   call game.006DF906                     ; jmp 到 msvcr71._CxxThrowException
004AD7B3    8B4424 6C       mov eax,dword ptr ss:
004AD7B7    0FB608          movzx ecx,byte ptr ds:
004AD7BA    0FB650 01       movzx edx,byte ptr ds:
004AD7BE    C1E2 10         shl edx,10
004AD7C1    C1E1 18         shl ecx,18
004AD7C4    0BCA            or ecx,edx
004AD7C6    33D2            xor edx,edx
004AD7C8    40            inc eax
004AD7C9    8A70 01         mov dh,byte ptr ds:
004AD7CC    40            inc eax
004AD7CD    53            push ebx
004AD7CE    8B9D F8010000   mov ebx,dword ptr ss:
004AD7D4    56            push esi
004AD7D5    57            push edi
004AD7D6    0BCA            or ecx,edx
004AD7D8    0FB650 01       movzx edx,byte ptr ds:
004AD7DC    0BCA            or ecx,edx
004AD7DE    40            inc eax
004AD7DF    0FB670 01       movzx esi,byte ptr ds:
004AD7E3    C1E6 18         shl esi,18
004AD7E6    33CB            xor ecx,ebx
004AD7E8    40            inc eax
004AD7E9    0FB650 01       movzx edx,byte ptr ds:
004AD7ED    C1E2 10         shl edx,10
004AD7F0    0BF2            or esi,edx
004AD7F2    40            inc eax
004AD7F3    33D2            xor edx,edx
004AD7F5    8A70 01         mov dh,byte ptr ds:
004AD7F8    8B9D FC010000   mov ebx,dword ptr ss:
004AD7FE    40            inc eax
004AD7FF    894C24 18       mov dword ptr ss:,ecx
004AD803    0BF2            or esi,edx
004AD805    0FB650 01       movzx edx,byte ptr ds:
004AD809    0BF2            or esi,edx
004AD80B    33F3            xor esi,ebx
004AD80D    40            inc eax
004AD80E    0FB650 01       movzx edx,byte ptr ds:
004AD812    40            inc eax
004AD813    C1E2 18         shl edx,18
004AD816    897424 78       mov dword ptr ss:,esi
004AD81A    0FB670 01       movzx esi,byte ptr ds:
004AD81E    C1E6 10         shl esi,10
004AD821    0BD6            or edx,esi
004AD823    40            inc eax
004AD824    33DB            xor ebx,ebx
004AD826    8A78 01         mov bh,byte ptr ds:
004AD829    40            inc eax
004AD82A    0FB670 01       movzx esi,byte ptr ds:
004AD82E    0BD3            or edx,ebx
004AD830    40            inc eax
004AD831    0BD6            or edx,esi
004AD833    3395 00020000   xor edx,dword ptr ss:
004AD839    0FB670 01       movzx esi,byte ptr ds:
004AD83D    40            inc eax
004AD83E    0FB678 01       movzx edi,byte ptr ds:
004AD842    C1E6 18         shl esi,18
004AD845    40            inc eax
004AD846    C1E7 10         shl edi,10
004AD849    0BF7            or esi,edi
004AD84B    33DB            xor ebx,ebx
004AD84D    8A78 01         mov bh,byte ptr ds:
004AD850    40            inc eax
004AD851    895424 14       mov dword ptr ss:,edx
004AD855    8A58 01         mov bl,byte ptr ds:
004AD858    0BDE            or ebx,esi
004AD85A    339D 04020000   xor ebx,dword ptr ss:
004AD860    8BB5 D8030000   mov esi,dword ptr ss:
004AD866    83FE 01         cmp esi,1
004AD869    895C24 10       mov dword ptr ss:,ebx
004AD86D    897424 20       mov dword ptr ss:,esi
004AD871    0F8E 1C010000   jle game.004AD993
004AD877    4E            dec esi
004AD878    8DBD 20020000   lea edi,dword ptr ss:
004AD87E    897424 1C       mov dword ptr ss:,esi
004AD882    EB 0C         jmp short game.004AD890
004AD884    8DA424 00000000 lea esp,dword ptr ss:
004AD88B    EB 03         jmp short game.004AD890
004AD88D    8D49 00         lea ecx,dword ptr ds:
004AD890    0FB67424 7B   movzx esi,byte ptr ss:
004AD895    0FB6C7          movzx eax,bh
004AD898    8B0485 08367900 mov eax,dword ptr ds:
004AD89F    3304B5 082E7900 xor eax,dword ptr ds:
004AD8A6    0FB67424 1A   movzx esi,byte ptr ss:
004AD8AB    3304B5 08327900 xor eax,dword ptr ds:
004AD8B2    81E2 FF000000   and edx,0FF
004AD8B8    8B3495 083A7900 mov esi,dword ptr ds:
004AD8BF    8B57 FC         mov edx,dword ptr ds:
004AD8C2    33C6            xor eax,esi
004AD8C4    0FB67424 7A   movzx esi,byte ptr ss:
004AD8C9    33C2            xor eax,edx
004AD8CB    0FB65424 17   movzx edx,byte ptr ss:
004AD8D0    8B1495 082E7900 mov edx,dword ptr ds:
004AD8D7    3314B5 08327900 xor edx,dword ptr ds:
004AD8DE    0FB6F5          movzx esi,ch
004AD8E1    3314B5 08367900 xor edx,dword ptr ds:
004AD8E8    81E3 FF000000   and ebx,0FF
004AD8EE    8B349D 083A7900 mov esi,dword ptr ds:
004AD8F5    0FB65C24 16   movzx ebx,byte ptr ss:
004AD8FA    33D6            xor edx,esi
004AD8FC    3317            xor edx,dword ptr ds:
004AD8FE    0FB67424 13   movzx esi,byte ptr ss:
004AD903    8B34B5 082E7900 mov esi,dword ptr ds:
004AD90A    33349D 08327900 xor esi,dword ptr ds:
004AD911    0FB65C24 79   movzx ebx,byte ptr ss:
004AD916    33349D 08367900 xor esi,dword ptr ds:
004AD91D    81E1 FF000000   and ecx,0FF
004AD923    8B1C8D 083A7900 mov ebx,dword ptr ds:
004AD92A    8B4F 04         mov ecx,dword ptr ds:
004AD92D    33F3            xor esi,ebx
004AD92F    0FB65C24 15   movzx ebx,byte ptr ss:
004AD934    33F1            xor esi,ecx
004AD936    0FB64C24 12   movzx ecx,byte ptr ss:
004AD93B    8B0C8D 08327900 mov ecx,dword ptr ds:
004AD942    330C9D 08367900 xor ecx,dword ptr ds:
004AD949    0FB65C24 1B   movzx ebx,byte ptr ss:
004AD94E    330C9D 082E7900 xor ecx,dword ptr ds:
004AD955    8B5C24 78       mov ebx,dword ptr ss:
004AD959    81E3 FF000000   and ebx,0FF
004AD95F    330C9D 083A7900 xor ecx,dword ptr ds:
004AD966    8B5F F8         mov ebx,dword ptr ds:
004AD969    894424 78       mov dword ptr ss:,eax
004AD96D    8B4424 1C       mov eax,dword ptr ss:
004AD971    33CB            xor ecx,ebx
004AD973    83C7 20         add edi,20
004AD976    8BDE            mov ebx,esi
004AD978    48            dec eax
004AD979    894C24 18       mov dword ptr ss:,ecx
004AD97D    895424 14       mov dword ptr ss:,edx
004AD981    895C24 10       mov dword ptr ss:,ebx
004AD985    894424 1C       mov dword ptr ss:,eax
004AD989^ 0F85 01FFFFFF   jnz game.004AD890
004AD98F    8B7424 20       mov esi,dword ptr ss:
004AD993    8B4424 18       mov eax,dword ptr ss:
004AD997    C1E6 05         shl esi,5
004AD99A    8BBC2E F8010000 mov edi,dword ptr ds:
004AD9A1    8BDF            mov ebx,edi
004AD9A3    C1FB 18         sar ebx,18
004AD9A6    8DB42E F8010000 lea esi,dword ptr ds:
004AD9AD    897C24 1C       mov dword ptr ss:,edi
004AD9B1    0FB67C24 12   movzx edi,byte ptr ss:
004AD9B6    C1E8 18         shr eax,18
004AD9B9    3298 081D7900   xor bl,byte ptr ds:
004AD9BF    8B4424 7C       mov eax,dword ptr ss:
004AD9C3    8818            mov byte ptr ds:,bl
004AD9C5    8B5C24 1C       mov ebx,dword ptr ss:
004AD9C9    C1FB 10         sar ebx,10
004AD9CC    329F 081D7900   xor bl,byte ptr ds:
004AD9D2    0FB6FE          movzx edi,dh
004AD9D5    8858 01         mov byte ptr ds:,bl
004AD9D8    8B5424 1C       mov edx,dword ptr ss:
004AD9DC    8BDA            mov ebx,edx
004AD9DE    C1FB 08         sar ebx,8
004AD9E1    329F 081D7900   xor bl,byte ptr ds:
004AD9E7    8B7C24 78       mov edi,dword ptr ss:
004AD9EB    8858 02         mov byte ptr ds:,bl
004AD9EE    81E7 FF000000   and edi,0FF
004AD9F4    8A9F 081D7900   mov bl,byte ptr ds:
004AD9FA    32DA            xor bl,dl
004AD9FC    8858 03         mov byte ptr ds:,bl
004AD9FF    8B56 04         mov edx,dword ptr ds:
004ADA02    0FB67C24 7B   movzx edi,byte ptr ss:
004ADA07    8BDA            mov ebx,edx
004ADA09    C1FB 18         sar ebx,18
004ADA0C    329F 081D7900   xor bl,byte ptr ds:
004ADA12    0FB67C24 1A   movzx edi,byte ptr ss:
004ADA17    8858 04         mov byte ptr ds:,bl
004ADA1A    8BDA            mov ebx,edx
004ADA1C    C1FB 10         sar ebx,10
004ADA1F    329F 081D7900   xor bl,byte ptr ds:
004ADA25    0FB67C24 11   movzx edi,byte ptr ss:
004ADA2A    8858 05         mov byte ptr ds:,bl
004ADA2D    8BDA            mov ebx,edx
004ADA2F    C1FB 08         sar ebx,8
004ADA32    329F 081D7900   xor bl,byte ptr ds:
004ADA38    8B7C24 14       mov edi,dword ptr ss:
004ADA3C    8858 06         mov byte ptr ds:,bl
004ADA3F    81E7 FF000000   and edi,0FF
004ADA45    8A9F 081D7900   mov bl,byte ptr ds:
004ADA4B    0FB67C24 17   movzx edi,byte ptr ss:
004ADA50    32DA            xor bl,dl
004ADA52    8858 07         mov byte ptr ds:,bl
004ADA55    8B56 08         mov edx,dword ptr ds:
004ADA58    8BDA            mov ebx,edx
004ADA5A    C1FB 18         sar ebx,18
004ADA5D    329F 081D7900   xor bl,byte ptr ds:
004ADA63    0FB67C24 7A   movzx edi,byte ptr ss:
004ADA68    8858 08         mov byte ptr ds:,bl
004ADA6B    8BDA            mov ebx,edx
004ADA6D    C1FB 10         sar ebx,10
004ADA70    329F 081D7900   xor bl,byte ptr ds:
004ADA76    0FB6FD          movzx edi,ch
004ADA79    8858 09         mov byte ptr ds:,bl
004ADA7C    8BDA            mov ebx,edx
004ADA7E    C1FB 08         sar ebx,8
004ADA81    329F 081D7900   xor bl,byte ptr ds:
004ADA87    8B7C24 10       mov edi,dword ptr ss:
004ADA8B    8858 0A         mov byte ptr ds:,bl
004ADA8E    81E7 FF000000   and edi,0FF
004ADA94    8A9F 081D7900   mov bl,byte ptr ds:
004ADA9A    32DA            xor bl,dl
004ADA9C    8858 0B         mov byte ptr ds:,bl
004ADA9F    8B56 0C         mov edx,dword ptr ds:
004ADAA2    0FB67424 13   movzx esi,byte ptr ss:
004ADAA7    8BDA            mov ebx,edx
004ADAA9    C1FB 18         sar ebx,18
004ADAAC    329E 081D7900   xor bl,byte ptr ds:
004ADAB2    0FB67424 16   movzx esi,byte ptr ss:
004ADAB7    8858 0C         mov byte ptr ds:,bl
004ADABA    8BDA            mov ebx,edx
004ADABC    C1FB 10         sar ebx,10
004ADABF    329E 081D7900   xor bl,byte ptr ds:
004ADAC5    0FB67424 79   movzx esi,byte ptr ss:
004ADACA    8858 0D         mov byte ptr ds:,bl
004ADACD    8BDA            mov ebx,edx
004ADACF    C1FB 08         sar ebx,8
004ADAD2    329E 081D7900   xor bl,byte ptr ds:
004ADAD8    81E1 FF000000   and ecx,0FF
004ADADE    8858 0E         mov byte ptr ds:,bl
004ADAE1    8A89 081D7900   mov cl,byte ptr ds:
004ADAE7    5F            pop edi
004ADAE8    32CA            xor cl,dl
004ADAEA    5E            pop esi
004ADAEB    8848 0F         mov byte ptr ds:,cl
004ADAEE    8B4C24 60       mov ecx,dword ptr ss:
004ADAF2    5B            pop ebx
004ADAF3    5D            pop ebp
004ADAF4    64:890D 0000000>mov dword ptr fs:,ecx
004ADAFB    83C4 64         add esp,64
004ADAFE    C2 0800         retn 8

看,是不是很眼熟呢?没错,这个就是解密的汇编码~
F8一直往下走,你就会看到,他是怎么解密的了,
剩下的就是根据汇编码来解密了,
但是,因为新手门都会觉得,mov ecx,dword ptr ds:
这样的地址不是很奇怪吗?怎么会有*的,
其实也不奇怪,因为游戏在解密的时候,他会用key生成一段内存代码,
而ecx*4+793208这里的793208恰恰指向编码地址,所以他会根据xor的结果取出对应的值
ecx*4+793208 这里只能真对我解密的游戏GAME,每个游戏的解密方式都不一样,很多游戏,都很容易,但是很多很难,

到此结束!!新手建议,尽量把汇编学懂,分析游戏封包什么的,都会很容易
页: [1]
查看完整版本: 某游戏资源解密