找回密码
 加入
搜索
查看: 17769|回复: 34

[原创] 奇迹外挂预览(无源码,无程序)

[复制链接]
发表于 2010-7-5 11:08:06 | 显示全部楼层 |阅读模式
本帖最后由 lanfengc 于 2010-7-6 10:26 编辑

呵呵。研究了2天。总算有点眉目了。 打怪的功能还没完善好。。
目前完成的功能:
1.自动加血加蓝
2.实时刷新人物信息并显示到外挂
3.当前地图缩略图显示及人物在缩略图上的标注(图中的小红点)
4.游戏服务器读取及用挂启动相应的服务器客户端


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-7-5 11:46:37 | 显示全部楼层
MU..很久没玩了 ..怎么楼主会做个外挂 呢?
 楼主| 发表于 2010-7-5 12:15:41 | 显示全部楼层
回复 2# ixxxxyou


    这个游戏的选怪模式跟大部分网游不同。 想挑战下自己。
发表于 2010-7-5 13:04:22 | 显示全部楼层
楼主很厉害哦!一直以来对内存基址的获取和操作都很陌生,向楼主学习!
 楼主| 发表于 2010-7-5 23:21:25 | 显示全部楼层
回复 4# 水木子


学会使用CE 和OD  做平常的游戏外挂就没那么难。
有些游戏有驱动保护,比较难。
发表于 2010-7-6 00:05:12 | 显示全部楼层
哈哈,我之前也有研究过。送你一段代码。引怪的,不过只能引一只。
版本应该是1.07的。期待你的大作。
ProcessSetPriority(@AutoItPID, 4)
_GetPrivilege_SEDEBUG()

Dim $CurProcID = ""
$Mu = ProcessList()
For $i = 1 To $Mu[0][0]
        If StringLeft($Mu[$i][0], 2) = "mu" And StringRight($Mu[$i][0], 4) = ".tmp" Then
                $CurProcID = $Mu[$i][1]
                ExitLoop
        EndIf
Next
If $CurProcID = "" Then
        MsgBox(0, "", "获取进程失败,程序将退出")
        Exit
EndIf


$Handle = _MemoryOpen($CurProcID) 

$guaiMem = 0x07b379b8                         ;怪物的基址
$guaiMem = _MemoryRead("0x" & Hex($guaiMem), $Handle)
$guaiNameMem = "0x" & Hex($guaiMem + 0x38)
$guaiName = _MemoryRead($guaiNameMem, $Handle, "char[20]") ;怪物的名字

$guaiXMem = "0x" & Hex($guaiMem + 0x38 - 0xB)
$guaiX = _MemoryRead($guaiXMem, $Handle, "BYTE")         ;怪物坐标X

$guaiYMem = "0x" & Hex($guaiMem + 0x38 - 0xA)
$guaiY = _MemoryRead($guaiYMem, $Handle, "BYTE")         ;怪物坐标Y

$guaiSD = "0x" & Hex($guaiMem + 0x38 - 0xC)         ;怪的移动速度?其实不是的。

$MeMem = 0x07B379C0                                                 ;自己的坐标基址
$MeMem = _MemoryRead("0x" & Hex($MeMem), $Handle)

$MeXMem = "0x" & Hex($MeMem + 0x84)                ;自己的坐标X

$MeYMem = "0x" & Hex($MeMem + 0x88)                ;自己的坐标Y

While 1
        Sleep(10)
        $MeX = _MemoryRead($MeXMem, $Handle)
        $MeY = _MemoryRead($MeYMem, $Handle)
        $guaiX = _MemoryRead($guaiXMem, $Handle, "BYTE")
        $guaiY = _MemoryRead($guaiYMem, $Handle, "BYTE")
        _MemoryWrite($guaiSD, $Handle, "10", "BYTE")
        _MemoryWrite($guaiXMem, $Handle, $MeX, "BYTE")
        _MemoryWrite($guaiYMem, $Handle, $MeY, "BYTE")
WEnd

Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)
        If Not ProcessExists($iv_Pid) Then
                SetError(1)
                Return 0
        EndIf
        Local $ah_Handle[2] = [DllOpen('kernel32.dll')]
        If @error Then
                SetError(2)
                Return 0
        EndIf
        Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
        If @error Then
                DllClose($ah_Handle[0])
                SetError(3)
                Return 0
        EndIf
        $ah_Handle[1] = $av_OpenProcess[0]
        Return $ah_Handle
EndFunc   ;==>_MemoryOpen

;=================================================================================================
Func _MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword')
        If Not IsArray($ah_Handle) Then
                SetError(1)
                Return 0
        EndIf
        Local $v_Buffer = DllStructCreate($sv_Type)
        If @error Then
                SetError(@error + 1)
                Return 0
        EndIf
        DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
        If Not @error Then
                Local $v_Value = DllStructGetData($v_Buffer, 1)
                Return $v_Value
        Else
                SetError(6)
                Return 0
        EndIf
EndFunc   ;==>_MemoryRead
;=================================================================================================
Func _MemoryClose($ah_Handle)
        If Not IsArray($ah_Handle) Then
                SetError(1)
                Return 0
        EndIf
        DllCall($ah_Handle[0], 'int', 'CloseHandle', 'int', $ah_Handle[1])
        If Not @error Then
                DllClose($ah_Handle[0])
                Return 1
        Else
                DllClose($ah_Handle[0])
                SetError(2)
                Return 0
        EndIf
EndFunc   ;==>_MemoryClose
;=================================================================================================
Func _MemoryWrite($iv_Address, $ah_Handle, $v_Data, $sv_Type = 'dword')
        If Not IsArray($ah_Handle) Then
                SetError(1)
                Return 0
        EndIf
        Local $v_Buffer = DllStructCreate($sv_Type)
        If @error Then
                SetError(@error + 1)
                Return 0
        Else
                DllStructSetData($v_Buffer, 1, $v_Data)
                If @error Then
                        SetError(6)
                        Return 0
                EndIf
        EndIf
        DllCall($ah_Handle[0], 'int', 'WriteProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
        If Not @error Then
                Return 1
        Else
                SetError(7)
                Return 0
        EndIf
EndFunc   ;==>_MemoryWrite


; #FUNCTION# ;===============================================================================
;
; Name...........: _GetPrivilege_SEDEBUG
; Description ...: Obtains the SE_DEBUG privilege for the running process
; Syntax.........: _GetPrivilege_SEDEBUG()
; Parameters ....:
; Return values .: Success - Returns True
;                  Failure - Returns False and Sets @Error to 1
; Author ........: Erik Pilsits
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
;
; ;==========================================================================================
Func _GetPrivilege_SEDEBUG()
        Local $return = False
        Local $tagLUIDANDATTRIB = "int64 Luid;dword Attributes"
        Local $count = 1
        Local $tagTOKENPRIVILEGES = "dword PrivilegeCount;byte LUIDandATTRIB[" & $count * 12 & "]" ; count of LUID structs * sizeof LUID struct
        Local $TOKEN_ADJUST_PRIVILEGES = 0x20
        Local $SE_PRIVILEGE_ENABLED = 0x2
        Local $curProc = DllCall("kernel32.dll", "ptr", "GetCurrentProcess")
        If @error Then Return False
        Local $call = DllCall("advapi32.dll", "int", "OpenProcessToken", "ptr", $curProc[0], "dword", $TOKEN_ADJUST_PRIVILEGES, "ptr*", 0)
        If (@error Or (Not $call[0])) Then Return False
        Local $hToken = $call[3]
        $call = DllCall("advapi32.dll", "int", "LookupPrivilegeValue", "ptr", 0, "str", "SeDebugPrivilege", "int64*", 0)
        If ((Not @error) And $call[0]) Then
                Local $iLuid = $call[3]
                Local $TP = DllStructCreate($tagTOKENPRIVILEGES)
                Local $LUID = DllStructCreate($tagLUIDANDATTRIB, DllStructGetPtr($TP, "LUIDandATTRIB"))
                DllStructSetData($TP, "PrivilegeCount", $count)
                DllStructSetData($LUID, "Luid", $iLuid)
                DllStructSetData($LUID, "Attributes", $SE_PRIVILEGE_ENABLED)
                $call = DllCall("advapi32.dll", "int", "AdjustTokenPrivileges", "ptr", $hToken, "int", 0, "ptr", DllStructGetPtr($TP), "dword", 0, "ptr", 0, "ptr", 0)
                If Not @error Then $return = ($call[0] <> 0) ; $call[0] <> 0 is success
        EndIf
        DllCall("kernel32.dll", "int", "CloseHandle", "ptr", $hToken)
        Return SetError(Number(Not $return), 0, $return)
EndFunc   ;==>_GetPrivilege_SEDEBUG
发表于 2010-7-6 02:10:34 | 显示全部楼层
地图文件都让你破解了?
发表于 2010-7-6 02:21:43 | 显示全部楼层
作品展览区必须上传exe,暂时锁定,上传后联系管理人员解封。
发表于 2010-7-30 23:22:42 | 显示全部楼层
再加个自捡金钱的!!就很不错了!!
发表于 2010-12-22 21:30:28 | 显示全部楼层
看来得向楼主学习经验。向难度挑战
发表于 2010-12-23 09:06:45 | 显示全部楼层
这也太强大了吧,支持一下。
发表于 2010-12-23 16:20:41 | 显示全部楼层
非让P版教训教训你才行!
发表于 2010-12-30 10:23:11 | 显示全部楼层
不错啊,期待功能的完善!

能否点击缩略地图移动呢?
发表于 2010-12-30 10:53:31 | 显示全部楼层
初中时候的MU,现在都快忘记了,呵呵
发表于 2011-5-22 00:55:36 | 显示全部楼层
学习下看看能用不有代码没
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-28 19:55 , Processed in 0.083583 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表