compiled version:
source:
Code:
#NoTrayIcon #include <WinAPI.au3> If Not FileExists("patcher.ini") Then ini() EndIf $time = FileGetTime(IniRead("patcher.ini", "dir", "dir", "")&"\sro_client.exe") $timeold = IniRead("patcher.ini", "time", "time", "") If $time[0]&$time[1]&$time[2]&$time[3]&$time[4]&$time[5]<>$timeold Then ini() EndIf $FRMMAIN = GUICreate("Silkroad Online Patcher", 301, 301, -1, -1) $PATCHER = GUICtrlCreateGroup("Patcher", 8, 8, 281, 281) $PLIST = GUICtrlCreateList("", 16, 24, 105, 227) $REFRESH = GUICtrlCreateButton("Refresh", 16, 256, 49, 25, 0) $INFO = GUICtrlCreateButton("Info", 224, 264, 57, 17, 0) $NODC = GUICtrlCreateCheckbox("No DC", 128, 48, 97, 17) GUICtrlSetState(-1, 1) $DISABLESWEARFILTER = GUICtrlCreateCheckbox("Disable Swear Filter", 128, 72, 113, 17) GUICtrlSetState(-1, 1) $ZOOMHACK = GUICtrlCreateCheckbox("Zoomhack", 128, 96, 97, 17) GUICtrlSetState(-1, 1) $SERVERSTATUS = GUICtrlCreateCheckbox("Serverstatus", 128, 120, 97, 17) GUICtrlSetState(-1, 1) $NUDEPATCH = GUICtrlCreateCheckbox("Nude Patch", 128, 144, 97, 17) GUICtrlSetState(-1, 1) $SROVERSION = GUICtrlCreateLabel("Silkroad Online Patcher", 128, 24, 143, 17) $PATCH = GUICtrlCreateButton("Patch", 72, 256, 49, 25, 0) GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState(@SW_SHOW) While 1 $NMSG = GUIGetMsg() Switch $NMSG Case - 3 Exit Case $REFRESH If ProcessExists("sro_client.exe") Then $SETPROCESS = ProcessList("sro_client.exe") For $I = 1 To $SETPROCESS[0][0] GUICtrlSetData($PLIST, $SETPROCESS[$I][1]) Next Else MsgBox(48, "Silkroad Online Patcher", "No Silkroad Online Process has been found") GUICtrlSetData($PLIST, "") EndIf Case $PATCH If GUICtrlRead($PLIST) Then $pid = GUICtrlRead($PLIST) $mid = _WinAPI_OpenProcess(0x001F0FFF, False, $pid) If GUICtrlRead($NODC) = 1 Then NODC() If GUICtrlRead($DISABLESWEARFILTER) = 1 Then SWEARFILTER() If GUICtrlRead($ZOOMHACK) = 1 Then ZOOMHACK() If GUICtrlRead($SERVERSTATUS) = 1 Then SERVERSTATUS() If GUICtrlRead($NUDEPATCH) = 1 Then NUDEPATCH() MsgBox(0, "Silkroad Online Patcher", "The Silkroad Online Process " & $pid & " has been successfully Patched") Else MsgBox(48, "Silkroad Online Patcher", "No Silkroad Online Process has been found") EndIf Case $INFO MsgBox(0, "Silkroad Online Patcher", "Copyright © 2008 lolkop" & @CRLF & "Design © 2008 Vitalka") EndSwitch Sleep(1) WEnd Func NODC() memwrite(IniRead("patcher.ini", "nodc", "adress", ""), "8B0D"&IniRead("patcher.ini", "nodc", "replace", "")&"8B118B4214FFD05F83C410C3FFFF84C074") EndFunc Func SWEARFILTER() memwrite(IniRead("patcher.ini", "swear", "1", ""), "EB") memwrite(IniRead("patcher.ini", "swear", "2", ""), "EB") memwrite(IniRead("patcher.ini", "swear", "3", ""), "EB") EndFunc Func ZOOMHACK() memwrite(IniRead("patcher.ini", "zoom", "out1", ""), "EB") memwrite(IniRead("patcher.ini", "zoom", "out2", ""), "EB") memwrite(IniRead("patcher.ini", "zoom", "in1", ""), "EB") memwrite(IniRead("patcher.ini", "zoom", "in2", ""), "EB") EndFunc Func SERVERSTATUS() memwrite(IniRead("patcher.ini", "stats", "adress", ""), "9090") memwrite(IniRead("patcher.ini", "stats", "colour", ""), "6841B5FFFF") EndFunc Func NUDEPATCH() memwrite(IniRead("patcher.ini", "nude", "1", ""), "9090") memwrite(IniRead("patcher.ini", "nude", "2", ""), "E9"&IniRead("patcher.ini", "nude", "3", "")&"90") EndFunc Func memwrite($adress, $hex) If $adress <> "" Then $buffer = 0 $struct = DllStructCreate("byte["&StringLen($hex)/2&"]") For $i=StringLen($hex)/2 To 1 Step -1 DllStructSetData($struct, 1, BinaryMid("0x"&$hex, $i, 1), $i) Next _WinAPI_WriteProcessMemory($mid, $adress, DllStructGetPtr($struct), StringLen($hex)/2, $buffer) EndIf EndFunc Func ini() $dir = IniReadSection("patcher.ini", "dir") If Not @error Then $dir = $dir[1][1] Else Do $dir = FileSelectFolder("Select your Silkroad Dir", "") If $dir = "" Then Exit ElseIf Not FileExists($dir&"\sro_client.exe") Then MsgBox(16, "Not Found", "sro_client.exe could not be found in that dir") EndIf Until FileExists($dir&"\sro_client.exe") IniWrite("patcher.ini", "dir", "dir", $dir) EndIf $time = FileGetTime($dir&"\sro_client.exe") $size = FileGetSize($dir&"\sro_client.exe") $file = FileOpen($dir&"\sro_client.exe", 4) $content = FileRead($file, $size) $pos = StringInStr($content, "68010500006812050000", 2) $module1 = rev(StringMid($content, $pos+0x26, 8)) $module2 = Hex($pos/2-0x137) $module = Hex(String("0x"&$module1)-String("0x"&$module2)) $zoomout1 = Hex(StringInStr($content, "DFE0F6C4417A08D99EEC030000", 2, 1)/2+String("0x"&$module)+4) IniWrite("patcher.ini", "zoom", "out1", "0x"&$zoomout1) TrayTip("Adress Found", "Found Zoomout adress 1", 2) $zoomin1 = Hex(("0x"&$zoomout1)-0x26) IniWrite("patcher.ini", "zoom", "in1", "0x"&$zoomin1) TrayTip("Adress Found", "Found Zoomout adress 2", 2) $zoomout2 = Hex(StringInStr($content, "DFE0F6C4417A08D99EEC030000", 2, 2)/2+String("0x"&$module)+4) IniWrite("patcher.ini", "zoom", "out2", "0x"&$zoomout2) TrayTip("Adress Found", "Found Zoomin adress 1", 2) $zoomin2 = Hex(("0x"&$zoomout2)-0x26) IniWrite("patcher.ini", "zoom", "in2", "0x"&$zoomin2) TrayTip("Adress Found", "Found Zoomin adress 2", 2) $nodc = rev(Hex(StringInStr($content, _hex("UIIT_MSG_MSGBOX_NETOFF"), 2, 1)/2+String("0x"&$module)-1)) $nodc_adress = Hex(StringInStr($content, "68"&$nodc, 2, 2)/2+String("0x"&$module)-0x19) IniWrite("patcher.ini", "nodc", "adress", "0x"&$nodc_adress) TrayTip("Adress Found", "Found NoDC adress", 2) $replace = StringRegExp($content, "8B0D(.{8}?)8B118B4214FFD084C00F85", 3) IniWrite("patcher.ini", "nodc", "replace", $replace[0]) $max_full = rev(Hex(StringInStr($content, _hex("UIO_STT_SERVER_MAX_FULL"), 2, 1)/2+String("0x"&$module)-1)) $max_full_adress = Hex(StringInStr($content, "68"&$max_full, 2, 1)/2+String("0x"&$module)-3) IniWrite("patcher.ini", "stats", "adress", "0x"&$max_full_adress) TrayTip("Adress Found", "Found Serverstat adress", 2) $max_full_colour = Hex(("0x"&$max_full_adress)+0xE9) IniWrite("patcher.ini", "stats", "colour", "0x"&$max_full_colour) $swear = rev(Hex(StringInStr($content, _hex("UIIT_MSG_CHATWND_MESSAGE_FILTER"), 2, 1)/2+String("0x"&$module)-1)) $swear_adress1 = Hex(StringInStr($content, "68"&$swear, 2, 1)/2+String("0x"&$module)-3) IniWrite("patcher.ini", "swear", "1", "0x"&$swear_adress1) $swear_adress2 = Hex(StringInStr($content, "68"&$swear, 2, 2)/2+String("0x"&$module)-3) IniWrite("patcher.ini", "swear", "2", "0x"&$swear_adress2) $swear_adress3 = Hex(StringInStr($content, "68"&$swear, 2, 3)/2+String("0x"&$module)-3) IniWrite("patcher.ini", "swear", "3", "0x"&$swear_adress3) TrayTip("Adress Found", "Found SwearFilter adresses", 2) $nude = rev(Hex(StringInStr($content, _hex("(nEquipSlot >=0 ) && ( nEquipSlot < EQUIP_VISUAL_COUNT)", 1), 2, 1)/2+String("0x"&$module)-1)) $nude1 = Hex(StringInStr($content, "68"&$nude, 2, 1)/2+String("0x"&$module)-0x1F) IniWrite("patcher.ini", "nude", "1", "0x"&$nude1) TrayTip("Adress Found", "Found Nude adress", 2) $nude2 = Hex(("0x"&$nude1)+0xB) IniWrite("patcher.ini", "nude", "2", "0x"&$nude2) TrayTip("Adress Found", "Found Nude adress", 2) $nude_replace = rev(Hex(rev(StringMid($content, StringInStr($content, "68"&$nude, 2)-0x22, 8)&"0x")+1)) IniWrite("patcher.ini", "nude", "3", $nude_replace) FileClose($file) IniWrite("patcher.ini", "time", "time", $time[0]&$time[1]&$time[2]&$time[3]&$time[4]&$time[5]) EndFunc Func rev($string) Local $all For $i=StringLen($string)+1 To 1 Step -2 $all=$all&StringMid($string, $i, 2) Next Return $all EndFunc Func _hex($string, $type = 2) ;type 1 = ascii | type 2 = unicode Local $all $split = StringSplit($string, "") For $i=1 To UBound($split)-1 If $type = 1 Then $all = $all & StringMid(Hex(Asc($split[$i])), 7) ElseIf $type = 2 Then $all = $all & StringMid(Hex(Asc($split[$i])), 7) & "00" EndIf Next If $type = 1 Then Return $all ElseIf $type = 2 Then Return StringTrimRight($all, 2) EndIf EndFunc
Confirmed by Invincible.