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

Как найти Базовый Адрес, Autoit

-

Разработка ПО для Perfect World

- Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World

Ответ
 
Опции темы
Старый 26.10.2011, 13:51   #1
 Старший сержант
Аватар для sumikot
 
sumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауру
Регистрация: 21.09.2009
Сообщений: 189
Популярность: 578
Сказал(а) спасибо: 27
Поблагодарили 144 раз(а) в 36 сообщениях
 
По умолчанию Как найти Базовый Адрес, Autoit

Тема для новичков в программировании.
Вопрос, конечно, далеко не новый - каждый, кто пишет бота, хоть раз в жизни его искал. А потом заходил на форум zhyk.ru и оставлял сообщение - первыйна ) Можно, конечно, немного подождать, и взять BA на форуме (Это и есть первый способ нахождения BA), но бот в это время будет обиженно стоять и показывать в графе HP нули... Поэтому лучше сразу перейти ко второму способу. Вообще, поиск лучше встроить в бота - при загрузке сравнить GA из настроек со значением BA+1C из памяти клиента, если не совпадает - переход к процедуре поиска BA.
2.Ищем в клиенте последовательность значений 8B0DNNNN - это команда загрузки регистра mov ecx, dword ptr N. Используется клиентом для вычисления динамической адресации. Но так как в коде клиента может использоваться та же команда для загрузки не только BA, а других значений, делаем отсеивание по большему количеству одинакового значения - это и будет BA.
Код:
Func FindBA()
    Local $BAArr[50][2], $i, $n, $BACnt = 0
    For $i = 0 To 49; Обнуление массива
        $BAArr[$i][0] = 0
        $BAArr[$i][1] = 0
    Next
    For $n = 0x00401000 To 0x00403000 Step 1; Диапазон поиска
        $Ram = _MemoryRead($n,$HendleDll, "ushort")
        If $Ram ==  0x0D8B Then; искать mov ecx, dword ptr BA
            $Ram = _MemoryRead($n+2,$HendleDll)
            For $i = 0 To 49
                If $BAArr[$i][0] == 0 Then
                    $BAArr[$i][0] = $Ram
                    $BAArr[$i][1] = 1
                    ExitLoop
                ElseIf $BAArr[$i][0] == $Ram Then
                    $BAArr[$i][1] += 1
                    ExitLoop
                EndIf
            Next
        EndIf
    Next
    For $i = 0 To 49
        If $BAArr[$i][1] > $BACnt Then
            $BaseAdress = $BAArr[$i][0]
            $BACnt = $BAArr[$i][1]
        EndIf
    Next
EndFunc
3. То же самое можно сделать, только последовательность 8B0DNNNN искать не в памяти запущенного клиента, а в файле elementclient.exe. Можно искать коды других команд, где используется BA, например 8B15, A1, 8B35, 8B2D, 8B1D, 8B3D, 8935, 892D.
4. Можно найти другим способом - увеличив количество байт искомой последовательности, например
Код:
$File=FileOpen("elementclient.exe",16)
$Data=FileRead($File,FileGetSize("elementclient.exe"))
FileClose($File)
$Search=StringRegExp($Data,"8B15(.{8})50518B4A2081C1.{8}E8.{8}",2)
,тогда не нужно будет отсеивать по количеству одинаково найденных значений. Но - этот кусок кода с обновлением может измениться, и программа не найдет ничего. Хотя пример выше работает начиная с версии 1.3.4 и заканчивая текущей.

На спасибо не настаиваю но и не откажусь
  Ответить с цитированием
5 пользователя(ей) сказали cпасибо:
AEBus (28.10.2011), lcd1232 (16.11.2011), pwgamer (26.10.2011), semoder (26.10.2011), Sirioga (26.10.2011)
Старый 28.10.2011, 21:25   #2
 Разведчик
Аватар для Это_Что_то
 
Это_Что_то никому не известный тип
Регистрация: 05.10.2011
Сообщений: 23
Популярность: 12
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для Это_Что_то с помощью Skype™
 
По умолчанию Re: Как найти Базовый Адрес, Autoit

попробовал чет ниче не вышло.
вообще ниче не находит
что не такто?
  Ответить с цитированием
Старый 28.10.2011, 21:30   #3
-= Илитный Мастер =-
 Главнокомандующий
Аватар для AEBus
 
AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(AEBus сломал счётчик популярности :(
Регистрация: 27.03.2009
Сообщений: 1,666
Популярность: 67466
Сказал(а) спасибо: 246
Поблагодарили 1,560 раз(а) в 691 сообщениях
 
По умолчанию Re: Как найти Базовый Адрес, Autoit

что пробовали, что не вышло, можно поподробнее? у нас телепатов нет
или вы так, пост набить?
  Ответить с цитированием
Старый 28.10.2011, 21:42   #4
 Разведчик
Аватар для Это_Что_то
 
Это_Что_то никому не известный тип
Регистрация: 05.10.2011
Сообщений: 23
Популярность: 12
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для Это_Что_то с помощью Skype™
 
По умолчанию Re: Как найти Базовый Адрес, Autoit

да вот так и привязал

Код:
#include <NomadMemory.au3>
dim $Exe_Name='elementclient.exe'
FindBA()
Func FindBA()
    Local $BAArr[50][2], $i, $n, $BACnt = 0
    Local $LISTPROCEL = ProcessList($Exe_Name)
    For $n = 0x00401000 To 0x00403000 Step 1; Диапазон поиска
		$HendleDll=$LISTPROCEL[1][1]
        $Ram = _MemoryRead($n,$HendleDll, "ushort")
        If $Ram =  0x0D8B Then; искать mov ecx, dword ptr BA
            $Ram = _MemoryRead($n+2,$HendleDll)
            For $i = 0 To 49
                If $BAArr[$i][0] == 0 Then
                    $BAArr[$i][0] = $Ram
                    $BAArr[$i][1] = 1
                    ExitLoop
                ElseIf $BAArr[$i][0] == $Ram Then
                    $BAArr[$i][1] += 1
                    ExitLoop
                EndIf
            Next
        EndIf
    Next
    For $i = 0 To 49
        If $BAArr[$i][1] > $BACnt Then
            $BaseAdress = $BAArr[$i][0]
            $BACnt = $BAArr[$i][1]
	    msgbox(0,"",$BaseAdress)
        EndIf
    Next
EndFunc
  Ответить с цитированием
Старый 29.10.2011, 22:41   #5
 Старший сержант
Аватар для sumikot
 
sumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауру
Регистрация: 21.09.2009
Сообщений: 189
Популярность: 578
Сказал(а) спасибо: 27
Поблагодарили 144 раз(а) в 36 сообщениях
 
По умолчанию Re: Как найти Базовый Адрес, Autoit

Это_Что_то, а хендл процесса узнать? А память для чтения открыть?
И желательно это сделать вне цикла for next.
Код:
#include <NomadMemory.au3>
Global $NameWinClient = "Element Client"
Global $HendleProc = WinGetProcess($NameWinClient)
Global $HendleDll = _MemoryOpen($HendleProc)
FindBA()

Func FindBA()
    Local $BAArr[50][2], $i, $n, $BACnt = 0
    For $i = 0 To 49; Обнуление массива
        $BAArr[$i][0] = 0
        $BAArr[$i][1] = 0
    Next
    For $n = 0x00401000 To 0x00403000 Step 1; Диапазон поиска
        $Ram = _MemoryRead($n,$HendleDll, "ushort")
        If $Ram ==  0x0D8B Then; искать mov ecx, dword ptr BA
            $Ram = _MemoryRead($n+2,$HendleDll)
            For $i = 0 To 49
                If $BAArr[$i][0] == 0 Then
                    $BAArr[$i][0] = $Ram
                    $BAArr[$i][1] = 1
                    ExitLoop
                ElseIf $BAArr[$i][0] == $Ram Then
                    $BAArr[$i][1] += 1
                    ExitLoop
                EndIf
            Next
        EndIf
    Next
    For $i = 0 To 49
        If $BAArr[$i][1] > $BACnt Then
            $BaseAdress = $BAArr[$i][0]
            $BACnt = $BAArr[$i][1]
        EndIf
    Next
	MsgBox(0,"",Hex($BaseAdress))
EndFunc
Добавлено через 23 минуты
Кстати, добавлю еще, имя окна на оффе сейчас Perfect World, а не Element Client. Будьте внимательны

Последний раз редактировалось sumikot; 29.10.2011 в 23:04. Причина: Добавлено сообщение
  Ответить с цитированием
Пользователь сказал cпасибо:
Это_Что_то (02.11.2011)
Старый 02.11.2011, 00:27   #6
 Разведчик
Аватар для Это_Что_то
 
Это_Что_то никому не известный тип
Регистрация: 05.10.2011
Сообщений: 23
Популярность: 12
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для Это_Что_то с помощью Skype™
 
По умолчанию Re: Как найти Базовый Адрес, Autoit

я так и делал, только
Цитата:
Сообщение от Это_Что_тоПосмотреть сообщение
$LISTPROCEL = ProcessList($Exe_Name)

это список процессов с PID по нему и открываю 1-й процесс

ну да упустил OPENMEMORY

а твой код тоже не работает, 000000 выводит

А вот по PID'ам процесса находит))) спасибо

Последний раз редактировалось Это_Что_то; 02.11.2011 в 00:29. Причина: Добавленно сообщение
  Ответить с цитированием
Пользователь сказал cпасибо:
sumikot (16.11.2011)
Старый 02.11.2011, 01:00   #7
 Старший сержант
Аватар для sumikot
 
sumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауру
Регистрация: 21.09.2009
Сообщений: 189
Популярность: 578
Сказал(а) спасибо: 27
Поблагодарили 144 раз(а) в 36 сообщениях
 
По умолчанию Re: Как найти Базовый Адрес, Autoit

А мой код и не найдет Абсолютно ничего )))))
Такое впечатление, как будто не я писал, а не ты читал: "Кстати, добавлю еще, имя окна на оффе сейчас Perfect World, а не Element Client. Будьте внимательны". А первый процесс - по статистике, обычно это процесс с фокусом на данный момент) Извини, я падсталом)))) Знаю, что нехорошо, но нимогу ничего с собой поделать))))) Наберу 10 сообщений, обязательно тебе спасибку поставлю) Будь внимателен, удачи!

Все, абсолютно серьезен. Немного слов для начинающих писать. На любом языке. Пример выше - $LISTPROCEL = ProcessList($Exe_Name) - и, соответственно, открытие памяти для чтения и записи первого попавшегося процесса. Попадет такая программа в паблик - и половина людей напишет, что она не работает. Потому что кто то фильм открыл до этого, кто то паралельно еще на форуме сидит. А у меня таким способом память интерпретатора Autoit почему то открывает... Как то попался троян, который при заражении собой просил установить необходимые библиотеки для его работы ) Нужно продумывать все варианты запуска своей программы. Чтобы проверить, что именно это процесс именно игры, именно от файла elementclient, что если запущено под win7 или wista, запросить админские полномочия, и т д
Опять многа букафф... Занесло...

Спасибку поставил, как и обещал. Это не накрутка спасибок друг другу! Реально - 2 часа ночи, жена спит, а я патсталом. Жена проснулась, понять ничего не может. Вот так смех продлевает жизнь - вместо того, чтобы спать, она минут 15 бодрствовала ))))

Последний раз редактировалось sumikot; 16.11.2011 в 12:44.
  Ответить с цитированием
Старый 02.11.2011, 10:54   #8
 Разведчик
Аватар для Это_Что_то
 
Это_Что_то никому не известный тип
Регистрация: 05.10.2011
Сообщений: 23
Популярность: 12
Сказал(а) спасибо: 7
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для Это_Что_то с помощью Skype™
 
По умолчанию Re: Как найти Базовый Адрес, Autoit

Чтобы разобраться попробуй выведи массив
Код:
#include <Array.au3>
Run(@SystemDir & "\calc.exe")
Run(@SystemDir & "\calc.exe")
Run(@SystemDir & "\calc.exe")
$Process=ProcessList("calc.exe")
_ArrayDisplay($Process)
ProcessClose($Process[1][1])
ProcessClose($Process[2][1])
ProcessClose($Process[3][1])
в общем то с этого момента сен стало понятно ка это работает
Единственное "НО" это то, что еще иногда приходится искать хендл окна по процессу, но это уже моё извращение(

Последний раз редактировалось Это_Что_то; 02.11.2011 в 10:57.
  Ответить с цитированием
Ответ

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] L2 и Базовый адрес Mr_R@NDOM Общение и обсуждение, архив Lineage 2 1 07.09.2011 19:40
[Помогите!] Базовый адрес PWI bgtx Общение и обсуждение Perfect World 0 06.09.2011 07:34
[Помогите!] Базовый адрес bgtx Общение и обсуждение Perfect World 1 23.03.2011 09:30
Базовый адрес ZiHeRoK Общение и обсуждение, архив Lineage 2 3 06.11.2010 20:54

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

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

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