函數1 - _declspec(naked) void _stdcall getEncryptMsg(long *nIdentity, char * dest)
nIdentity - 008B480C
dest - 二次加密明文
該函數負責生成二次加密后的明文,代碼如下
注意:第13行是原來的代碼,14行是自己加的,原因如下
在實際的客戶端中,mov al, byte ptr [eax] 取的是地址為008B480C的低8位,調試的時候該值為0,有可能二次解密后的解密掩碼會存放在這里,目前還未可知;而在該代碼中008B480C的地址是不可讀的,因此這里需要將AL置0

1
_declspec(naked) void _stdcall getEncryptMsg(long *nIdentity, char * dest){
2
_asm{
3
sub esp, 8
4
push ebx
5
push ebp
6
push esi
7
push edi
8
mov edi, dword ptr [esp+0x20]
9
inc edi
10
mov dword ptr [esp+0x14], 4
11
L008:
12
mov eax, dword ptr [esp+0x1C]
13
;mov al, byte ptr [eax]
14
xor al, al
15
xor al, 0x87
16
push 0x31
17
push 0
18
mov byte ptr [esp+0x1B], al
19
call ll401A60
20
add al, 0x0A
21
push 0x13
22
push 0
23
mov byte ptr [esp+0x30], al
24
call ll401A60
25
26
mov cl, byte ptr [esp+0x30]
27
28
mov ebx, eax
29
add bl, 0x0A
30
movzx eax, bl
31
add esp, 0x10
32
mov byte ptr [edi-1], cl
33
mov byte ptr [edi+8], bl
34
xor esi, esi
35
lea ebp, dword ptr [eax-1]
36
L029:
37
movzx eax, byte ptr [esp+0x13]
38
mov edx, 0x80
39
mov ecx, esi
40
sar edx, cl
41
push ebp
42
push 0
43
test eax, edx
44
jnz L039
45
call ll401A60
46
jmp L041
47
L039:
48
call ll401A60
49
add al, bl
50
L041:
51
add al, byte ptr [esp+0x28]
52
add esp, 8
53
mov byte ptr [edi+esi], al
54
inc esi
55
cmp esi, 8
56
jl L029
57
mov edx, dword ptr [esp+0x1C]
58
mov eax, dword ptr [esp+0x14]
59
inc edx
60
add edi, 0x0A
61
dec eax
62
mov dword ptr [esp+0x1C], edx
63
mov dword ptr [esp+0x14], eax
64
jnz L008
65
pop edi
66
pop esi
67
pop ebp
68
pop ebx
69
add esp, 8
70
retn 8
71
72
}
73
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

---------------------------------------------------------------------------------------------------------
函數2 - _declspec(naked) int _cdecl _ll401A60(int a1, int a2)
該函數負責生成一個偽隨機數



























---------------------------------------------------------------------------------------------------------
函數3 - _declspec(naked) int _cdecl ll4bb903()
該函數根據客戶端啟動時生成的當前時間來進行隨機數生成(這個步驟調試2個小時才出來)















運行的Main函數如下,客戶端在啟動時執行了5次ll4bb903,因此這里也執行5次,不過服務器端也不可能知道客戶端到底什么時候啟動的,所以未必一定要執行5次,這點還沒試





















以上代碼轉成JAVA代碼如下:









































































