吾笨笨且懒散兮
急须改之而奋进
posts - 71, comments - 151, trackbacks - 0, articles - 0 :: :: :: :: ::
Posted on 2009-09-24 01:45
阅读(892) 所属分类: 声明:本文是好久以前发在吾爱破解论坛上的,由于它有一定的纪念意义,故将它转发到这里留念之用… #8230; 游戏的服务器列表更新了,而存服务器信息的
在游戏的更新服务器上加密保存的,没能力分析它的解密算法,就想写个程序,从内存里读出来,工作量就是那么多,不如索性做成教程,分享给像我一样刚刚入门的朋友,说不定就又能混一篇精华,哈哈… #8230; 其实这个的道理跟找游戏中遍历怪物啊,地面物品啊,都是都差不多的,而且,这个的数据不会想怪一下死了消失了,也不会像在游戏里,你中断的时间太长游戏会掉线,而且这个的负责程度相当于一个普通没有任何保护的游戏,比较简单,但是,在这里提醒大家,如果要做外挂的话,大家自己捣鼓捣鼓,学习一下就可以了,不要靠这个来赚钱,不安全的,尤其是
的游戏,所以请大家自重! 本文适合还没有入门的新朋友上手用的,所有,各位大牛就可以飘过不看它了! 不多废话,进入主题,我现在要找服务器列表,当然就要先从内存里搜一个服务器的名字(别的信息不知道,只能搜名字了!)
像上图,就搜葫芦山了,结果如下:
里的数据区中看一下这几个地址,确定,第一个地址也就是:
就是我们像要的地址了,至于为什么,你看一下就可以知道了(因为第一个在一个结构体数组里,其他的都是独立的,所以第一个是!)。 好了,在
里,来到
这个地址,在第一个
上下内存访问断点:
来到这里:
现在我们需要知道的是,
的内容是从哪里来的,所以向上看:
0040CA3B | \8BC2 |mov eax, edx ; 1
,再向上:
0040CA17 |. 8B83 18010000 |
mov eax
, dword ptr [
0040CA1D |. 8B
mov esi
, dword ptr [
0040CA20 |. 8D
lea eax
, dword ptr [
0040CA23 |. 8D57 04 |
lea edx
, dword ptr [
0040CA26 |. 85D2 |
test edx
0040CA28 |. C746 3C 01000 |
mov dword ptr [
2F |. 8D9E 8C
000000 |
lea ebx
, dword ptr [
0040CA35 |. 75 04 |
jnz short 0040CA3B 这个流程应该是比较简单的,我就从头分析一下:
0 /$ 6A FF push -1
2 |. 68 08184600 push 00461808 咐
|g SE 处理程序***
7 |. 64:A1 0000000
mov eax
, dword ptr fs
8CD |. 50 push eax
8CE |. 64:8925 00000
mov dword ptr fs
:[0], e 0040C
8D5 |. 83EC 24 sub e , 24
8D8 |. 53 push ebx
8D9 |. 8BD9 mov ebx
8DB |. 8B83 78010000 mov eax
, dword ptr [
+178] 取出返回值,如果是
就不做处理!
8E1 |. 83F
8 FF cmp eax
8E4 |. 895C
24 08 mov dword ptr [
e +8], ebx
8E8 |. 0F
84 89000000 je 0040C
8EE |. 55 push e 0040C
8EF |. 57 push edi
0 |. 8D
24 2C lea ecx
, dword ptr [
4 |. 51 push ecx
5 |. 8D5424 2C lea edx
, dword ptr [
9 |. 52 push edx
8FA |. 50 push eax
8FB |. 8D8B 58010000 lea ecx
, dword ptr [
901 |. E8 0ACAFFFF call 00409310
906 |. 33ED xor e , e 0040C
908 |. 3BC5 cmp eax
, e 如果函数返回值是
,就走人
90A |. 74 69 je short 0040C
90C |. 8B78 04 mov edi
, dword ptr [
90F |. 3BFD cmp edi
, e 0040C
911 |. 74 62 je short 0040C
913 |. 56 push esi ESI
的值都是
004812A
914 |. 8BB3 DC000000 mov esi
, dword ptr [
+DC] 跟进
看下:
21E8 0D F0 AD BA 70
32 01 58 7D 32 01
32 01 .
\2X}2,2
8 0D F0 AD BA 88 31 32
8 31 32
8 31 32 01 .
2208 0D F0 AD BA 28 01 30 01 42 01 30 01 42 01 30 01 .
2218 0D F0 AD BA 28 23
01 00 00 00 00 0D F0 AD BA .
?#.....
2228 80 23
01 00 00 00 00
0 AD BA 0D F0 AD BA
瓠 继续:
91A |. 8B46 04 mov eax
, dword ptr [
+4] 取出了各个大区的序号
·~~
91D |. 3BC5 cmp eax
, e 到这里可以知道,大区的地址指针
偏移的形式应该在:
004812A
8+DC]+4] 看下
的内容:
70 01 00 00 00 B9 E3 B6 AB C
8 00 00
8 17 04 ...
广东区
80 00 00 00 00
8 17 04 EA 76 94
01 ....X?
90 64 77 94
D0 31 30 01 00 00
01 D8 31 30 01 dw
01325CA0 00 00 00 00 64 77 94
50 32 30 01 00 00
01 ....dw
01325CB0 98 83
0 30 30 01 00 00
01 00 00 00 00 槂
?0......
01325CC0 06 00 00 00 B0 4E 31 01
8 4E 31 01 ...
01325CD
8 4E 31 01 30 18 00 00 78 01
01 28 03
01325CE0 01 00 00 00 40 05
01 38 00 00 00 48 32 30 01 ...@8...H20
01325CF0 78 01
01 30 2E 38 32 30 34 2E 30 36 00 00 00 x0.8204.06...
这个就是服务器大区的大概的结构了,里面各个数据的含义还不是很清楚,不过不用着急,通过代码,我们都会弄明白的!
继续回到代码中分析:
91F |. C74424 1C FFF mov dword ptr [
927 |. 75 04 jnz short 0040C
929 |. 33C
0 xor eax
92B |. EB 18 jmp short 0040C
92D |> 8B4E 08 mov ecx
, dword ptr [
看一下
的内容吧
0132D048 0D F0 AD BA 0D F0 AD BA 0D F0 AD BA 0D F0 AD BA .
0132D058 0D F0 AD BA 0D F0 AD BA 0D F0 AD BA 0D F0 AD BA .
0132D068 0D F0 AD BA 0D F0 AD BA 0D F0 AD BA 0D F0 AD BA .
0132D078 0D F0 AD BA 0D F0 AD BA 0D F0 AD BA 0D F0 AD BA .
都是同一个数字,暂且不多考虑,估计接下来应该是遍历大区的信息啊,想下,我们在写程序的时候,循环需要什么来着,对,就是循环多少次啊,接下来的代码就是计算有多少个大区,以控制循环多少次了!
930 |. 2BC8 sub ecx
932 |. B8 8DC
0088C mov eax
937 |. F7E9 imul ecx
939 |. 03D1 add edx
93B |. C1FA 08 sar edx
93E |. 8BC2 mov eax
940 |. C1E8 1F shr eax
943 |. 03C
2 add eax
, edx ;
这里就是大区的数量了
显示的是
,即有
个大区
好了,到这里,
里存的就是有多少个大区了
继续看
945 |> 33C
9 xor ecx
947 |. 3BC5 cmp eax
, e 0040C
949 |. 76 29 jbe short 0040C
94B |. 8B97 84000000 mov edx
, dword ptr [
+84] 取出我们选择的大区的序号
951 |. 8B76 04 mov esi
, dword ptr [
+4] 取出大区的首个元素:序号 下面开始循环,遍历各个大区,我们取大区的信息也主要就依靠这个循环了
954 |. 33FF xor edi
956 |. 897424 24 mov dword ptr [
e +24], esi
95A |. 897C
24 10 mov dword ptr [
e +10], edi
95E |. 8BFF mov edi
960 |> 391437 / cmp dword ptr [
], edx 循环比较,看看取那个区下的服务器
963 |. 74 26 |
je short 0040C
98B 只要是我们选的区,拿就跳走,不是就继续循环
965 |. 41 | inc ecx
966 |. 81C
7 D4010000 | add edi
, 1D4 在内存里,每个大区信息的结构体大小为
96C |. 3BC8 | cmp ecx
96E |.^ 72 F0 \ jb short 0040C
970 |. 897C
24 10 mov dword ptr [
e +10], edi
根据这个循环,我们可以很轻松的写出遍历所有大区的代码了,不过不用太着急,在这里标记一下,因为,这个大区的结构中很多的数据成员,我们都不清楚,
现在只知道第一个成员是大区的
第二个是名字
而且结构的大小要凑够
,其他的都还未知,继续分析,或许等下就清晰了,嘿嘿! 继续看代码:
98B |> \8B8437 C80100 mov eax
, dword ptr [
8] 看到了吧,大区数构中偏移第
的成员是个最小值
992 |. 3BC5 cmp eax
, e 0040C
994 |. 897C
24 10 mov dword ptr [
e +10], edi
998 |. 75 06 jnz short 0040C
99A |. 896C
24 20 mov dword ptr [
e +20], e 0040C
99E |. EB 1E jmp short 0040C
0 |> 8B
37 CC0100
mov ecx
, dword ptr [
+1CC] 大区数构中偏移第
的成员是个最大值
7 |. 2BC8 sub ecx
, eax 同算大区的数量一样,计算服务器的数量
9 |. B8 E
3E mov eax
9AE |. F7E9 imul ecx 3E
最大值
最小值
9B0 |. C1FA 06 sar edx
, 6 取其积的高
位值右移
9B3 |. 8BC2 mov eax
9B5 |. C1E8 1F shr eax
, 1F 再移动
9B8 |. 03C
2 add eax
, edx 取他们的和
显示是
个服务器,循环
9BA |. 894424 20 mov dword ptr [
e +20], eax 把结果保存一下
哈哈,结构越来越清晰,思路越来越明确,大家猜下,接下来是要干什么了啊
~~~~ 0040C
9BE |> \8B83 1C
010000 mov eax
, dword ptr [
] 还不清楚它的作用,
显示是
,先不管它
4 |. 33D2 xor edx
6 |. 85C
0 test eax
8 |. 894424 18 mov dword ptr [
e +18], eax
9CC |. 0F
8E 95010000 jle 0040CB67
9D2 |. 33C
9 xor ecx
9D4 |. EB 0A jmp short 0040C
9E0 下面的代码应该很眼熟吧,典型的
9D6 |> 8B
24 2C /
mov ecx
, dword ptr [
9DA |. 8B5424 28 |
mov edx
, dword ptr [
9DE |. 8BFF |
mov edi
9E0 |> 3B5424 20 cmp edx
, dword ptr [
e +20] 将计数器
跟服务器的数量进行比较,看看循环是否结束
9E4 |. 0F
83 42010000 |
j 0040CB
9EA |. 8B8437 C80100|
mov eax
, dword ptr [
8] 取出第一个服务器的信息结构的首地址 不如我们跟进去看看,服务器结构是什么样子,哈哈
00 00 00 BA F
2 AB C9 BD 00
9 17 04 ....
葫芦山
8 94 FA 17 04 00 00 00 00 00 E9 92
40 00 93 01 旡
5D8 FF FF 01 00 00 00
01 64 77 94
98 FA 17 04 ...dw
01 00 00 00 00 30 2E 31 01 榺
......0.1
8 00 00
01 38 2E 31 01 94 FA 17
8 FA 17 04 ..8.1
旡 0132A
608 00 E9 92
00 00 00 00 00 00
01 00 00 00 00 .
|..........
618 08 FB 17 04 B0 D9 98
01 94 D9 98
628 00 00
01 38 2E 31 01 60 00 00 40 30 5B 27 01 ..8.1`..@0['
01 31 31 39 2E 31 34 37 2E 31 36 2E 31
,119.147.16.1
648 33 38
33 31 30 30 00 00 00 00 00 00 00 00 00 38:3100......... 不多介绍了,继续看下面的代码:
1 |. 8D
lea edi
, dword ptr [
是结构偏移的计数器,大家都应该能看明白的
4 |. 42 |
inc edx 循环计数器了,不用我讲的
·~~
5 |. 81C
1 08010000 |
add ecx
, 108 每个服务器信息结构的大小是
,指到数组的下个成员
9FB |. 85ED |
test e , e 0040C
9FD |. 895424 28 |
mov dword ptr [
e +28], edx 保存服务器的序号信息
0040CA01 |. 894C
24 2C |
mov dword ptr [
], ecx 保存服务器信息结构的偏移信息
0040CA05 |. 0F
8C A9020000 |
jl 0040CCB4
0040CA0B |. 3BAB 1C
010000 |
cmp e , dword ptr [
] 看来这个
很关键哦,
0040CA11 |. 0F
8D 9D020000 |
jge 0040CCB4 大于等于就跳走了
~~~ 这里用到了这个
这个变量,根据上面代码的最后两行,如果服务器数量大于等于
就跳走,估计是个用来防止异常的,有兴趣的朋友可以跟一下
这里就不多说了!
继续看代码:
0040CA17 |. 8B83 18010000 |
mov eax
, dword ptr [
+118] 取出第一个服务器结构的首地址
0040CA1D |. 8B
mov esi
, dword ptr [
0040CA20 |. 8D
lea eax
, dword ptr [
e *4] dword tr [eax+e *4]
不会被看糊涂吧,取结构体成员的基本方法!
0040CA23 |. 8D57 04 |
lea edx
, dword ptr [
+4] 还记得
里存的是什么吧,哈哈,偏移
就是取服务器名字了
0040CA26 |. 85D2 |
test edx
0040CA28 |. C746 3C 01000|
mov dword ptr [
2F |. 8D9E 8C
000000 |
lea ebx
, dword ptr [
0040CA35 |. 75 04 |
jnz short 0040CA3B
0040CA37 |. 33C
xor eax
0040CA39 |. EB 14 |
jmp short 0040CA
0040CA3B |> 8BC2 |
mov eax
, edx 1
0040CA3D |. 8D48 01 |
lea ecx
, dword ptr [
0040CA40 |. 894C
24 30 |
mov dword ptr [
e +30], ecx
0040CA44 |> 8A
, byte ptr [
] 断在了这里,也就是说,这里取了服务器的列表信息!
0040CA46 |. 40 ||
inc eax ;
眼熟不?哈哈
0040CA47 |. 84C
test cl
0040CA49 |.^ 75 F9 |\
jnz short 0040CA44 好了,分析就基本上到此结束了,没有必要再继续分析了,接下来就是分析一下,我们需要什么东西,然后就是怎么把我们分析得到的东西转换成代码! 先想想我们现在需要的东西:各个大区的序号,还有大区的名字,服务器的名字,服务器的
和端口号,需要的数据就这么多了,接下来看看我们现在分析到了什么数据
~ 先看下服务器的结构中,我们已经知道了哪些数据: 引用:
1. 每个服务器信息结构的大小是
2. 直接引用服务器的数据,如下:
00 00 00 BA F
2 AB C9 BD 00
9 17 04 ....
葫芦山
8 94 FA 17 04 00 00 00 00 00 E9 92
40 00 93 01 旡
5D8 FF FF 01 00 00 00
01 64 77 94
98 FA 17 04 ...dw
01 00 00 00 00 30 2E 31 01 榺
......0.1
8 00 00
01 38 2E 31 01 94 FA 17
8 FA 17 04 ..8.1
旡 0132A
608 00 E9 92
00 00 00 00 00 00
01 00 00 00 00 .
|..........
618 08 FB 17 04 B0 D9 98
01 94 D信息提示
您的同一ip请求过于频繁,如果希望继续访问,请输入验证码:
Copyright 1998 – 2010 Tencent. All Rights Reserved.信息提示
您的同一ip请求过于频繁,如果希望继续访问,请输入验证码:
Copyright 1998 – 2010 Tencent. All Rights Reserved.