-
-
[旧帖] [分享]千年 云鹤快手 逆向分析 0.00雪花
-
发表于: 2008-4-16 01:22 8043
-
我是很喜欢千年这个游戏的,官方6月要开门,前几天闲的无聊找了个SF玩,现把云鹤快手逆向部分代码贴出。
程序加了2层壳第一层是upx,第二层PEiD分析不出来,直接手脱的。
云鹤快手.exe 这个程序启动以后主要是更新的,更新文件为3个ks.exe、sfconfig.dll、程序自身。
然后启动ks程序,ks程序受到服务器列表之后有一个自检的call是自我检测的,如果发现程序被修改过则退出,直接nop掉00A3F03C处的代码就可以过。
00A3F037 E8 2A4A0000 call 00A43A66
00A3F03C E8 7A6E0000 call 00A45EBB ; 收到数据以后的处理
00A3F041 E8 948E0000 call 00A47EDA
点击ks里启动游戏以后下面几个函数比较重要,ks会把随机生成的名称记录在sfclient.mc文件里,ks关闭的时候会清理这些文件。
00A34541 E8 EE070000 call 00A34D34 ; 产生随机名称-eax
00A34606 E8 29070000 call 00A34D34 ; 生产文件名2
00A346CD E8 406A0100 call 00A4B112 ; 释放出客户端
00A346FF E8 0E6A0100 call 00A4B112 ; 释放出快手
ks使用是CreateProcess启动快手程序,堆栈情况如下:
0012F800 00000000 |ModuleFileName = NULL
0012F804 0020ADE0 |CommandLine = """F:\Game\yh1000y\6ztdffd.cl"" 58.221.254.36 20155 11001 12001 {126,63,126,98,50,102,73,63} fwoyh6b.cl 591438"
0012F808 00000000 |pProcessSecurity = NULL
0012F80C 00000000 |pThreadSecurity = NULL
0012F810 00000000 |InheritHandles = FALSE
0012F814 00000000 |CreationFlags = 0
0012F818 00000000 |pEnvironment = NULL
0012F81C 00000000 |CurrentDir = NULL
0012F820 0012F840 |pStartupInfo = 0012F840
0012F824 0012F830 \pProcessInfo = 0012F830
快手启动以后和ks联系取得许可证(这里有连接的时间限制),然后把它监听的端口写入sfks3.mc,监听端口从11001开始往后顺延。然后启动客户端,并把客户端启动以后快手要检测客户端的程序名称,如果名称不对则快手自动关闭。注意客户端只有第一次连接快手才能够被允许。
破解思路如下:
A.手动汇编改掉随机产生的两个文件名称的代码,改为两个固定的名称。nop掉往两个名称文件里写数据的部分,jump到启动程序部分。这种办法操作起来简单。
B.有效的办法就是先把快手里面第一次连接的标志固定为从未连接,然后把这个快手加载到ks.exe里覆盖掉ks里原来的快手部分数据。然后把游戏的外挂加载到ks里原来客户段部分的数据。如此ok。
程序加了2层壳第一层是upx,第二层PEiD分析不出来,直接手脱的。
云鹤快手.exe 这个程序启动以后主要是更新的,更新文件为3个ks.exe、sfconfig.dll、程序自身。
然后启动ks程序,ks程序受到服务器列表之后有一个自检的call是自我检测的,如果发现程序被修改过则退出,直接nop掉00A3F03C处的代码就可以过。
00A3F037 E8 2A4A0000 call 00A43A66
00A3F03C E8 7A6E0000 call 00A45EBB ; 收到数据以后的处理
00A3F041 E8 948E0000 call 00A47EDA
点击ks里启动游戏以后下面几个函数比较重要,ks会把随机生成的名称记录在sfclient.mc文件里,ks关闭的时候会清理这些文件。
00A34541 E8 EE070000 call 00A34D34 ; 产生随机名称-eax
00A34606 E8 29070000 call 00A34D34 ; 生产文件名2
00A346CD E8 406A0100 call 00A4B112 ; 释放出客户端
00A346FF E8 0E6A0100 call 00A4B112 ; 释放出快手
ks使用是CreateProcess启动快手程序,堆栈情况如下:
0012F800 00000000 |ModuleFileName = NULL
0012F804 0020ADE0 |CommandLine = """F:\Game\yh1000y\6ztdffd.cl"" 58.221.254.36 20155 11001 12001 {126,63,126,98,50,102,73,63} fwoyh6b.cl 591438"
0012F808 00000000 |pProcessSecurity = NULL
0012F80C 00000000 |pThreadSecurity = NULL
0012F810 00000000 |InheritHandles = FALSE
0012F814 00000000 |CreationFlags = 0
0012F818 00000000 |pEnvironment = NULL
0012F81C 00000000 |CurrentDir = NULL
0012F820 0012F840 |pStartupInfo = 0012F840
0012F824 0012F830 \pProcessInfo = 0012F830
快手启动以后和ks联系取得许可证(这里有连接的时间限制),然后把它监听的端口写入sfks3.mc,监听端口从11001开始往后顺延。然后启动客户端,并把客户端启动以后快手要检测客户端的程序名称,如果名称不对则快手自动关闭。注意客户端只有第一次连接快手才能够被允许。
破解思路如下:
A.手动汇编改掉随机产生的两个文件名称的代码,改为两个固定的名称。nop掉往两个名称文件里写数据的部分,jump到启动程序部分。这种办法操作起来简单。
B.有效的办法就是先把快手里面第一次连接的标志固定为从未连接,然后把这个快手加载到ks.exe里覆盖掉ks里原来的快手部分数据。然后把游戏的外挂加载到ks里原来客户段部分的数据。如此ok。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [求助]请教 ZwWriteVirtualMemory 等API哪里有介绍 12940
- [分享]千年 云鹤快手 逆向分析 8044
- [求助]A程序里启动B程序,如何跟踪B程序? 5819
- [求助]E language * 如何逆向分析 12731
- 请教在OD中内存访问断点和硬件访问断点区别 7433
赞赏
雪币:
留言: