|
欢迎您注册加入!这里有您将更精采!
您需要 登录 才可以下载或查看,没有账号?注册
x
第一次写文章,写的不好,见谅
因为我是做**的,接触的东西教多,杂七杂八,都是半通水,
来这里也那么久了,没发过什么实质性的文章,
在这里先介绍下,如何解密游戏资源,
因为很多游戏,都是用一些工具吧资源加密了,我们看不到文件里面的内容,但是,解密以后,就如同脱了衣服的娘们站在你面前,想怎么看就怎么看,
废话不多说了,下面进入正题,
需要工具: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:[ebp+20]
05E772DC FF75 1C push dword ptr ss:[ebp+1C]
05E772DF FF75 18 push dword ptr ss:[ebp+18]
05E772E2 FF75 14 push dword ptr ss:[ebp+14]
05E772E5 FF75 10 push dword ptr ss:[ebp+10]
05E772E8 FF75 0C push dword ptr ss:[ebp+C]
05E772EB FF75 08 push dword ptr ss:[ebp+8]
05E772EE FF15 A8D6E705 call dword ptr ds:[5E7D6A8] ; kernel32.CreateFileA
这个是调用的代码,不是我们需要的
在次CTRL+F9
0040BB0F 33F6 xor esi,esi
0040BB11 0FB64424 24 movzx eax,byte ptr ss:[esp+24]
0040BB16 8B4C24 1C mov ecx,dword ptr ss:[esp+1C]
0040BB1A 50 push eax
0040BB1B 51 push ecx
0040BB1C 8BCE mov ecx,esi
0040BB1E C74424 14 FFFFF>mov dword ptr ss:[esp+14],-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 00000000 mov eax,dword ptr fs:[0]
004AD766 6A FF push -1
004AD768 68 69ED7100 push game.0071ED69
004AD76D 50 push eax
004AD76E 64:8925 0000000>mov dword ptr fs:[0],esp
004AD775 83EC 58 sub esp,58
004AD778 55 push ebp
004AD779 8BE9 mov ebp,ecx
004AD77B 8A45 04 mov al,byte ptr ss:[ebp+4]
004AD77E 84C0 test al,al
004AD780 75 31 jnz short game.004AD7B3
004AD782 A1 7CD68100 mov eax,dword ptr ds:[81D67C]
004AD787 50 push eax
004AD788 8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
004AD78C FF15 98A67800 call dword ptr ds:[78A698] ; 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:[esp+38]
004AD797 C74424 68 00000>mov dword ptr ss:[esp+68],0
004AD79F E8 0CF4FFFF call game.004ACBB0
004AD7A4 68 A4B67D00 push game.007DB6A4
004AD7A9 8D4C24 38 lea ecx,dword ptr ss:[esp+38]
004AD7AD 51 push ecx
004AD7AE E8 53212300 call game.006DF906 ; jmp 到 msvcr71._CxxThrowException
004AD7B3 8B4424 6C mov eax,dword ptr ss:[esp+6C]
004AD7B7 0FB608 movzx ecx,byte ptr ds:[eax]
004AD7BA 0FB650 01 movzx edx,byte ptr ds:[eax+1]
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:[eax+1]
004AD7CC 40 inc eax
004AD7CD 53 push ebx
004AD7CE 8B9D F8010000 mov ebx,dword ptr ss:[ebp+1F8]
004AD7D4 56 push esi
004AD7D5 57 push edi
004AD7D6 0BCA or ecx,edx
004AD7D8 0FB650 01 movzx edx,byte ptr ds:[eax+1]
004AD7DC 0BCA or ecx,edx
004AD7DE 40 inc eax
004AD7DF 0FB670 01 movzx esi,byte ptr ds:[eax+1]
004AD7E3 C1E6 18 shl esi,18
004AD7E6 33CB xor ecx,ebx
004AD7E8 40 inc eax
004AD7E9 0FB650 01 movzx edx,byte ptr ds:[eax+1]
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:[eax+1]
004AD7F8 8B9D FC010000 mov ebx,dword ptr ss:[ebp+1FC]
004AD7FE 40 inc eax
004AD7FF 894C24 18 mov dword ptr ss:[esp+18],ecx
004AD803 0BF2 or esi,edx
004AD805 0FB650 01 movzx edx,byte ptr ds:[eax+1]
004AD809 0BF2 or esi,edx
004AD80B 33F3 xor esi,ebx
004AD80D 40 inc eax
004AD80E 0FB650 01 movzx edx,byte ptr ds:[eax+1]
004AD812 40 inc eax
004AD813 C1E2 18 shl edx,18
004AD816 897424 78 mov dword ptr ss:[esp+78],esi
004AD81A 0FB670 01 movzx esi,byte ptr ds:[eax+1]
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:[eax+1]
004AD829 40 inc eax
004AD82A 0FB670 01 movzx esi,byte ptr ds:[eax+1]
004AD82E 0BD3 or edx,ebx
004AD830 40 inc eax
004AD831 0BD6 or edx,esi
004AD833 3395 00020000 xor edx,dword ptr ss:[ebp+200]
004AD839 0FB670 01 movzx esi,byte ptr ds:[eax+1]
004AD83D 40 inc eax
004AD83E 0FB678 01 movzx edi,byte ptr ds:[eax+1]
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:[eax+1]
004AD850 40 inc eax
004AD851 895424 14 mov dword ptr ss:[esp+14],edx
004AD855 8A58 01 mov bl,byte ptr ds:[eax+1]
004AD858 0BDE or ebx,esi
004AD85A 339D 04020000 xor ebx,dword ptr ss:[ebp+204]
004AD860 8BB5 D8030000 mov esi,dword ptr ss:[ebp+3D8]
004AD866 83FE 01 cmp esi,1
004AD869 895C24 10 mov dword ptr ss:[esp+10],ebx
004AD86D 897424 20 mov dword ptr ss:[esp+20],esi
004AD871 0F8E 1C010000 jle game.004AD993
004AD877 4E dec esi
004AD878 8DBD 20020000 lea edi,dword ptr ss:[ebp+220]
004AD87E 897424 1C mov dword ptr ss:[esp+1C],esi
004AD882 EB 0C jmp short game.004AD890
004AD884 8DA424 00000000 lea esp,dword ptr ss:[esp]
004AD88B EB 03 jmp short game.004AD890
004AD88D 8D49 00 lea ecx,dword ptr ds:[ecx]
004AD890 0FB67424 7B movzx esi,byte ptr ss:[esp+7B]
004AD895 0FB6C7 movzx eax,bh
004AD898 8B0485 08367900 mov eax,dword ptr ds:[eax*4+793608]
004AD89F 3304B5 082E7900 xor eax,dword ptr ds:[esi*4+792E08]
004AD8A6 0FB67424 1A movzx esi,byte ptr ss:[esp+1A]
004AD8AB 3304B5 08327900 xor eax,dword ptr ds:[esi*4+793208]
004AD8B2 81E2 FF000000 and edx,0FF
004AD8B8 8B3495 083A7900 mov esi,dword ptr ds:[edx*4+793A08]
004AD8BF 8B57 FC mov edx,dword ptr ds:[edi-4]
004AD8C2 33C6 xor eax,esi
004AD8C4 0FB67424 7A movzx esi,byte ptr ss:[esp+7A]
004AD8C9 33C2 xor eax,edx
004AD8CB 0FB65424 17 movzx edx,byte ptr ss:[esp+17]
004AD8D0 8B1495 082E7900 mov edx,dword ptr ds:[edx*4+792E08]
004AD8D7 3314B5 08327900 xor edx,dword ptr ds:[esi*4+793208]
004AD8DE 0FB6F5 movzx esi,ch
004AD8E1 3314B5 08367900 xor edx,dword ptr ds:[esi*4+793608]
004AD8E8 81E3 FF000000 and ebx,0FF
004AD8EE 8B349D 083A7900 mov esi,dword ptr ds:[ebx*4+793A08]
004AD8F5 0FB65C24 16 movzx ebx,byte ptr ss:[esp+16]
004AD8FA 33D6 xor edx,esi
004AD8FC 3317 xor edx,dword ptr ds:[edi]
004AD8FE 0FB67424 13 movzx esi,byte ptr ss:[esp+13]
004AD903 8B34B5 082E7900 mov esi,dword ptr ds:[esi*4+792E08]
004AD90A 33349D 08327900 xor esi,dword ptr ds:[ebx*4+793208]
004AD911 0FB65C24 79 movzx ebx,byte ptr ss:[esp+79]
004AD916 33349D 08367900 xor esi,dword ptr ds:[ebx*4+793608]
004AD91D 81E1 FF000000 and ecx,0FF
004AD923 8B1C8D 083A7900 mov ebx,dword ptr ds:[ecx*4+793A08]
004AD92A 8B4F 04 mov ecx,dword ptr ds:[edi+4]
004AD92D 33F3 xor esi,ebx
004AD92F 0FB65C24 15 movzx ebx,byte ptr ss:[esp+15]
004AD934 33F1 xor esi,ecx
004AD936 0FB64C24 12 movzx ecx,byte ptr ss:[esp+12]
004AD93B 8B0C8D 08327900 mov ecx,dword ptr ds:[ecx*4+793208]
004AD942 330C9D 08367900 xor ecx,dword ptr ds:[ebx*4+793608]
004AD949 0FB65C24 1B movzx ebx,byte ptr ss:[esp+1B]
004AD94E 330C9D 082E7900 xor ecx,dword ptr ds:[ebx*4+792E08]
004AD955 8B5C24 78 mov ebx,dword ptr ss:[esp+78]
004AD959 81E3 FF000000 and ebx,0FF
004AD95F 330C9D 083A7900 xor ecx,dword ptr ds:[ebx*4+793A08]
004AD966 8B5F F8 mov ebx,dword ptr ds:[edi-8]
004AD969 894424 78 mov dword ptr ss:[esp+78],eax
004AD96D 8B4424 1C mov eax,dword ptr ss:[esp+1C]
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:[esp+18],ecx
004AD97D 895424 14 mov dword ptr ss:[esp+14],edx
004AD981 895C24 10 mov dword ptr ss:[esp+10],ebx
004AD985 894424 1C mov dword ptr ss:[esp+1C],eax
004AD989 ^ 0F85 01FFFFFF jnz game.004AD890
004AD98F 8B7424 20 mov esi,dword ptr ss:[esp+20]
004AD993 8B4424 18 mov eax,dword ptr ss:[esp+18]
004AD997 C1E6 05 shl esi,5
004AD99A 8BBC2E F8010000 mov edi,dword ptr ds:[esi+ebp+1F8]
004AD9A1 8BDF mov ebx,edi
004AD9A3 C1FB 18 sar ebx,18
004AD9A6 8DB42E F8010000 lea esi,dword ptr ds:[esi+ebp+1F8]
004AD9AD 897C24 1C mov dword ptr ss:[esp+1C],edi
004AD9B1 0FB67C24 12 movzx edi,byte ptr ss:[esp+12]
004AD9B6 C1E8 18 shr eax,18
004AD9B9 3298 081D7900 xor bl,byte ptr ds:[eax+791D08]
004AD9BF 8B4424 7C mov eax,dword ptr ss:[esp+7C]
004AD9C3 8818 mov byte ptr ds:[eax],bl
004AD9C5 8B5C24 1C mov ebx,dword ptr ss:[esp+1C]
004AD9C9 C1FB 10 sar ebx,10
004AD9CC 329F 081D7900 xor bl,byte ptr ds:[edi+791D08]
004AD9D2 0FB6FE movzx edi,dh
004AD9D5 8858 01 mov byte ptr ds:[eax+1],bl
004AD9D8 8B5424 1C mov edx,dword ptr ss:[esp+1C]
004AD9DC 8BDA mov ebx,edx
004AD9DE C1FB 08 sar ebx,8
004AD9E1 329F 081D7900 xor bl,byte ptr ds:[edi+791D08]
004AD9E7 8B7C24 78 mov edi,dword ptr ss:[esp+78]
004AD9EB 8858 02 mov byte ptr ds:[eax+2],bl
004AD9EE 81E7 FF000000 and edi,0FF
004AD9F4 8A9F 081D7900 mov bl,byte ptr ds:[edi+791D08]
004AD9FA 32DA xor bl,dl
004AD9FC 8858 03 mov byte ptr ds:[eax+3],bl
004AD9FF 8B56 04 mov edx,dword ptr ds:[esi+4]
004ADA02 0FB67C24 7B movzx edi,byte ptr ss:[esp+7B]
004ADA07 8BDA mov ebx,edx
004ADA09 C1FB 18 sar ebx,18
004ADA0C 329F 081D7900 xor bl,byte ptr ds:[edi+791D08]
004ADA12 0FB67C24 1A movzx edi,byte ptr ss:[esp+1A]
004ADA17 8858 04 mov byte ptr ds:[eax+4],bl
004ADA1A 8BDA mov ebx,edx
004ADA1C C1FB 10 sar ebx,10
004ADA1F 329F 081D7900 xor bl,byte ptr ds:[edi+791D08]
004ADA25 0FB67C24 11 movzx edi,byte ptr ss:[esp+11]
004ADA2A 8858 05 mov byte ptr ds:[eax+5],bl
004ADA2D 8BDA mov ebx,edx
004ADA2F C1FB 08 sar ebx,8
004ADA32 329F 081D7900 xor bl,byte ptr ds:[edi+791D08]
004ADA38 8B7C24 14 mov edi,dword ptr ss:[esp+14]
004ADA3C 8858 06 mov byte ptr ds:[eax+6],bl
004ADA3F 81E7 FF000000 and edi,0FF
004ADA45 8A9F 081D7900 mov bl,byte ptr ds:[edi+791D08]
004ADA4B 0FB67C24 17 movzx edi,byte ptr ss:[esp+17]
004ADA50 32DA xor bl,dl
004ADA52 8858 07 mov byte ptr ds:[eax+7],bl
004ADA55 8B56 08 mov edx,dword ptr ds:[esi+8]
004ADA58 8BDA mov ebx,edx
004ADA5A C1FB 18 sar ebx,18
004ADA5D 329F 081D7900 xor bl,byte ptr ds:[edi+791D08]
004ADA63 0FB67C24 7A movzx edi,byte ptr ss:[esp+7A]
004ADA68 8858 08 mov byte ptr ds:[eax+8],bl
004ADA6B 8BDA mov ebx,edx
004ADA6D C1FB 10 sar ebx,10
004ADA70 329F 081D7900 xor bl,byte ptr ds:[edi+791D08]
004ADA76 0FB6FD movzx edi,ch
004ADA79 8858 09 mov byte ptr ds:[eax+9],bl
004ADA7C 8BDA mov ebx,edx
004ADA7E C1FB 08 sar ebx,8
004ADA81 329F 081D7900 xor bl,byte ptr ds:[edi+791D08]
004ADA87 8B7C24 10 mov edi,dword ptr ss:[esp+10]
004ADA8B 8858 0A mov byte ptr ds:[eax+A],bl
004ADA8E 81E7 FF000000 and edi,0FF
004ADA94 8A9F 081D7900 mov bl,byte ptr ds:[edi+791D08]
004ADA9A 32DA xor bl,dl
004ADA9C 8858 0B mov byte ptr ds:[eax+B],bl
004ADA9F 8B56 0C mov edx,dword ptr ds:[esi+C]
004ADAA2 0FB67424 13 movzx esi,byte ptr ss:[esp+13]
004ADAA7 8BDA mov ebx,edx
004ADAA9 C1FB 18 sar ebx,18
004ADAAC 329E 081D7900 xor bl,byte ptr ds:[esi+791D08]
004ADAB2 0FB67424 16 movzx esi,byte ptr ss:[esp+16]
004ADAB7 8858 0C mov byte ptr ds:[eax+C],bl
004ADABA 8BDA mov ebx,edx
004ADABC C1FB 10 sar ebx,10
004ADABF 329E 081D7900 xor bl,byte ptr ds:[esi+791D08]
004ADAC5 0FB67424 79 movzx esi,byte ptr ss:[esp+79]
004ADACA 8858 0D mov byte ptr ds:[eax+D],bl
004ADACD 8BDA mov ebx,edx
004ADACF C1FB 08 sar ebx,8
004ADAD2 329E 081D7900 xor bl,byte ptr ds:[esi+791D08]
004ADAD8 81E1 FF000000 and ecx,0FF
004ADADE 8858 0E mov byte ptr ds:[eax+E],bl
004ADAE1 8A89 081D7900 mov cl,byte ptr ds:[ecx+791D08]
004ADAE7 5F pop edi
004ADAE8 32CA xor cl,dl
004ADAEA 5E pop esi
004ADAEB 8848 0F mov byte ptr ds:[eax+F],cl
004ADAEE 8B4C24 60 mov ecx,dword ptr ss:[esp+60]
004ADAF2 5B pop ebx
004ADAF3 5D pop ebp
004ADAF4 64:890D 0000000>mov dword ptr fs:[0],ecx
004ADAFB 83C4 64 add esp,64
004ADAFE C2 0800 retn 8
看,是不是很眼熟呢?没错,这个就是解密的汇编码~
F8一直往下走,你就会看到,他是怎么解密的了,
剩下的就是根据汇编码来解密了,
但是,因为新手门都会觉得,mov ecx,dword ptr ds:[ecx*4+793208]
这样的地址不是很奇怪吗?怎么会有*的,
其实也不奇怪,因为游戏在解密的时候,他会用key生成一段内存代码,
而ecx*4+793208这里的793208恰恰指向编码地址,所以他会根据xor的结果取出对应的值
ecx*4+793208 这里只能真对我解密的游戏GAME,每个游戏的解密方式都不一样,很多游戏,都很容易,但是很多很难,
到此结束!!新手建议,尽量把汇编学懂,分析游戏封包什么的,都会很容易
|
评分
-
查看全部评分
|