purebasic.info

PureBasic forum
Текущее время: Вс янв 21, 2018 11:40 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Фальсификатор
СообщениеДобавлено: Вт янв 27, 2009 3:47 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Полазил по буржуйскому форуму, натолкнулся на полезную API. Она умеет читать из памяти запущенного процесса и записывать в память этого процесса некоторые данные. Чуток модифицировав тамошний пример стал чемпионом по игре в "Сапера"

Изображение



Обратите внимание на время - 3 секунды! А вам слабо? Конечно можно и за 0 секунд, но это уж слишком :D

А вот и код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
hProcess = RunProgram("C:\WINDOWS\system32\winmine.exe","",GetCurrentDirectory(),#PB_Program_Open)
pid=ProgramID(hProcess)
ProcessHandle = OpenProcess_(#PROCESS_ALL_ACCESS, #False, pid);
*baseaddress = $100579C
While ProgramRunning(hProcess)
  ReadProcessMemory_(Processhandle, *baseaddress, @Timer.w, 2, 0)
 
 
 
  Debug Timer
  If Timer>2
  Timer1.w=2 ; записываем 2 но через 1 сек. задержки  будет 3
  WriteProcessMemory_(Processhandle,*baseaddress,@Timer1,2,0)
  EndIf
 
  Delay(1000)
 
Wend
 
 
 



Значение этого кода трудно переоценить - может помочь заморозить или изменить данные в каких либо программах. Типа собственного artmoney.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 27, 2009 4:38 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Квиталли...
Ну ты как фильме, "Иван Васильевич меняет профессию"

- Так этой штукой и в сберкассе стену поднять можно?!
- Да что вы, даже сквозь время можно проходить!
- ... очень полезное изобретение

- .. прекратите ваши антиобщественные опыты!!!



Я в восторге...

Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 27, 2009 5:49 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Самому понравилось. А в принципе, программу аналогичную artmoney не так уж и сложно написать. В простейшем варианте такие действия:

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

К примеру в Сапёре после запуска игры изменяются только 4 адреса, найти нужный не сложно. Тем более, что он "тикает" каждую секунду.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 27, 2009 6:10 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11080
Благодарил (а): 4 раз.
Поблагодарили: 385 раз.
Да, очень полезная функция...
Спасибо Квиталли!

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 08, 2012 1:26 am 
Не в сети
ассистент

Зарегистрирован: Вс янв 08, 2012 1:09 am
Сообщений: 19
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Не подскажите, как пройти по цепочке офсетов?
Например информация хранится в яч. памяти па адресу base+$20+$450
На делфи работает такой код:
Код:
1
2
3
ReadProcessMemory (hProcess, Pointer($92764C), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$20), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$450), @WHP, sizeof(WHP), NoB); //Читаем значение HP


такой код на purebasic`е
Код:
1
2
3
ReadProcessMemory_(hProcess, $92764C, @WHP.w, SizeOf(WHP), NoB)
ReadProcessMemory_(hProcess, (WHP+$20), @WHP.w, SizeOf(WHP), NoB)
ReadProcessMemory_(hProcess, (WHP+$450), @WHP.w, SizeOf(WHP), NoB)


читает только значение из base адреса, подскажите в чем ошибка?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 08, 2012 5:38 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Remii писал(а):
подскажите в чем ошибка?

На вскидку:
@WHP.w - это указатель на WHP т.е. адрес
WHP - это значение переменной, которое лежит по адресу @WHP.w

(WHP+$20) - тут ты к значению переменной WHP прибавил $20 и пытаешься это использовать как адрес. Если в переменная WHP содержит адрес ( как ты пишешь base), то всё правильно сделал. Но тип переменной у тебя w - это два байта, диапазон -32768 до 32767, маловато будет для адреса!

Иначе прибавлять надо к адресу @WHP+$20
Ну наверно так как то.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 08, 2012 6:03 pm 
Не в сети
ассистент

Зарегистрирован: Вс янв 08, 2012 1:09 am
Сообщений: 19
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Спс, достаточно было изменить тип переменной :)

_________________
Школьный курс QBasic вот мой опыт!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 08, 2012 9:46 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб май 21, 2011 10:27 pm
Сообщений: 246
Откуда: Брест , Беларусь
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Кстати,если кому-интересно то в игре CSS такой чит как SpeedHack работает на остановке (-торможении) времени. Можно ли найти в программе с игрой переменную времени таким образом?

И еще вопрос.Можно ли отследить изменения переменных вообще , если да то с примерчиком бы :roll:

_________________
Выпьем ещё раз - чтобы выпить в следущий раз! (С) Иван Пашкевич


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 09, 2012 4:57 am 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Цитата:
найти в программе с игрой переменную времени таким образом?
Канечно, лови все вызовы "временных" функций, изучай код перед их вызовами. откуда берется цифра времени. экспериментируй, меняя эти цифры.
Это сложно.. Потому для спидхака делай проще - меняй "время" в "пойманных" апи, и пох что ускорится даже то что не надо ускорять, главное бегать будешь быстро.

Пример для Сапера winXP32 ускоряет таймер в 4 раза :) link


Вложения:
winmine_speed4x.rar [3.67 KiB]
Скачиваний: 281
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 09, 2012 11:32 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11080
Благодарил (а): 4 раз.
Поблагодарили: 385 раз.
puremaster, все это конечно хорошо, но там на пурике только обертка над объектным файлом.
Хотелось бы увидеть эти функции на пурике. Очень интересует FiхImроrt().

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 09, 2012 4:28 pm 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Цитата:
Очень интересует FiхImроrt()

Я же давал сурц

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void FixImport(ULONG base, char *DLLName, char *FuncName, PVOID NewProc){
        DWORD PE, CurImportDirectory, OriginalFirstThunk, CurFirstThunk;
        DWORD NumberOfSections, SizeOfOptional, section, oldCharacteristics, VirtualOffset, SizeSection;
        int n;
       
        PE=*(DWORD*)(base+0x3C)+base;
        NumberOfSections=*(WORD*)(PE+6);
        SizeOfOptional=*(WORD*)(PE+0x14);
        for (n=0; n<NumberOfSections; n++) {
                section=PE+0x18+SizeOfOptional+n*40;
                VirtualOffset=*(DWORD*)(section+12)+base;
                SizeSection=*(DWORD*)(section+16);
                hVirtualProtect((PVOID)VirtualOffset, SizeSection, PAGE_EXECUTE_READWRITE, &oldCharacteristics );
        }
 
        CurImportDirectory=*(DWORD*)(PE+128)+base;
        OriginalFirstThunk=*(DWORD*)CurImportDirectory;
        do {
                if (hlstrcmpiA((LPSTR)*(DWORD*)(CurImportDirectory+12)+base, DLLName)==0){
                        CurFirstThunk=*(DWORD*)(CurImportDirectory+16)+base;
                        do{
                                if (strcmp((LPSTR)*(DWORD*)(OriginalFirstThunk+base)+base+2, FuncName)==0){
                                        break;
                                }
                                OriginalFirstThunk+=4;
                                CurFirstThunk+=4;
                        } while (*(DWORD*)(OriginalFirstThunk+base)!=0) ;
 
                        *(DWORD*)CurFirstThunk=(DWORD)NewProc;
                        return;
                }
        CurImportDirectory+=20;
        OriginalFirstThunk=*(DWORD*)CurImportDirectory;
        } while (OriginalFirstThunk!=0);
}



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 10, 2012 9:16 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вс июн 05, 2011 5:56 pm
Сообщений: 72
Откуда: Бендеры
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Квиталли спасибо!
pS: когда увидел название темы, сразу подумал про ЕдРо :D

_________________
Русский поисковик PureBasic | Мой блог | Мои работы | PureBasic 5.00 Linux & Windows


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 02, 2012 6:58 pm 
Не в сети
доцент

Зарегистрирован: Ср авг 01, 2012 4:20 pm
Сообщений: 41
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Читаю и умиляюсь - хоть кто-то тут на си кодит...

_________________
И да пребудет с Вами великий ассемблер, друзья!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 02, 2012 10:20 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Vbs/Stertor
Вы похожи на троля товарищЪ

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 02, 2012 11:00 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11080
Благодарил (а): 4 раз.
Поблагодарили: 385 раз.
pablov писал(а):
Vbs/Stertor
Вы похожи на троля товарищЪ
За это я его и удалил со всего форума.
Потому что часто нарушал правила и даже открыто писал что если не удалишь, то и дальше буду устраивать безпредел.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB