purebasic.info
http://purebasic.info/phpBB3ex/

Фальсификатор
http://purebasic.info/phpBB3ex/viewtopic.php?f=10&t=686
Страница 1 из 3

Автор:  kvitaliy [ Вт янв 27, 2009 3:47 pm ]
Заголовок сообщения:  Фальсификатор

Полазил по буржуйскому форуму, натолкнулся на полезную 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.

Автор:  Fdisk [ Вт янв 27, 2009 4:38 pm ]
Заголовок сообщения: 

Квиталли...
Ну ты как фильме, "Иван Васильевич меняет профессию"

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

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



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

Изображение

Автор:  kvitaliy [ Вт янв 27, 2009 5:49 pm ]
Заголовок сообщения: 

Самому понравилось. А в принципе, программу аналогичную artmoney не так уж и сложно написать. В простейшем варианте такие действия:

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

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

Автор:  Пётр [ Вт янв 27, 2009 6:10 pm ]
Заголовок сообщения: 

Да, очень полезная функция...
Спасибо Квиталли!

Автор:  Remii [ Вс янв 08, 2012 1:26 am ]
Заголовок сообщения: 

Не подскажите, как пройти по цепочке офсетов?
Например информация хранится в яч. памяти па адресу 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 адреса, подскажите в чем ошибка?

Автор:  kvitaliy [ Вс янв 08, 2012 5:38 am ]
Заголовок сообщения: 

Remii писал(а):
подскажите в чем ошибка?

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

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

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

Автор:  Remii [ Вс янв 08, 2012 6:03 pm ]
Заголовок сообщения: 

Спс, достаточно было изменить тип переменной :)

Автор:  kirill2000d [ Вс янв 08, 2012 9:46 pm ]
Заголовок сообщения: 

Кстати,если кому-интересно то в игре CSS такой чит как SpeedHack работает на остановке (-торможении) времени. Можно ли найти в программе с игрой переменную времени таким образом?

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

Автор:  puremaster [ Пн янв 09, 2012 4:57 am ]
Заголовок сообщения: 

Цитата:
найти в программе с игрой переменную времени таким образом?
Канечно, лови все вызовы "временных" функций, изучай код перед их вызовами. откуда берется цифра времени. экспериментируй, меняя эти цифры.
Это сложно.. Потому для спидхака делай проще - меняй "время" в "пойманных" апи, и пох что ускорится даже то что не надо ускорять, главное бегать будешь быстро.

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

Вложения:
winmine_speed4x.rar [3.67 KiB]
Скачиваний: 417

Автор:  Пётр [ Пн янв 09, 2012 11:32 am ]
Заголовок сообщения: 

puremaster, все это конечно хорошо, но там на пурике только обертка над объектным файлом.
Хотелось бы увидеть эти функции на пурике. Очень интересует FiхImроrt().

Автор:  puremaster [ Пн янв 09, 2012 4:28 pm ]
Заголовок сообщения: 

Цитата:
Очень интересует 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);
}


Автор:  AgManiX [ Вт янв 10, 2012 9:16 pm ]
Заголовок сообщения: 

Квиталли спасибо!
pS: когда увидел название темы, сразу подумал про ЕдРо :D

Автор:  Vbs/Stertor [ Чт авг 02, 2012 6:58 pm ]
Заголовок сообщения: 

Читаю и умиляюсь - хоть кто-то тут на си кодит...

Автор:  pablov [ Чт авг 02, 2012 10:20 pm ]
Заголовок сообщения: 

Vbs/Stertor
Вы похожи на троля товарищЪ

Автор:  Пётр [ Чт авг 02, 2012 11:00 pm ]
Заголовок сообщения: 

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

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/