找到一个没加壳的半免费网游(网游的名字就不说了),分析其双开方式,
大型网游多开实例
。大概“某人们”早就对它动过手脚了,只是没看到有人公布。
经过几天的试用,至今没有发现这种破法有问题。(由于是几天以前破的,现在回忆起来可能会有点出入,还是希望读者以实际为准,灵活应变^_^)
本文仅仅作为研究用,不可作其他用途……
///////////////////////////////////
经过简单的观察,猜测执行桌面快捷方式后打开的是一个自动Update的程序,该程序每天更新其核心。
继续观察,发现Update程序完成后直接用CreateProcess之类的方法运行那个核心文件。核心文件通过分析命令行参数来指定登陆服务器(官服,不是私的)。
于是开始下手:
首先自己写一个程序 ShowCmdLine.asm :
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm
.data
mytitleA db 'GetCmdLine()',0
.data?
buffer db 100 dup(?)
.CODE
START:
invoke GetCommandLine
invoke MessageBox,NULL,eax,offset mytitleA,MB_OK
invoke ExitProcess,0
end START
编译它,重命名成网游的核心文件名,放到网游目录下,
电脑资料
《大型网游多开实例》(https://www.unjs.com)。正常步骤运行之…………Oh,Ja!事实证明了猜想。选择任意一个服务器测试,记下那个服务器所对应的参数(我玩的服务器参数是1rag21,这个字眼熟悉吧~应该有许多人知道这是什么网游了,我也不能多说,不知道的自己google一下吧)。
打开IDA,分析原来的核心(文件满大的~要有耐心)。在等待IDA分析的时候多看看import table,找找看有什么可疑的函数……
大多人首先会找FindWindow之类的……没错!
从IDA的Imports中看到
CreateMutexA 和 FindWindowA
不管怎样,这两个不可不防。
改之!
在FindWindowA上按下'X',得到FindWindowA函数的xrefs(嘻嘻,只有一处):
..........
..... call FindWindowA
.text:0064CFCF test eax, eax
.text:0064CFD1 jz short loc_64CFDC
.......
[1] [2] 下一页