Rus. server

12/11/2009 05:13 muzhig#886
Quote:
Originally Posted by muchenberg View Post
По поводу выделения моба - нужны viewangles и координаты моба. Прокалькулировать разницу углов, далее аля-аимботом вывести моба по ПКМ на центр и ЛКМ кликнуть по центру. Вот вам и приближение к реальному персу. А не просто селект во все стороны.
Можете кинуть помидором, но я, да и не только я, такое делал - хотя бы мозги размять хорошо.
Вот это как раз по моему чушь получается. Мозги размять можно в процессе поиска адресов. А кликать мышкой... боты на Autoit еще и клавиатуру жмут.. не проще ли тогда бомжа какого нибудь усадить- он будет бегать, мобов мочить, чиниться, лут продавать :-D

Я себе задачу поставил, чтобы мой бот не прикасался к клавиатуре и мышке. чтобы можно было во первых- хоть 10 окон открыть с игрой, во вторых, чтобы у меня не скакали буквы, не залипали клавиши Alt Shift Ctrl- болезнь Autoitовских ботов. ну и тд. Кроме того, процессор они жрут непомерно.. в общем, стараюсь рациональнее подойти))
Один раз попариться- и потом наслаждаться простотой и удобством.
И с другими поделиться благами труда.
12/11/2009 10:22 dj_al#887
Quote:
Originally Posted by origmas View Post
Может я не прав - хотелось-бы быть не правым .. НО..
Не в обиду тем кто програмит на Атоите, действительно язык этот характеризуется как "Интерпретатор" команд .. Он скриптовый и в большей степени напоминает Basic. Конечно его создатели вложили в него возможность вставки кодов на Ассемблере и обращение к процессам других приложений это его достоинства, так-же куча операторов для работы с окнами и элементами управления. В конечном итоге он формирует EXE файл, то-есть машинный код. Все вроде-бы как у Языков Высокого уровня, таких как Дельфи, Визул С++ Борланд С++.
Но дело в том что Код его машинный (псевдо-код) - управляет не машиной а средствами Системы Windows ее WinApi функциями, вызовами и т.п. - то есть интерпретирует скриптовые операторы в команды манипулирования системой а та уже в свою очередь управляет процессором.
Языки высокого уровня компилируют настоящий машинный код - лучше которого на этой планете еще не придумали.. Они не мешают системе -
Не отвлекают ее не дергают ее за веревочки - поэтому настоящий продукт програмного обеспечения должен быть написан на них ..
Я тоже начал с Ботом с Автоита, ........оОчень можно что сделать но
попробывав его на практике - решил перевести проект на VC++ - не потому что я не достиг того чего хотел - нет, потому-что это не практично для системы и .... стыдно - писать серъезную вещь на скрипте ..
Вот чушь написал. :)
Языки высокого уровня так же работают с API (не только WinAPI, а вобще с очень много какими API). И точно так же для управления окнами, доступом в память чужого процесса "дёргают систему за ниточки". :)

Единственная принцпиальная разница между нормальным языком, код которого компилируется сразу в машинный и скриптового, - это то что основные (базовые) операции компилируются в исполняемый машинный код. А в скриптовых языках либо парсится скрипт и исполняется команда за командой, либо сначала текст программы переводится в промежуточный байт-код и потом этот байт-код исполняется.

В AutoIt как раз используется байт-код. Т.е. экзешник написанный на автоите состоит из 2-х частей:
- самого интерпретатора и исполнителя байт-кода,
- а так же твоей программы превращённой в байт-код.
Если посмотришь бинарник программы, то увидишь, что после манифеста в ней и таблицы используемых dll, идёт:
последоватльность байт: A3 48 4B BE 98 6C 4A A9 99 4C
визуально смотрится в Far как: ?HK??lJcTL
Вот с этого места и до конца файла зашифрованный байт-код программы на AutoIt.

Кстати, байт-код используют такие платформы как Java и .Net. :)
Там твоя программа так же превращается из текста в байт-код. Только вот есть небольшие отличия в современном развитии этих платформ. В момент первого вызова некоего кода (метода обычно, там же всё построенно на классах) в них - он динамически компилируется в машинный код и тут же исполняется. При повторном вызове уже используется данный компилированный код. Ну это до тех пор пока программу не закрыл и она у тебя в памяти.
12/11/2009 10:56 origmas#888
Quote:
Originally Posted by dj_al View Post
Вот чушь написал.
ну да, может не так грамотно изложил, но почему-же тогда псевдо-код этот или Байт-код - нагружает систему приложения открытые в момент работы EXE от Автоита - глючат, они - то тут причем - пусть сам бы и глючил ..

может Автоит еще только развивается, но ждать некогда - надо работать ..

а разве - проект на VC++ например не компилируется в машинный код вместе с API и другими функциями и библиотеками в одну кучу и не обращается к системе при работе эксешки а исполняет эти функции отдельно (какие нужны были он их отдельно компилит в себя) ???
12/11/2009 11:39 Biga73#889
по 5 баллов всем !!! - дальше 10 страниц флуда, и кто больше хитрых а лучше импортных слов знает - погнали набирать баллы !
12/11/2009 12:05 dj_al#890
Quote:
Originally Posted by origmas View Post
ну да, может не так грамотно изложил, но почему-же тогда псевдо-код этот или Байт-код - нагружает систему приложения открытые в момент работы EXE от Автоита - глючат, они - то тут причем - пусть сам бы и глючил ..

может Автоит еще только развивается, но ждать некогда - надо работать ..
Тут больше глючит интерпретатор этого байт-кода. Либо кривая реализация самого исполняемого скрипта. Если вы в VC++ не будете корректно с памятью работать - вы ещё и не такие глюки огрести можете. :)

Quote:
Originally Posted by origmas View Post
а разве - проект на VC++ например не компилируется в машинный код вместе с API и другими функциями и библиотеками в одну кучу и не обращается к системе при работе эксешки а исполняет эти функции отдельно (какие нужны были он их отдельно компилит в себя) ???
Немного оффтоп всё это, давай лучше в приват обсудим как и что там на низком уровне работает. :)
12/11/2009 12:24 muchenberg#891
Quote:
Originally Posted by muzhig View Post
Вот это как раз по моему чушь получается. Мозги размять можно в процессе поиска адресов. А кликать мышкой... боты на Autoit еще и клавиатуру жмут.. не проще ли..........
Тем-не менее, сколько-то страниц назад кто-то ныл - давай ему селект не отличающийся от настоящего. И его поддерживали.

Разумеется, что лично я - не за посыл нажатий клавиш/кручение мыши, а за непосредственное исполнение процедуры в клиенте.


Пристали тут к этому автоиту.. небось из-за того что первый исходник бота был получен именно на нём :D
Был-бы сишный или на дельфях, сидели бы там :rolleyes:
12/11/2009 19:46 muzhig#892
Итак, в приложении:
от автора WangMeiWG
(который по ходу знает меньше нашего, куда сунулся, тк он юзал готовенькое)
PWI-шный element-client с которым вроде как работает WangMeiWG
Архив
проекта исходниками автоопределения смещений
(аля ntKid receiver)
и статья, описывающая принцип проекта, идею, так сказать.
проэктовские надписи и комментарии я перевел гугл-транслейтом.
статью переводите сами. Она переводится весьма приблизительно, но смысл понятен. Честно говоря, очень красиво придумали.

еще мне этот тип дал контакт чела, который собсна все эти адреса копал.
Но тот не говорит по английсски. А через гугл.. как то стремно))
В общем, это на будущее пока заметка.
12/11/2009 23:08 silkytail#893
Quote:
Originally Posted by muzhig View Post
Короче, прога выдает список офсетов и inject-адресов.
Принцип действия- поиск последовательности байтов прямо в exe, рассчет адреса который будет в памяти по сдвигу в exe.
Это несомненно гениальная идея, чтобы до нее додуматься, потребовалось года два наверное. Есть еще одна проблема, до которой можно додуматься еще через пару лет - в зависимости от билда екзешника последовательность кодов может слегка меняться (адреса переходов, регистры, смещения на стеке). Поэтому бинарный поиск неплохо бы проводить как минимум с маской.
Но это непосильная задача походу.
12/12/2009 06:17 dwar#894
origmas
[Only registered and activated users can see links. Click Here To Register...]
12/12/2009 11:10 silkytail#895
поиск по маске для желающих
алгоритм не совсем совершенен, но вполне достаточен

Code:
/**
 * Find a sequence of data bytes in memory
 *
 * @param  pid              id of process to find of
 * @param  va_hint          start address to search from
 * @param  lookupLength     length of data to lookup 
 * @param  pattern          pattern of data bytes
 * @param  mask             mask of pattern bytes - any non-zero value indicates byte to match
 * @param  patternLength    length of pattern data
 *
 * @return byte *           address of last byte of first matched pattern
 *                          NULL if pattern was not found
 */
byte * findPattern( DWORD       pid
                  , uintptr_t   va_hint
                  , int         lookupLength
                  , const byte *pattern
                  , const byte *mask
                  , int         patternLength)
{
    uintptr_t   exeBaseAddr_ = (uintptr_t) GetModuleHandle(NULL);
    uintptr_t   curntAddr    = va_hint + exeBaseAddr_;
    int         fragmentLen  = 0;
    bool        found        = false;
    MemoryReader memory(pid);

    while ( !found && (lookupLength > 0) )
    {
        if (mask[fragmentLen] != 0)
        {
            // nonzero mask, compare data
            if (memory[curntAddr] == pattern[fragmentLen])
            {
                fragmentLen ++;				// data ok, continue search
            }
            else
            {
                fragmentLen = 0;			// data mismatch, reset position
            }
        }
        else
        {
            // zero mask, just increment position
            fragmentLen ++;
        }

        if (fragmentLen >= patternLength)
        {
            found = true;
            break;
        }

        curntAddr ++;
        lookupLength --;
    }

    if ( !found )
    {
        curntAddr = NULL;
    }

    return (byte*)curntAddr;
}
12/12/2009 17:49 begemot#896
Подскажите пожалуйста, как вытянуть из клиента диалоги с НПС? Конкретно - интересуют все возможные варианты монологов Вэй Сяобао.
12/13/2009 09:05 dwar#897
muzhig
Вот, немного расширенное описание структуры чара.
[BA] + $1с + $20:
12/13/2009 14:51 sioli#898
добавлю тоже:
Игроки окружения, на самом деле тоже страничны
[BA] + $1с + 8 + 32 + 24 + (i * 4) {+0}^j + 4 + (i = от 0 до 796)
{+0}^j означает страницу в связанном списке.
например:
j=0 ==> [BA] + $1с + 8 + 32 + 24 + (i * 4) + 4 +
j=1 ==> [BA] + $1с + 8 + 32 + 24 + (i * 4) + 0 + 4 +
j=2 ==> [BA] + $1с + 8 + 32 + 24 + (i * 4) + 0 + 0 + 4 +
j=3 ==> [BA] + $1с + 8 + 32 + 24 + (i * 4) + 0 + 0 + 0 + 4 +

Кто подскажет принцип распределения между страницами - буду оч благодарна.

Только перебирая 4 страницы (j=0..3) мне удалось получить полный список чаров вокруг меня на западе ГД.
12/13/2009 16:41 dwar#899
muzhig
Возможно, версия клиента у меня другая (хотя мало вероятно), но по адресу $42a6e0 нет никакой функции. Далее
p1:=aPParams.Param1 -> p1:=aPParams^.Param1
+ желательно занести p1 в регистр и затем уже в стек, т.е. вместо push p1 ->
mov eax, p1
push eax
12/14/2009 00:52 AlexGD#900
Который раз замечаю, что у меня не все смещения такие как у вас... Да и читаю посты и не все вкуриваю...

Объясните плиз мне тупенькому, почему у меня, например, левел перса получается вот так:

aBaseAddress = $009771BC; //base address for getting info
[aBaseAddress] + $20 + $45C

А у вас:
[BA] + $1с + $20 + $45C

?

Я что-то не то делаю?