以下是我用OD 挂接程序,中断在RECV处后单步跟踪的代码,是某游戏的客户端,我认为这里面有解密代码,各位大哥大姐姐们帮看看,有没有用在解密网络接受到的数据包,有的话能不能告诉我他的解密算法,先谢谢
71A2676F > 8BFF MOV EDI,EDI //bp recv 中段这
71A26771 55 PUSH EBP
71A26772 8BEC MOV EBP,ESP
71A26774 83EC 10 SUB ESP,10 减 10
71A26777 53 PUSH EBX EBX入堆栈
71A26778 33DB XOR EBX,EBX 异或运算
71A2677A 813D 5040A371 2>CMP DWORD PTR DS:[71A34050],WS2_32.71A22> 比较
71A26784 56 PUSH ESI ESI入堆栈
71A26785 0F84 5E4A0000 JE WS2_32.71A2B1E9 跳转
71A2B1E9 391D 5440A371 CMP DWORD PTR DS:[71A34054],EBX 跳到这,比较
71A2B1EF ^\0F84 96B5FFFF JE WS2_32.71A2678B 等于调转
71A2B1F5 FF35 4840A371 PUSH DWORD PTR DS:[71A34048] 入堆栈
71A2B1FB FF15 EC10A271 CALL DWORD PTR DS:[<&KERNEL32.TlsGetValu>; kernel32.TlsGetValue 过程调用
71A2B201 3BC3 CMP EAX,EBX 比较
71A2B203 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX 传送
71A2B206 ^ 0F84 7FB5FFFF JE WS2_32.71A2678B 等于跳转
71A2B20C 895D FC MOV DWORD PTR SS:[EBP-4],EBX 传送
71A2B20F ^ E9 8BB5FFFF JMP WS2_32.71A2679F 无条件转移
71A2679F FF75 08 PUSH DWORD PTR SS:[EBP+8] 转移到这
71A267A2 E8 87C6FFFF CALL WS2_32.71A22E2E 过程调用
71A267A7 8BF0 MOV ESI,EAX 传送
71A267A9 3BF3 CMP ESI,EBX 比较
71A267AB 0F84 C82E0000 JE WS2_32.71A29679 跳转
71A267B1 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10] 传送
71A267B4 57 PUSH EDI 入堆栈
71A267B5 8D4D FC LEA ECX,DWORD PTR SS:[EBP-4] 装入有效地址 后面便宜到ECX
71A267B8 51 PUSH ECX 入堆栈
71A267B9 FF75 F8 PUSH DWORD PTR SS:[EBP-8] 人堆栈
71A267BC 8D4D 14 LEA ECX,DWORD PTR SS:[EBP+14] 装入有效地址,后面到ECX
71A267BF 53 PUSH EBX 入堆栈
71A267C0 53 PUSH EBX 入堆栈
71A267C1 51 PUSH ECX 入堆栈 ECX
71A267C2 8D4D 08 LEA ECX,DWORD PTR SS:[EBP+8] 装入有效地址 后面到ECX
71A267C5 51 PUSH ECX 入堆栈 ECX
71A267C6 6A 01 PUSH 1 入堆栈 1
71A267C8 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX 传送
71A267CB 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C] 传送
71A267CE 8D4D F0 LEA ECX,DWORD PTR SS:[EBP-10] 装入有效地址 后面到ECX
71A267D1 51 PUSH ECX 入堆栈 ECX
71A267D2 FF75 08 PUSH DWORD PTR SS:[EBP+8] 入堆栈
71A267D5 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX 传送
71A267D8 8B46 0C MOV EAX,DWORD PTR DS:[ESI+C] 传送
71A267DB FF50 54 CALL DWORD PTR DS:[EAX+54] 过程调用
71A267DE 8BCE MOV ECX,ESI
71A267E0 8BF8 MOV EDI,EAX
71A267E2 E8 2CC6FFFF CALL WS2_32.71A22E13 过程调用
71A267E7 3BFB CMP EDI,EBX 比较
71A267E9 5F POP EDI 出堆栈
71A267EA 0F85 662E0000 JNZ WS2_32.71A29656 不等于时跳转
71A267F0 F645 15 80 TEST BYTE PTR SS:[EBP+15],80 测试(两操作数做与运算,仅修改标志位,不回送结果
71A267F4 0F85 762E0000 JNZ WS2_32.71A29670 不等于时跳转
71A267FA 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
71A267FD 5E POP ESI 出堆栈ESI
71A267FE 5B POP EBX 出堆栈EBX
71A267FF C9 LEAVE
71A26800 C2 1000 RETN 10
0047CC04 8B15 A03C5C00 MOV EDX,DWORD PTR DS:[5C3CA0] 上面结束后到这 传送
0047CC0A 8BF0 MOV ESI,EAX 传送
0047CC0C 8A42 3D MOV AL,BYTE PTR DS:[EDX+3D] 传送
0047CC0F 84C0 TEST AL,AL 测试
0047CC11 74 0C JE SHORT xy2.0047CC1F 等于跳转
0047CC13 8B0D F43F5C00 MOV ECX,DWORD PTR DS:[5C3FF4] 传送
0047CC19 56 PUSH ESI 入堆栈
0047CC1A E8 91CCFCFF CALL xy2.004498B0 调用过程
0047CC1F 85F6 TEST ESI,ESI 测试
0047CC21 ^\7E AB JLE SHORT xy2.0047CBCE 小于等于转移
0047CC23 A1 A03C5C00 MOV EAX,DWORD PTR DS:[5C3CA0] 传送
0047CC28 8A48 3D MOV CL,BYTE PTR DS:[EAX+3D] 传送
0047CC2B 84C9 TEST CL,CL 测试
0047CC2D 74 0D JE SHORT xy2.0047CC3C 等译跳转
0047CC3C 2BFE SUB EDI,ESI 减
0047CC3E 57 PUSH EDI 入堆栈
0047CC3F 8BCB MOV ECX,EBX 传送
0047CC41 E8 9A5EFFFF CALL xy2.00472AE0 调用子过程
0047CC46 5D POP EBP
0047CC47 5F POP EDI
0047CC48 5E POP ESI
0047CC49 5B POP EBX
0047CC4A 83C4 08 ADD ESP,8 加法
0047CC4D C3 RETN
00472EF5 8B86 28000400 MOV EAX,DWORD PTR DS:[ESI+40028] 传送
00472EFB 5E POP ESI 传送
00472EFC C3 RETN
0047D01B 83F8 04 CMP EAX,4 比较
0047D01E 75 27 JNZ SHORT xy2.0047D047 不等于跳转
0047D047 8B35 047B5E00 MOV ESI,DWORD PTR DS:[5E7B04] 传送
0047D04D 53 PUSH EBX 入堆栈
0047D04E E8 DDF7F8FF CALL xy2.0040C830 调用子过程
0047D053 8BD8 MOV EBX,EAX 入堆栈
0047D055 837B 14 FE CMP DWORD PTR DS:[EBX+14],-2 比较
0047D059 74 28 JE SHORT xy2.0047D083 等于转移
0047D05B 57 PUSH EDI 入堆栈EDI
0047D05C 56 PUSH ESI 入堆栈 ESI
0047D05D E8 4E3F0000 CALL xy2.00480FB0 调用子过程
0047D062 8B4B 14 MOV ECX,DWORD PTR DS:[EBX+14] 传送
0047D065 51 PUSH ECX 入堆栈 ECX
0047D066 56 PUSH ESI 入堆栈 ESI
0047D067 8BF8 MOV EDI,EAX 传送
0047D069 E8 32480000 CALL xy2.004818A0 调用子过程
0047D06E 6A 00 PUSH 0
0047D070 6A 00 PUSH 0
0047D072 56 PUSH ESI
0047D073 E8 D8530000 CALL xy2.00482450 调用子过程
0047D078 57 PUSH EDI 入堆栈EDI
0047D079 56 PUSH ESI 入堆栈 ESI
0047D07A E8 413F0000 CALL xy2.00480FC0 调用子过程
0047D07F 83C4 20 ADD ESP,20 加法
0047D082 5F POP EDI 出堆栈
0047D083 5B POP EBX 出堆栈
0047D084 33C0 XOR EAX,EAX 异或运算
0047D086 5E POP ESI 出堆栈
0047D087 C3 RETN
004551A6 85C0 TEST EAX,EAX 测试
004551A8 7D 54 JGE SHORT xy2.004551FE 大于等于转移
004551FE 8B4C24 68 MOV ECX,DWORD PTR SS:[ESP+68] 传送
00455202 5E POP ESI 出堆栈
00455203 33CC XOR ECX,ESP 异或运算
00455205 E8 173D0900 CALL xy2.004E8F21 调用子过程
0045520A 83C4 68 ADD ESP,68 加法
0045520D C3 RETN
00455219 A1 047B5E00 MOV EAX,DWORD PTR DS:[5E7B04] 传送
0045521E 50 PUSH EAX 入堆栈
0045521F E8 8CBD0200 CALL xy2.00480FB0 调用子过程
00455224 8BF8 MOV EDI,EAX 入堆栈
00455226 E8 0576FBFF CALL xy2.0040C830 调用子过程
0045522B 8B48 5C MOV ECX,DWORD PTR DS:[EAX+5C] 传送
0045522E 8B15 047B5E00 MOV EDX,DWORD PTR DS:[5E7B04] 传送
00455234 51 PUSH ECX 入堆栈
00455235 52 PUSH EDX 入堆栈
00455236 E8 65C60200 CALL xy2.004818A0 调用子过程
0045523B A1 047B5E00 MOV EAX,DWORD PTR DS:[5E7B04] 传送
00455240 6A FF PUSH -1 入堆栈
00455242 50 PUSH EAX 入堆栈
00455243 E8 E8BE0200 CALL xy2.00481130 调用子过程
00455248 83C4 14 ADD ESP,14 加法
0045524B 83F8 04 CMP EAX,4 比较
0045524E 0F85 81000000 JNZ xy2.004552D5 不等于转移
00455254 8B0D 047B5E00 MOV ECX,DWORD PTR DS:[5E7B04] 传送
0045525A 68 B4145300 PUSH xy2.005314B4 ; 入堆栈
0045525F 51 PUSH ECX 入堆栈
00455260 E8 9BC30200 CALL xy2.00481600 调用子过程
00455265 8B15 047B5E00 MOV EDX,DWORD PTR DS:[5E7B04] 传送
0045526B 6A FE PUSH -2 入堆栈
0045526D 52 PUSH EDX 入堆栈
0045526E E8 1DC50200 CALL xy2.00481790 调用子过程
00455273 A1 047B5E00 MOV EAX,DWORD PTR DS:[5E7B04] 传送
00455278 6A FF PUSH -1 入堆栈
0045527A 50 PUSH EAX 入堆栈
0045527B E8 00C10200 CALL xy2.00481380 调用子过程
00455280 83C4 18 ADD ESP,18 加法
00455283 E8 84420900 CALL xy2.004E950C 调用子过程
00455288 83F8 01 CMP EAX,1 比较
0045528B 75 29 JNZ SHORT xy2.004552B6 不等于转移
0045528D 8B4E 14 MOV ECX,DWORD PTR DS:[ESI+14] 传送
00455290 51 PUSH ECX 入堆栈
00455291 E8 7AADFFFF CALL xy2.00450010 调用子过程
00455296 68 302C5300 PUSH xy2.00532C30 ; ASCII "net_scene_process_idle"
0045529B E8 50D30100 CALL xy2.004725F0 调用子过程
004552A0 8B0D 047B5E00 MOV ECX,DWORD PTR DS:[5E7B04] 传送
004552A6 83C4 08 ADD ESP,8 加法
004552A9 57 PUSH EDI 入堆栈
004552AA 51 PUSH ECX 入堆栈
004552AB E8 10BD0200 CALL xy2.00480FC0 调用子过程
004552B0 83C4 08 ADD ESP,8 加法
004552B3 5F POP EDI 出堆栈
004552B4 5E POP ESI 出堆栈
004552B5 C3 RETN
0045170D 8A46 3F MOV AL,BYTE PTR DS:[ESI+3F] 传送
00451710 84C0 TEST AL,AL 测试
00451712 8BBE 64050000 MOV EDI,DWORD PTR DS:[ESI+564] 传送
00451718 895C24 20 MOV DWORD PTR SS:[ESP+20],EBX 传送
0045171C 0F84 24010000 JE xy2.00451846 等于转移
00451846 C64424 13 00 MOV BYTE PTR SS:[ESP+13],0 传送
0045184B ^\EB 91 JMP SHORT xy2.004517DE 无条件转移
004517DE 8A46 49 MOV AL,BYTE PTR DS:[ESI+49] 传送
004517E1 84C0 TEST AL,AL 测试
004517E3 BD 10000000 MOV EBP,10 传送
004517E8 0F85 E6000000 JNZ xy2.004518D4 不等于转移
004517EE 8A4E 3E MOV CL,BYTE PTR DS:[ESI+3E] 传送
004517F1 84C9 TEST CL,CL 测试
004517F3 75 08 JNZ SHORT xy2.004517FD 不等于转移
004517F5 84C0 TEST AL,AL 测试
004517F7 0F84 C5010000 JE xy2.004519C2 等于转移
004519C2 8B46 14 MOV EAX,DWORD PTR DS:[ESI+14] 传送
004519C5 48 DEC EAX 减1
004519C6 83F8 63 CMP EAX,63 比较
004519C9 0F87 31010000 JA xy2.00451B00 不小于或不等于转移
00451B00 8B96 0C970000 MOV EDX,DWORD PTR DS:[ESI+970C] ; xy2.00535DF8传送
00451B06 8D8E 0C970000 LEA ECX,DWORD PTR DS:[ESI+970C] 装入地址
00451B0C 6A 01 PUSH 1 入堆栈
00451B0E FF52 08 CALL DWORD PTR DS:[EDX+8] 调用子过程
00451B11 8BBE 64050000 MOV EDI,DWORD PTR DS:[ESI+564] 传送
00451B17 8BCF MOV ECX,EDI 传送
00451B19 884424 24 MOV BYTE PTR SS:[ESP+24],AL 传送
00451B1D E8 FE490400 CALL xy2.WCanvas::IsMoved 调用子过程
00451B22 F6D8 NEG AL 低位和高位交换
00451B24 68 C3010000 PUSH 1C3 入堆栈
00451B29 68 5E010000 PUSH 15E 入堆栈
00451B2E 8BCF MOV ECX,EDI 传送
00451B30 1BC0 SBB EAX,EAX 带借位减法
00451B32 F7D8 NEG EAX 地位和高位交换
00451B34 8947 10 MOV DWORD PTR DS:[EDI+10],EAX 传送
00451B37 E8 94570400 CALL xy2.WCanvas::ViewPort 调用子过程
00451B3C 6A 1D PUSH 1D 入堆栈
00451B3E 68 22010000 PUSH 122 入堆栈
00451B43 8BCF MOV ECX,EDI 传送
00451B45 E8 06760400 CALL xy2.WCanvas::SetOvlRect 调用子过程
00451B4A 8B5424 24 MOV EDX,DWORD PTR SS:[ESP+24] 传送
00451B4E 8B86 8C000000 MOV EAX,DWORD PTR DS:[ESI+8C] 传送
00451B54 8D8E 8C000000 LEA ECX,DWORD PTR DS:[ESI+8C] 装入地址
00451B5A 52 PUSH EDX 入堆栈
00451B5B FF50 08 CALL DWORD PTR DS:[EAX+8] 调用子过程
00451B5E 8B46 10 MOV EAX,DWORD PTR DS:[ESI+10] 传送
00451B61 50 PUSH EAX 入堆栈
00451B62 E8 7AF18902 CALL 02CF0CE1 调用子过程
00451B67 90 NOP 取反
00451B68 85C0 TEST EAX,EAX 测试
00451B6A 75 4B JNZ SHORT xy2.00451BB7 不等于转移
00451BB7 8B8E 64050000 MOV ECX,DWORD PTR DS:[ESI+564] 传送
00451BBD E8 CE590400 CALL xy2.WCanvas::SkipFrame 调用子过程
00451BC2 8B8E 64050000 MOV ECX,DWORD PTR DS:[ESI+564] 传送
00451BC8 E8 33590400 CALL xy2.WCanvas::NextFrame 调用子过程
00451BCD 8B8E 64050000 MOV ECX,DWORD PTR DS:[ESI+564] 传送
00451BD3 E8 484E0400 CALL xy2.WCanvas::SleepFrame 调用子过程
00451BD8 8B8E 109D0000 MOV ECX,DWORD PTR DS:[ESI+9D10] 传送
00451BDE 3BCB CMP ECX,EBX 比较
00451BE0 74 0F JE SHORT xy2.00451BF1 等于转移
00451BE2 8A86 149D0000 MOV AL,BYTE PTR DS:[ESI+9D14] 传送
00451BE8 84C0 TEST AL,AL 测试
00451BEA 75 05 JNZ SHORT xy2.00451BF1 不等于转移
00451BEC E8 4F440000 CALL xy2.00456040 调用子过程
00451BF1 8B8E 109D0000 MOV ECX,DWORD PTR DS:[ESI+9D10] 传送
00451BF7 3BCB CMP ECX,EBX 比较
00451BF9 74 0F JE SHORT xy2.00451C0A 等于转移
00451BFB 8A86 149D0000 MOV AL,BYTE PTR DS:[ESI+9D14] 传送
00451C01 84C0 TEST AL,AL 测试
00451C03 74 05 JE SHORT xy2.00451C0A 等于转移
00451C05 E8 E6430000 CALL xy2.00455FF0 调用子过程
00451C0A 8A4424 13 MOV AL,BYTE PTR SS:[ESP+13] 传送
00451C0E 84C0 TEST AL,AL 测试
00451C10 0F84 94020000 JE xy2.00451EAA 等于转移
00451EAA 8A46 40 MOV AL,BYTE PTR DS:[ESI+40] 传送
00451EAD 84C0 TEST AL,AL 测试
00451EAF 74 26 JE SHORT xy2.00451ED7 等于转移
00451ED7 8B4C24 3C MOV ECX,DWORD PTR SS:[ESP+3C] 传送
00451EDB 5F POP EDI 出堆栈
00451EDC 64:890D 0000000>MOV DWORD PTR FS:[0],ECX 传送
00451EE3 5E POP ESI 出堆栈
00451EE4 5D POP EBP 出堆栈
00451EE5 5B POP EBX 出堆栈
00451EE6 8BE5 MOV ESP,EBP 传送
00451EE8 5D POP EBP 出堆栈
00451EE9 C3 RETN
0049FD8F ^\EB BF JMP SHORT xy2.0049FD50 无条件转移
0049FD50 6A 00 PUSH 0 入堆栈
0049FD52 6A 00 PUSH 0 入堆栈
0049FD54 6A 00 PUSH 0 入堆栈
0049FD56 6A 00 PUSH 0 入堆栈
0049FD58 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20] 装入地址
0049FD5C 51 PUSH ECX 入堆栈
0049FD5D FFD7 CALL EDI 比较
0049FD5F 85C0 TEST EAX,EAX 测试
0049FD61 74 25 JE SHORT xy2.0049FD88 等于转移
0049FD63 6A 00 PUSH 0 入堆栈
0049FD65 6A 00 PUSH 0
0049FD67 6A 00 PUSH 0
0049FD69 8D5424 1C LEA EDX,DWORD PTR SS:[ESP+1C] 装入地址
0049FD6D 52 PUSH EDX
0049FD6E FFD3 CALL EBX 调用子过程
0049FD70 85C0 TEST EAX,EAX 测试
0049FD72 74 1D JE SHORT xy2.0049FD91 等于转移
0049FD74 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10] 装入地址
0049FD78 50 PUSH EAX 入堆栈
0049FD79 FFD5 CALL EBP 调用子过程
0049FD7B 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10] 装入地址
0049FD7F 51 PUSH ECX 入堆栈
0049FD80 E8 CF0C8602 CALL 02D00A54 调用子过程
0049FD85 90 NOP 取反
0049FD86 ^ EB C8 JMP SHORT xy2.0049FD50 无条件转移
0049FD50 6A 00 PUSH 0
0049FD52 6A 00 PUSH 0
0049FD54 6A 00 PUSH 0
0049FD56 6A 00 PUSH 0
0049FD58 8D4C24 20 LEA ECX,DWORD PTR SS:[ESP+20] 装入地址
0049FD5C 51 PUSH ECX
0049FD5D FFD7 CALL EDI 调用子过程
0049FD5F 85C0 TEST EAX,EAX 测试
0049FD61 74 25 JE SHORT xy2.0049FD88 等于转移
0049FD88 8B16 MOV EDX,DWORD PTR DS:[ESI] ; xy2.00534F64
0049FD8A 8BCE MOV ECX,ESI
0049FD8C FF52 10 CALL DWORD PTR DS:[EDX+10] 调用子过程
0049FD8F ^ EB BF JMP SHORT xy2.0049FD50 //跳到开始,位置,RECV完毕
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)