[C#] steam client

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Morfin
Лейтенант
Лейтенант
Сообщения: 237
Зарегистрирован: 19.10.2007
Поблагодарили: 1 раз

#31 Сообщение 03.11.2008, 08:56

eldest писал(а):SteamWeakVerifyNewValveCDKey
Возвращяет int (enum ESteamError)
void*Src - const char *cszCDKey
TSteamError там не используется
всё остальное паходу инты или булены тк используются в основном в if(!arg) и т.д.

в добытых исходниках хл2 экспорты отсуцтвуют а должны быть))) но там старые и вот как выглядит кусочек

Код: Выделить всё

void CGameUI::ValidateCDKey(bool force, bool inConnect)
{
.................
   else if (!force && vgui::system()->GetRegistryString("HKEY_CURRENT_USER\\Software\\Valve\\Half-Life\\Settings\\ValveKey", cdkey, sizeof(cdkey)) 
         && strlen(cdkey) > 0)
   {
      if ( SteamWeakVerifyNewValveCDKey(cdkey) == eSteamErrorNone )
.................
логично предположить что bool force, bool inConnect были добавлены в SteamWeakVerifyNewValveCDKey

и эт с какого времени работает проверка региона?
Я поюзал единицы =) облом похоже 36 возвращает всегда(ключ норм)
if (var1) значит что var1 равен чему угодно но не 0 и там другие также проверяются, тут надо узнать что реально передаёт мб какая-то комбинация
P.S Это всё-таки не спроста у меня декомпилер выдал следующий код
int v6
v6=fopen(a2,v7);
Изображение

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#32 Сообщение 03.11.2008, 10:18

fopen() :shock:
тада там какаято бинарная хрень т.к. ничего такого похожево на путь к фаилу или норм текста я не видел

Morfin
Лейтенант
Лейтенант
Сообщения: 237
Зарегистрирован: 19.10.2007
Поблагодарили: 1 раз

#33 Сообщение 03.11.2008, 10:27

eldest писал(а):fopen() :shock:
тада там какаято бинарная хрень т.к. ничего такого похожево на путь к фаилу или норм текста я не видел
Блин ты прав строки хранятся отдельно и надоо ещё строку запихнуть туда(strigs кстати команда берёт именно их)
SSZ0041573C_mylog_txt
Это ссылка на строку где хранится имя файла
Изображение

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#34 Сообщение 03.11.2008, 10:33

чё мы тут голову ломаем, я же выложил эмуль ша кароч пасматрю чё там
а на си есть чёнить типа type() чтоб получить тип переменной?

Morfin
Лейтенант
Лейтенант
Сообщения: 237
Зарегистрирован: 19.10.2007
Поблагодарили: 1 раз

#35 Сообщение 03.11.2008, 10:53

eldest писал(а):чё мы тут голову ломаем, я же выложил эмуль ша кароч пасматрю чё там
а на си есть чёнить типа type() чтоб получить тип переменной?
Не знаю если есть покажет int
Изображение

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#36 Сообщение 03.11.2008, 10:55

Код: Выделить всё

10:46:52:703 	Hook: SteamWeakVerifyNewValveCDKey()
10:48:46:906 	cszCDKey: <AAAAA-AAAAA-AAAAA-AAAAA-AAAAA>
10:48:46:906 	a1: LPCSTR:<> int:<1236132> unsigned int:<1236132> DWORD:<1236132>
10:48:46:906 	a2: LPCSTR:<@ѕH> int:<1236136> unsigned int:<1236136> DWORD:<1236136>
10:48:46:906 	a3: LPCSTR:<@PНYAаDН > int:<1233856> unsigned int:<1233856> DWORD:<1233856>
10:48:46:906 	cszCDKey: <AAAAA-AAAAA-AAAAA-AAAAA-AAAAA>
10:48:46:906 	a1: LPCSTR:<> int:<1236132> unsigned int:<1236132> DWORD:<1236132>
10:48:46:906 	a2: LPCSTR:<@ѕH> int:<1236136> unsigned int:<1236136> DWORD:<1236136>
10:48:46:906 	a3: LPCSTR:<@PНYAаDН > int:<1233856> unsigned int:<1233856> DWORD:<1233856>
10:49:17:906 	cszCDKey: <AAAAA-AAAAA-AAAAA-AAAAA-AAAAA>
10:49:17:906 	a1: LPCSTR:<> int:<1236132> unsigned int:<1236132> DWORD:<1236132>
10:49:17:906 	a2: LPCSTR:<@ѕH> int:<1236136> unsigned int:<1236136> DWORD:<1236136>
10:49:17:906 	a3: LPCSTR:<> int:<1233856> unsigned int:<1233856> DWORD:<1233856>
10:49:17:906 	cszCDKey: <AAAAA-AAAAA-AAAAA-AAAAA-AAAAA>
10:49:17:906 	a1: LPCSTR:<> int:<1236132> unsigned int:<1236132> DWORD:<1236132>
10:49:17:906 	a2: LPCSTR:<@ѕH> int:<1236136> unsigned int:<1236136> DWORD:<1236136>
10:49:17:906 	a3: LPCSTR:<> int:<1233856> unsigned int:<1233856> DWORD:<1233856>
10:49:54:343 	cszCDKey: <AAAAA-AAAAA-AAAAA-AAAAA-AAAAA>
10:49:54:343 	a1: LPCSTR:<> int:<1236132> unsigned int:<1236132> DWORD:<1236132>
10:49:54:343 	a2: LPCSTR:<`јH> int:<1236136> unsigned int:<1236136> DWORD:<1236136>
10:49:54:343 	a3: LPCSTR:<> int:<1233856> unsigned int:<1233856> DWORD:<1233856>
10:49:54:343 	cszCDKey: <AAAAA-AAAAA-AAAAA-AAAAA-AAAAA>
10:49:54:343 	a1: LPCSTR:<> int:<1236132> unsigned int:<1236132> DWORD:<1236132>
10:49:54:343 	a2: LPCSTR:<`јH> int:<1236136> unsigned int:<1236136> DWORD:<1236136>
10:49:54:343 	a3: LPCSTR:<> int:<1233856> unsigned int:<1233856> DWORD:<1233856>
10:51:22:500 	cszCDKey: <BBBBB-AAAAA-AAAAA-AAAAA-AAAAA>
10:51:22:500 	a1: LPCSTR:<> int:<1236132> unsigned int:<1236132> DWORD:<1236132>
10:51:22:500 	a2: LPCSTR:< (G> int:<1236136> unsigned int:<1236136> DWORD:<1236136>
10:51:22:500 	a3: LPCSTR:<@ЧYAА=Ч > int:<1233856> unsigned int:<1233856> DWORD:<1233856>
10:51:22:500 	cszCDKey: <AAAAA-AAAAA-AAAAA-AAAAA-BBBBB>
10:51:22:500 	a1: LPCSTR:<> int:<1236132> unsigned int:<1236132> DWORD:<1236132>
10:51:22:500 	a2: LPCSTR:< (G> int:<1236136> unsigned int:<1236136> DWORD:<1236136>
10:51:22:500 	a3: LPCSTR:<@ЧYAА=Ч > int:<1233856> unsigned int:<1233856> DWORD:<1233856>

Morfin
Лейтенант
Лейтенант
Сообщения: 237
Зарегистрирован: 19.10.2007
Поблагодарили: 1 раз

#37 Сообщение 03.11.2008, 11:47

eldest писал(а):...
Вот что я нашёл:

Код: Выделить всё

*(_DWORD *)v26 = sub_3016E720(a3, 7u);
  *(_DWORD *)v27 = sub_3016E720(a3, 8u);
  *(_DWORD *)v28 = sub_3016E720(a3, 0x19u);
эти переменные идут с 1-й функции ещё:

Код: Выделить всё

 int __cdecl SteamWeakVerifyNewValveCDKey(void *Src, int a2, int a3, int a4);
{
   return sub_30148EA0(Src, a2, a4, a3, a4);
}
далее в sub_30148EA0:

Код: Выделить всё

  
...
 v11=a3;
  v6 = a2;
  v5 = a4;
  v17 = a5;
...
sub_30192510(v17, v6, (int)&v12, (int)&v20, v5) //Вызываем с некоторыми параметрами
далее в sub_30192510:

Код: Выделить всё

  v5 = a1;
  v6 = a2;
  sub_30192780(v5, a5, (int)&v15, a3, a4, (int)&v14, v6);
а вот тут в функции sub_30192780:

Код: Выделить всё

  v26 = a7;
  v27 = a2;
  v28 = a1;
 ...
  *(_DWORD *)v26 = sub_3016E720(a3, 7u);
  *(_DWORD *)v27 = sub_3016E720(a3, 8u);
  *(_DWORD *)v28 = sub_3016E720(a3, 0x19u);
Изображение

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#38 Сообщение 03.11.2008, 12:06

da eto ya sam videl
cheto u menya s kompom..... yazik nepomenyat

Morfin
Лейтенант
Лейтенант
Сообщения: 237
Зарегистрирован: 19.10.2007
Поблагодарили: 1 раз

#39 Сообщение 03.11.2008, 12:06

eldest писал(а):da eto ya sam videl
cheto u menya s kompom..... yazik nepomenyat
Что есть *(_DWORD *)?
P.S Тема уже не про программу которая в начале а чёрти про что :)
Изображение

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#40 Сообщение 03.11.2008, 12:23

*(_DWORD *)?
я хз я си вообще хреново знаю
может для того чтоб получить переменную в том ввиде в катором она есть чтоб изменить значение, перед субами ничего же нету
у меня в студио 2003 с _DWORD компилить нехочет
перед тем как стим каллит на WeakVerify.... идёт калл на
SteamRefreshAccountInfo2(); // a1 - ?(null), a2 - int(1), + byref TSteamError?
a1 - может void* и бинарная хрень берётся оттуда?))))

кстате, а нах те эта фун-ия здалась? она нужна токо естли ты будеш брут писать

Morfin
Лейтенант
Лейтенант
Сообщения: 237
Зарегистрирован: 19.10.2007
Поблагодарили: 1 раз

#41 Сообщение 03.11.2008, 12:48

eldest писал(а):
*(_DWORD *)?
я хз я си вообще хреново знаю
может для того чтоб получить переменную в том ввиде в катором она есть чтоб изменить значение, перед субами ничего же нету
у меня в студио 2003 с _DWORD компилить нехочет
перед тем как стим каллит на WeakVerify.... идёт калл на
SteamRefreshAccountInfo2(); // a1 - ?(null), a2 - int(1), + byref TSteamError?
a1 - может void* и бинарная хрень берётся оттуда?))))

кстате, а нах те эта фун-ия здалась? она нужна токо естли ты будеш брут писать
Забавно но из твоего же поста:

Код: Выделить всё

Steam_API.SteamWeakVerifyNewValveCDKey(sKey, ref pError);
Изображение

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#42 Сообщение 03.11.2008, 12:59

ref pError)))
это я такой вывод сделал посмотрев через апи монитор

ладно пайду делать эмуль...

можеш качнуть http://csmania.ru/forum/viewtopic.php?f=38&t=10274 да запротектить WeakVerify и поглядеть чё как

Morfin
Лейтенант
Лейтенант
Сообщения: 237
Зарегистрирован: 19.10.2007
Поблагодарили: 1 раз

#43 Сообщение 03.11.2008, 13:20

eldest писал(а):ref pError)))
это я такой вывод сделал посмотрев через апи монитор

ладно пайду делать эмуль...

можеш качнуть http://csmania.ru/forum/viewtopic.php?f=38&t=10274 да запротектить WeakVerify и поглядеть чё как
А всё декомпилер накосячил - один struct заменился на то из чего он состоит(из асм же делается вот он и понял как есть)
P.S eSteamErrorRead возвращает оО не знаю что за хрень
P.P.S Щас SteamAccountPending пишет
Я пишу брут напрямую который будет проверять а не через /dev/ass
Изображение

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#44 Сообщение 04.11.2008, 01:17

ееееее
Diviton писал(а):

Код: Выделить всё

STEAM_API int STEAM_CALL SteamWeakVerifyNewValveCDKey(const char* cszValveCDkey, int* piGameCode, unsigned int* puTerritoryCode, TSteamError* pError)
токо я чёто в ида не видел как очищается pError
и на кой в стиме зделано

Код: Выделить всё

        return sub_xxxxxxxx(cszValveCDkey, piGameCode, pError, puTerritoryCode, pError);
}

Morfin
Лейтенант
Лейтенант
Сообщения: 237
Зарегистрирован: 19.10.2007
Поблагодарили: 1 раз

#45 Сообщение 27.11.2008, 05:24

eldest писал(а):ееееее
Diviton писал(а):

Код: Выделить всё

STEAM_API int STEAM_CALL SteamWeakVerifyNewValveCDKey(const char* cszValveCDkey, int* piGameCode, unsigned int* puTerritoryCode, TSteamError* pError)
токо я чёто в ида не видел как очищается pError
и на кой в стиме зделано

Код: Выделить всё

        return sub_xxxxxxxx(cszValveCDkey, piGameCode, pError, puTerritoryCode, pError);
}
Это не существующая функция - sub_xxxxxxxx, реально всё что находится в ней - код SteamWeakVerifyNewValveCDKey, про pError тоже не видел а так ли это нужно
P.S Эта функция локально проверяет формат CD-KEY и получает код игры а также код территории, к которой он принадлежит(необходимо только запустить движок и сделать StartupSteam)
Изображение

Ответить Вложения 3