Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Как изменился sendPacket?

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 01.07.2015, 14:37   #1
 Разведчик
Аватар для xoraxax
 
xoraxax никому не известный тип
Регистрация: 07.04.2010
Сообщений: 9
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Как изменился sendPacket?

Когда-то давно работал такой вот код.

Код:
Global $kernel32 = DllOpen('kernel32.dll')
Global $pid = ProcessExists('elementclient.exe')
global $realBaseAddress = 0x00D2E444
global $sendPacketFunction = 0x00789820

;//Deselect target (example usage of sendPacket)
deselectTarget($pid)

DllClose($kernel32)

Func deselectTarget($pid)
    ;//Deselects the currently selected target
    local $packet, $packetSize

    $packet = '0800'
    $packetSize = 2

    sendPacket($packet, $packetSize, $pid)
EndFunc

Func sendPacket($packet, $packetSize, $pid)
    ;//Declare local variables
    Local $pRemoteThread, $vBuffer, $loop, $result, $OPcode, $processHandle, $packetAddress

    ;//Open process for given processId
    $processHandle = memopen($pid)

    ;//Allocate memory for the OpCode and retrieve address for this
    $functionAddress = DllCall($kernel32, 'int', 'VirtualAllocEx', 'int', $processHandle, 'ptr', 0, 'int', 0x46, 'int', 0x1000, 'int', 0x40)

    ;//Allocate memory for the packet to be sent and retrieve the address for this
    $packetAddress = DllCall($kernel32, 'int', 'VirtualAllocEx', 'int', $processHandle, 'ptr', 0, 'int', $packetSize, 'int', 0x1000, 'int', 0x40)

    ;//Construct the OpCode for calling the 'SendPacket' function
    $OPcode &= '60'                                ;//PUSHAD
    $OPcode &= 'B8'&_hex($sendPacketFunction)    ;//MOV     EAX, sendPacketAddress
    $OPcode &= '8B0D'&_hex($realBaseAddress)    ;//MOV     ECX, DWORD PTR [revBaseAddress]
    $OPcode &= '8B4920'                            ;//MOV     ECX, DWORD PTR [ECX+20]
    $OPcode &= 'BF'&_hex($packetAddress[0])        ;//MOV     EDI, packetAddress    //src pointer
    $OPcode &= '6A'&_hex($packetSize,2)            ;//PUSH    packetSize        //size
    $OPcode &= '57'                                ;//PUSH    EDI
    $OPcode &= 'FFD0'                            ;//CALL    EAX
    $OPcode &= '61'                                ;//POPAD
    $OPcode &= 'C3'                                ;//RET

    ;//Put the OpCode into a struct for later memory writing
    $vBuffer = DllStructCreate('byte[' & StringLen($OPcode) / 2 & ']')
    For $loop = 1 To DllStructGetSize($vBuffer)
        DllStructSetData($vBuffer, 1, Dec(StringMid($OPcode, ($loop - 1) * 2 + 1, 2)), $loop)
    Next

    ;//Write the OpCode to previously allocated memory
    DllCall($kernel32, 'int', 'WriteProcessMemory', 'int', $processHandle, 'int', $functionAddress[0], 'int', DllStructGetPtr($vBuffer), 'int', DllStructGetSize($vBuffer), 'int', 0)

    ;//Put the packet into a struct for later memory writing
    $vBuffer = DllStructCreate('byte[' & StringLen($packet) / 2 & ']')
    For $loop = 1 To DllStructGetSize($vBuffer)
        DllStructSetData($vBuffer, 1, Dec(StringMid($packet, ($loop - 1) * 2 + 1, 2)), $loop)
    Next

    ;//Write the packet to previously allocated memory
    DllCall($kernel32, 'int', 'WriteProcessMemory', 'int', $processHandle, 'int', $packetAddress[0], 'int', DllStructGetPtr($vBuffer), 'int', DllStructGetSize($vBuffer), 'int', 0)

    ;//Create a remote thread in order to run the OpCode
    $hRemoteThread = DllCall($kernel32, 'int', 'CreateRemoteThread', 'int', $processHandle, 'int', 0, 'int', 0, 'int', $functionAddress[0], 'ptr', 0, 'int', 0, 'int', 0)

    ;//Wait for the remote thread to finish
    Do
        $result = DllCall('kernel32.dll', 'int', 'WaitForSingleObject', 'int', $hRemoteThread[0], 'int', 50)
    Until $result[0] <> 258

    ;//Close the handle to the previously created remote thread
    DllCall($kernel32, 'int', 'CloseHandle', 'int', $hRemoteThread[0])

    ;//Free the previously allocated memory
    DllCall($kernel32, 'ptr', 'VirtualFreeEx', 'hwnd', $processHandle, 'int', $functionAddress[0], 'int', 0, 'int', 0x8000)
    DllCall($kernel32, 'ptr', 'VirtualFreeEx', 'hwnd', $processHandle, 'int', $packetAddress[0], 'int', 0, 'int', 0x8000)

    ;//Close the Process
    memclose($processHandle)

    Return True
EndFunc

Func memopen($pid)
    Local $mid = DllCall($kernel32, 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 1, 'int', $pid)
    Return $mid[0]
EndFunc

Func memclose($mid)
    DllCall($kernel32, 'int', 'CloseHandle', 'int', $mid)
EndFunc

Func _hex($Value, $size=8)
    Local $tmp1, $tmp2, $i
    $tmp1 = StringRight("000000000" & Hex($Value),$size)
    For $i = 0 To StringLen($tmp1) / 2 - 1
        $tmp2 = $tmp2 & StringMid($tmp1, StringLen($tmp1) - 1 - 2 * $i, 2)
    Next
    Return $tmp2
EndFunc
Сейчас он крашит клиент. Подскажите, что не так?
  Ответить с цитированием
Старый 01.07.2015, 19:37   #2
 Разведчик
Аватар для sasm
 
sasm неизвестен в этих краях
Регистрация: 08.10.2010
Сообщений: 9
Популярность: -69
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как изменился sendPacket?

Топому, что когда-то SendPacket начинался так:

Код:
PUSH -1
PUSH 008449C8
.........
А сейчас почти везде вот так:

Код:
MOV EAX,85C478
JMP EAX
........
Поправь эти 2 строки и твой код сработает.

PS. Примеры с сервера 1.3.9
  Ответить с цитированием
Старый 01.07.2015, 21:57   #3
 Разведчик
Аватар для xoraxax
 
xoraxax никому не известный тип
Регистрация: 07.04.2010
Сообщений: 9
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как изменился sendPacket?

Не понимаю вас.

Функция начинается так (руоф).

elementclient.exe+389820 - 6A FF - push -01
elementclient.exe+389822 - 68 68A9B900 - push elementclient.exe+79A968



Передается в функцию, как мне кажется, то же самое, что и раньше. Тем не менее, если код запустить без админских прав, то ничего не происходит. Если запустить от имени админа, клиент вываливается с ошибкой.

Где косяк, понять не могу.
  Ответить с цитированием
Старый 01.07.2015, 22:49   #4
 Разведчик
Аватар для bestbeer
 
bestbeer никому не известный тип
Регистрация: 06.10.2013
Сообщений: 27
Популярность: 10
Сказал(а) спасибо: 24
Поблагодарили 12 раз(а) в 8 сообщениях
 
По умолчанию Re: Как изменился sendPacket?

Цитата:
Сообщение от xoraxaxПосмотреть сообщение
Не понимаю вас.

Функция начинается так (руоф).

elementclient.exe+389820 - 6A FF - push -01
elementclient.exe+389822 - 68 68A9B900 - push elementclient.exe+79A968



Передается в функцию, как мне кажется, то же самое, что и раньше. Тем не менее, если код запустить без админских прав, то ничего не происходит. Если запустить от имени админа, клиент вываливается с ошибкой.


Где косяк, понять не могу.

Игровой центр че-то делает с клиентом, решение - открыть процесс с правами дебагера/запускать клиент не через игровой центр.
Сам инжект вроде почти не менялся. Вот так у себя инжектирую:
Код:
 

    Private Sub Write_packet(ByVal packet() As Byte)

        Dim tmpint As UInteger

        WriteProcessMemory(hProcess, PacketAllocMemory, packet, packet.Length, tmpint)

        Me.Mov_EDI(PacketAllocMemory)
        Me.Push6A(packet.Length)
        Me.Push_EDI()

    End Sub

    Public Sub add_packet(ByVal packet() As Byte) '+++

        '7D 00 01  
        '7D 00 00 

        Me.Clear()

        Me.Pushad()

        Me.Mov_ECX_DWORD_Ptr(Offsets.BaseAdress) 'base adress

        Me.Mov_ECX_DWORD_Ptr_ECX_Add(&H20)

        Me.Write_packet(packet)

        Me.Mov_EAX(Offsets.PackCall) 'pacet send function
        Me.Call_EAX()

        Me.Popad()
        Me.Ret()

        Me.RunAsm(PacketSendAllocMemory)

    End Sub

'PackCall As UInteger = &H789820 
'
  Ответить с цитированием
Старый 01.07.2015, 23:50   #5
 Разведчик
Аватар для xoraxax
 
xoraxax никому не известный тип
Регистрация: 07.04.2010
Сообщений: 9
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как изменился sendPacket?

Запускаю с правами дебаггера - такая же история.
В итоге CreateRemoteThread отрабатывает, а новый тред с нашим вызовом sendPacket крашит весь клиент. Видимо придется придумать, как дебажить заинжекченный код.

Каким образом можно запускать клиент не через игровой центр?

Ваш код вроде очень похож на мой.

Подозреваю, что происходит что-то неладное с защитой памяти.
  Ответить с цитированием
Старый 02.07.2015, 00:23   #6
 Разведчик
Аватар для bestbeer
 
bestbeer никому не известный тип
Регистрация: 06.10.2013
Сообщений: 27
Популярность: 10
Сказал(а) спасибо: 24
Поблагодарили 12 раз(а) в 8 сообщениях
 
По умолчанию Re: Как изменился sendPacket?

Цитата:
Сообщение от xoraxaxПосмотреть сообщение
Каким образом можно запускать клиент не через игровой центр?

1) Через автологины [Ссылки могут видеть только зарегистрированные пользователи. ] (работает все, кроме входа в игру из-за обновления)
2) Послать запросы на сервер, получить из ответов аргументы для запуска, запустить клиент под этими аргументами(Аргументы такие: "startbypatcher " + "user:ИзОтвета " + "_user:ИзОтвета "+ "token2:ИзОтвета " + "role:Ник_Перса" )
  Ответить с цитированием
Старый 02.07.2015, 02:15   #7
 Разведчик
Аватар для xoraxax
 
xoraxax никому не известный тип
Регистрация: 07.04.2010
Сообщений: 9
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как изменился sendPacket?

Дело все-таки не в гэйм-центре, а жаль.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Программа] SendPacket 1.4.4 STIL23 Боты, скрипты и прочий софт для Perfect World 79 11.06.2012 08:58
[Информация] изменился список якорей lektor-killer Общение и обсуждение 10 03.02.2011 17:37

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 19:58.

Пишите нам: [email protected]
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net