首页
社区
课程
招聘
[旧帖] [邀请码已发][原创]某游戏平台多开修改.[申请邀请码] 0.00雪花
发表于: 2010-6-4 01:07 2126

[旧帖] [邀请码已发][原创]某游戏平台多开修改.[申请邀请码] 0.00雪花

2010-6-4 01:07
2126
【邀请码已发】某游戏平台多开修改.

【文章标题】:某游戏平台多开修改
【文章作者】: DK
【软件名称】: XXGame.exe 版本:2.4.104.42       
【下载地址】: http://dl_dir.qq.com/minigamefile/QQGame2010Beta4P1_setup_web.EXE
【保护方式】: 无
【编写语言】: VC6.0
【使用工具】: PEiD,OllyDBG.
【操作平台】: Windows XP
【软件介绍】:游戏平台
【作者声明】: 第一次写这种文章,失误之处敬请诸位大侠赐教!
(文章格式参考自论坛各位大侠的作品,谢谢)

思路:
(a)第一次打开游戏平台的情况下,
(b)平台已经运行,第二次打开平台.
在以上(a,b)两种情况下,用OD调试平台的运行,
找到两种情况下程序运行的不同分支,也就是平台退出或运行的跳转语句,修改跳转条件,达到多开的目的.

用PEiD先看一下,没加壳.

1.直接OD打开,程序停在:
004023A4 >/$  55            PUSH EBP
004023A5  |.  8BEC          MOV EBP,ESP
004023A7  |.  6A FF         PUSH -1
004023A9  |.  68 38314000   PUSH 某游戏.00403138
004023AE  |.  68 2A254000   PUSH <JMP.&MSVCRT._except_handler3>      ;  SE 处理程序安装
004023B3  |.  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
004023B9  |.  50            PUSH EAX
004023BA  |.  64:8925 00000>MOV DWORD PTR FS:[0],ESP

2.直接按F9执行,游戏客户端直接运行,说明程序没有陷阱.OD中关闭平台.

3.直接打开一个客户端.(下文中用<B>代替)

4.回到OD中按Ctrl+F2(重新运行).程序停在步骤1位置.(入口处).

5.按F8单步执行.遇到向上的跳转,直接将光标下移,再按F4(直接运行到光标处).
让程序一直向下走.
当走到
004024D3  |.  E8 F5FDFFFF   CALL 某游戏.004022CD                        ; \关键CALL
时候,发现游戏经过很多运算,程序执行2-3秒,之后游戏退出.
F2下断004024D3,
关闭步骤3中直接运行的(<B>客户端),
Ctrl+F2重新加载游戏平台,在执行到004024D3的时候,按F8,在CALL内部执行的时候,平台登陆窗体就已经显示出来了.
这说明,判断判断在这个CALL里面.

6.打开直接运行的客户端(B),OD中Ctrl+F2(重新加载),直接F9运行到断点004024D3处,F7步入,到如下代码
004022CD  /$  55            PUSH EBP
004022CE  |.  8BEC          MOV EBP,ESP
004022D0  |.  83EC 18       SUB ESP,18
004022D3  |.  8D4D E8       LEA ECX,DWORD PTR SS:[EBP-18]
004022D6  |.  E8 25EDFFFF   CALL 某游戏.00401000
004022DB  |.  837D 10 00    CMP DWORD PTR SS:[EBP+10],0
004022DF  |.  FF75 14       PUSH DWORD PTR SS:[EBP+14]
004022E2  |.  74 05         JE SHORT 某游戏.004022E9
004022E4  |.  FF75 10       PUSH DWORD PTR SS:[EBP+10]
004022E7  |.  EB 02         JMP SHORT 某游戏.004022EB
004022E9  |>  6A 00         PUSH 0
004022EB  |>  FF75 08       PUSH DWORD PTR SS:[EBP+8]
004022EE  |.  8D4D E8       LEA ECX,DWORD PTR SS:[EBP-18]
004022F1  |.  E8 44EDFFFF   CALL 某游戏.0040103A                        ;  1层步入关键call

在执行到004022F1,程序同样做了很多工作,比较可疑,F2在004022F1下断.
老方法判断其中是否包含判断:关闭<B>, 在OD中Ctrl+F2,执行到004022F1时,按F8,程序同样显示出了登陆窗体.说明判断指令在这里里面.
ctrl+F2,使OD到程序入口,打开<B>,OD走到刚刚下的断点004022F1,F7进入.

7.程序如下:
0040103A  /$  B8 C2254000   MOV EAX,某游戏.004025C2
0040103F  |.  E8 FC120000   CALL 某游戏.00402340
00401044  |.  51            PUSH ECX
00401045  |.  51            PUSH ECX
00401046  |.  53            PUSH EBX
00401047  |.  56            PUSH ESI
00401048  |.  57            PUSH EDI
00401049  |.  33DB          XOR EBX,EBX
0040104B  |.  8BF9          MOV EDI,ECX
0040104D  |.  53            PUSH EBX
0040104E  |.  897D EC       MOV DWORD PTR SS:[EBP-14],EDI
00401051  |.  FF15 04314000 CALL DWORD PTR DS:[<&ole32.CoInitialize>>;  ole32.CoInitialize
00401057  |.  53            PUSH EBX
00401058  |.  E8 79010000   CALL 某游戏.004011D6
0040105D  |.  8BCF          MOV ECX,EDI
0040105F  |.  E8 89040000   CALL 某游戏.004014ED
00401064  |.  8BCF          MOV ECX,EDI
00401066  |.  E8 09050000   CALL 某游戏.00401574
0040106B  |.  8BCF          MOV ECX,EDI
0040106D  |.  E8 85030000   CALL 某游戏.004013F7
00401072  |.  8BCF          MOV ECX,EDI
00401074  |.  E8 AF030000   CALL 某游戏.00401428
00401079  |.  6A 14         PUSH 14
0040107B  |.  E8 A8120000   CALL <JMP.&MSVCRT.??2@YAPAXI@Z>
00401080  |.  59            POP ECX
00401081  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
00401084  |.  3BC3          CMP EAX,EBX
00401086  |.  895D FC       MOV DWORD PTR SS:[EBP-4],EBX
00401089  |.  74 11         JE SHORT 某游戏.0040109C
0040108B  |.  68 2C404000   PUSH 某游戏.0040402C                        ;  ASCII "factory.dll"
00401090  |.  8BC8          MOV ECX,EAX
00401092  |.  E8 B5000000   CALL 某游戏.0040114C
00401097  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
0040109A  |.  EB 03         JMP SHORT 某游戏.0040109F
0040109C  |>  895D F0       MOV DWORD PTR SS:[EBP-10],EBX
0040109F  |>  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
004010A2  |.  834D FC FF    OR DWORD PTR SS:[EBP-4],FFFFFFFF
004010A6  |.  8B40 04       MOV EAX,DWORD PTR DS:[EAX+4]
004010A9  |.  3BC3          CMP EAX,EBX
004010AB  |.  74 6A         JE SHORT 某游戏.00401117
004010AD  |.  6A 02         PUSH 2
004010AF  |.  FFD0          CALL EAX
004010B1  |.  8BF0          MOV ESI,EAX
004010B3  |.  59            POP ECX
004010B4  |.  3BF3          CMP ESI,EBX
004010B6  |.  74 5F         JE SHORT 某游戏.00401117
004010B8  |.  8B06          MOV EAX,DWORD PTR DS:[ESI]
004010BA  |.  68 01E00200   PUSH 2E001
004010BF  |.  68 20404000   PUSH 某游戏.00404020                        ;  ASCII "StartUp.dll"
004010C4  |.  53            PUSH EBX
004010C5  |.  8BCE          MOV ECX,ESI
004010C7  |.  FF50 08       CALL DWORD PTR DS:[EAX+8]
004010CA  |.  8BF8          MOV EDI,EAX
004010CC  |.  3BFB          CMP EDI,EBX
004010CE  |.  74 27         JE SHORT 某游戏.004010F7
004010D0  |.  8B07          MOV EAX,DWORD PTR DS:[EDI]
004010D2  |.  8BCF          MOV ECX,EDI
004010D4  |.  FF50 3C       CALL DWORD PTR DS:[EAX+3C]
004010D7  |.  85C0          TEST EAX,EAX
004010D9  |.  74 13         JE SHORT 某游戏.004010EE                    ;  关键跳转
004010DB  |.  8B4D EC       MOV ECX,DWORD PTR SS:[EBP-14]
004010DE  |.  53            PUSH EBX                                 ; /Arg1
004010DF  |.  E8 53020000   CALL 某游戏.00401337                        ; \某游戏.00401337
004010E4  |.  8B07          MOV EAX,DWORD PTR DS:[EDI]
004010E6  |.  FF75 0C       PUSH DWORD PTR SS:[EBP+C]
004010E9  |.  8BCF          MOV ECX,EDI
004010EB  |.  FF50 40       CALL DWORD PTR DS:[EAX+40]               ;  正常登陆函数的调用
004010EE  |>  8B06          MOV EAX,DWORD PTR DS:[ESI]

关闭<B>,再OD中一次往下走. 发现在004010EB这个CALL显示出了登陆平台.
F2这里下断点.
打开<B>,在OD中F9运行,发现004010EB这个断点没有断到. 说明接近目标了.

ps:说明,在有一处:
00401131  |.  8B4D EC       MOV ECX,DWORD PTR SS:[EBP-14]
00401134  |.  E8 E6020000   CALL 某游戏.0040141F
00401139  |.  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]
00401134这个CALL,F8是过不去的,只有在上下都下断点,F8到附近的时候,按F9过去.这个无关跳转的判断.
不知道是为什么?

在004010EB附近JE的跳转出多下几个断点.
分别比较<B>运行和没运行时候,程序走的路线.
就会发现,我们要找的跳转就在004010EB上面不远:
004010D9  |.  74 13         JE SHORT 某游戏.004010EE                    ;  关键跳转
这个跳转直接跳到了004010EB(正常登陆函数的调用)  之下.

8.确认我们找的跳转对不对呢?
在004010D9  |.  74 13         JE SHORT 下断点.
在<B>运行的情况下,Ctrl+F2,在运行到004010D9时,双击标志寄存器的0标志位,修改ZF值,如图:
将ZF由1改成0.
继续F9执行,发现程序可疑照常运行了.2个平台出来了.


9.修改程序:
在004010D9处,双击汇编语句"JE SHORT 004010EE",弹出如图窗口,改成NOP,如图:
ps:第一次改成JNZ SHORT 004010EE ,发现程序第一次有问题.


10.保存:
刚才修改后的语句,与其他语句的颜色不一样了.
拖拽鼠标选中修改的2句NOP语句.右键点击,在右键菜单中选择"复制到可执行文件-->>选择",弹出选择"复制",
弹出修改后的文件窗体,再弹出窗体中右键,选择"保存文件".

完工.
拖拉机可以1v2了 ^_^

结束语:
没有直接公布软件名称,感兴趣的朋友可以直接在下载地址里下载.
第一次写这样的文章.不足之处还请见谅!!

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
厉害。。我 要学习下。。在看看我有多少能转了。。
2010-6-4 01:17
0
雪    币: 103
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
别沉啊..........郁闷!
估计技术含量不够啊!
继续努力ing
2010-6-5 09:18
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
研究下,最近有需求,,
2010-6-23 18:17
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很有技术含量,先慢慢看看
2010-6-23 18:49
0
雪    币: 776
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好帖子 啊 顶起来啊
2010-6-23 18:53
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
技术含量一般,但思路不错,顶
2010-6-24 10:26
0
雪    币: 7
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
写的很详细,很感激的读了
2010-6-24 10:46
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
太好了我下载 去试试 看技术含量太多 现在还在学习
2010-6-24 19:07
0
雪    币: 253
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
其实作者可以进一步考察一下,具体使用什么技术防止的多开,做相应的修改!否则有些加了虚拟机的程序,你是很难通过这种方式找到关键代码段的!
2010-6-25 18:58
0
雪    币: 2477
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
每一个原创帖子都要顶一下
2010-7-23 15:41
0
雪    币: 478
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习啊。坚持啊。
2010-7-23 16:31
0
雪    币: 241
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
大有可能是窗口互斥体  OD找CreateMutexA 即可 。
2010-8-3 01:09
0
雪    币: 15
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
解释比一般的精华详细 值得学习!

   技术含量对于菜鸟我来说够  

支持   

  如果有更详细解释 思路 分析  等更好
2010-8-3 01:33
0
游客
登录 | 注册 方可回帖
返回
//