返回列表 发帖

VB搞定完美世界国际版双开

有个朋友在玩这游戏。说刚出的没双开外挂。。。
其实双开原理也不复杂。就看它用的是哪种。。
1:最简单的限制,窗口查找,如果找到自己窗口一致的(通过类名,或者窗口标题),就提示重复打开。
解决方法:通过窗口标题的,可以用SetWindowText修改掉窗口标题。听过类名的,简单的把FindWindow(Ex)后面的判断跳转修改下就ok了。
2:通过命名的内核对象来防止重复打开。
解决方法:把查找内核对象后面的非零判断跳转修改下就ok了。
3:通过独占文件访问来防止重复打开。
解决方法:1-修改程序,阻止独占访问
2-复制客户端到另外的文件夹,在另外的文件夹打开~
4:通过绑定特定的通讯端口,阻止重复启动客户端
解决方法:把绑定端口的那部分去掉


经查,这里的完美国际是用的第一种 :16:  :16: 他们的程序员偷懒噢。。。

Form1(主窗体,上面有一个TIMER控件,间隔为1000ms,并把Enabled设为true)
Private Sub Timer1_Timer()
    Dim lHwnd As Long
    Dim TitleModify As String * 256
    TimesNow = Now()
    TitleModify = "CodeWorld" & TimesNow
    lHwnd = FindWindow(vbNullString, "Element Client")
    SetWindowText lHwnd, TitleModify
End Sub
类模块
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

VB搞定完美世界国际版双开

第一种方法最没有技术含量。
另外,可以用添加“互斥量”的方法防止程序重复执行。而且我还没有发现破解它的方法。

TOP

VB搞定完美世界国际版双开

楼上,望见详解。。不是很理解 互斥量 的概念。

TOP

VB搞定完美世界国际版双开

下面引用由无条件为你2006/12/16 10:32pm 发表的内容:
第一种方法最没有技术含量。
另外,可以用添加“互斥量”的方法防止程序重复执行。而且我还没有发现破解它的方法。
老大,一楼已经说得很清楚了。
2:通过命名的内核对象来防止重复打开。
解决方法:把查找内核对象后面的非零判断跳转修改下就ok了。
[br][br]-=-=-=- 以下内容由 默数悲伤2006年12月17日 02:27pm 时添加 -=-=-=-
TO: CHINAIC
互斥体也就是你所说的内核对象的一种,一般用于线程间的同步。
如果在创建互斥体的时候,给其指定一个名字,则其他的程序想要再创建这个相同名字的互斥体就会返回失败,这也就是2楼说的方法,创建一个带名字的互斥体,在进程第二次运行的时候就会创建失败,或者直接通过名字来OpenMutex 如果能够打开则证明该进程已经有一个实例在运行了。可以在进程中加一个判断值,来决定是否继续运行。
其实,这个也很简单:)

TOP

VB搞定完美世界国际版双开

:17:  :12: 谢谢小默。

TOP

VB搞定完美世界国际版双开

今天才注意到这个贴子有了新回复。
把查找内核对象后面的非零判断跳转修改下就ok了,如何修改?
好像要用汇编修改EXE文件本身,我想至少要比SetWindowText修改掉窗口标题复杂点。

TOP

VB搞定完美世界国际版双开

不知道老大做过CrackMe没有,这应该可以算是最简单的CrackMe的内容了。

TOP

VB搞定完美世界国际版双开

下面引用由默数悲伤2006/12/24 04:17pm 发表的内容:
不知道老大做过CrackMe没有,这应该可以算是最简单的CrackMe的内容了。
是问我的吗?我不是老大。
我不会,没做过。不懂,请赐教!

TOP

VB搞定完美世界国际版双开

在网上看有人说要用OD修改跳转。。我汗。。用得着那么复杂么。。

TOP

返回列表 回复 发帖