| 
		
	
	
	
		
	Сообщений: 21 
	Тем: 5 
	Зарегистрирован: Oct 2014
	
 Репутация: 
12 
	
		
		
		10-23-2014, 05:09 PM 
(Сообщение последний раз редактировалось: 10-24-2014, 04:31 PM   Tahoma.)
		
	 
		Доброго времени суток. 
Намечается проект на создание сервера под игру Archlord2. 
Игра защищена только жучком. 
Некоторые файлы я уже разобрал. Сейчас из дизасм пытаюсь узнать криптовку пакетов. 
Есть у кого интерес из программеров?
 
Офф: http://archlord2.webzen.com/main
DI; HALT; RET ))))
 
	
	
	
		
	Сообщений: 2,124 
	Тем: 84 
	Зарегистрирован: Jul 2010
	
 Репутация: 
3,419 
	
	
		А есть презенташка по игре и собственно о чём она?
	 
	
	
	
		
	Сообщений: 21 
	Тем: 5 
	Зарегистрирован: Oct 2014
	
 Репутация: 
12 
	
		
		
		10-24-2014, 09:24 AM 
(Сообщение последний раз редактировалось: 10-25-2014, 09:12 AM   Tahoma.)
		
	 
		Кин 1
Кин 2
Обзор от чела
Добавлено через 3 часа 11 минут
Нашел как распаковываются apk файлы. 
Формат заголовка (все по 4 байта): 
0xEBED - идентификатор файла 
0x00010001 - не знаю 
len - размер запакованного файла 
num - количество файлов в архиве -1 (пока предположительно) 
start - смещение в файле до data 
hz - не знаю. обычно не сильно отличается от размера файла.
 
далее идут архивы без доп. информации между ними. По этому оптимальным решением для меня стало смещаться по файлу отталкиваясь от значения total_in в структуре z_stream;
 
			CODE Код:     char arg[] = ".\\apk\\Table.apk";
 int rs;
 FILE* fapk;
 FILE* hNew_Filename;
 uLongf size_buf;
 char new_filename[128];
 
 fapk = fopen(arg, "rb");
 fseek(fapk, 0, SEEK_END);
 int apk_file_size = ftell(fapk);
 fseek(fapk, 0, SEEK_SET);
 
 char* load_buf = (char*)malloc(apk_file_size);
 char* load_buf2 = (char*)malloc(apk_file_size);
 int get_sz = fread(load_buf, 1, apk_file_size, fapk);
 fclose(fapk);
 
 z_stream infstream;
 
 int next_arch = 0;
 int aaa;
 int num_file = 1;
 
 while (true)
 {
 memset(load_buf2, 0, apk_file_size);
 memset(&infstream, 0, sizeof(z_stream));
 infstream.avail_in = (uInt)apk_file_size - 0x18 - next_arch;
 infstream.next_in = (Bytef *)load_buf + 0x18 + next_arch;
 infstream.avail_out = (uInt)apk_file_size;
 infstream.next_out = (Bytef *)load_buf2;
 inflateInit(&infstream);
 
 aaa = inflate(&infstream, Z_NO_FLUSH);
 next_arch += infstream.total_in;
 if (aaa == Z_STREAM_END)
 {
 sprintf(new_filename, ".\\unp\\%d.txt", num_file);
 hNew_Filename = fopen(new_filename, "wb");
 fwrite(load_buf2, infstream.total_out, 1, hNew_Filename);
 fclose(hNew_Filename);
 }
 else
 {
 inflateEnd(&infstream);
 break;
 }
 ++num_file;
 inflateEnd(&infstream);
 }
 return 0;
 
p.s.: lzi файлы кодируются обычной ксоркой на 0xA1
Добавлено через 5 часов 46 минут
https://yadi.sk/d/_E95bsvscFtJm  - Программка для распаковки APK файлов.
https://yadi.sk/d/P94ylxaQcFwn8  - конвертирует LZI файлы
Добавлено через 23 часа 47 минут 
Убрал XIGNCODE3. https://yadi.sk/d/CmJGnVIWcGctF 
			Как делается 
В IDA ищем XingCode: Код: .rdata:00E43C9C aXigncode:                              ; DATA XREF: .data:off_EEE2D4o.rdata:00E43C9C                 unicode 0, <XignCode>,0
Получаем функцию запуска:
 Код: .text:00555564 loc_555564:                             ; CODE XREF: XignCode_proc+2Bj.text:00555564                 lea     eax, [ebp+Buffer]
 .text:0055556A                 push    eax             ; lpBuffer
 .text:0055556B                 push    104h            ; nBufferLength
 .text:00555570                 call    ds:GetCurrentDirectoryW
 .text:00555576                 lea     ecx, [ebp+Buffer]
 .text:0055557C                 push    ecx
 .text:0055557D                 lea     ecx, [ebp+var_28]
 .text:00555580                 call    ds:??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z ; std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>(wchar_t const *)
 .text:00555586                 mov     [ebp+var_4], 0
 .text:0055558D                 push    offset asc_E43CB0 ; "\\"
 .text:00555592                 lea     ecx, [ebp+var_28]
 .text:00555595                 call    ds:??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@PB_W@Z ; std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>::operator+=(wchar_t const *)
 .text:0055559B                 mov     edx, ofsXignCode
 .text:005555A1                 push    edx
 .text:005555A2                 lea     ecx, [ebp+var_28]
 .text:005555A5                 call    ds:??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@PB_W@Z ; std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>::operator+=(wchar_t const *)
 .text:005555AB                 push    0               ; int
 .text:005555AD                 mov     eax, ofsXignCode
 .text:005555B2                 push    eax             ; Str
 .text:005555B3                 mov     ecx, ifsCodeXC3
 .text:005555B9                 push    ecx             ; int
 .text:005555BA                 call    sub_555D00
 .text:005555BF                 test    eax, eax
 .text:005555C1                 jnz     short loc_5555E2
 .text:005555C3                 mov     [ebp+var_235], 0
 .text:005555CA                 mov     [ebp+var_4], 0FFFFFFFFh
 .text:005555D1                 lea     ecx, [ebp+var_28] ; void *
 .text:005555D4                 call    ds:__imp_??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ ; std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>::~basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>(void)
 .text:005555DA                 mov     al, [ebp+var_235]
 .text:005555E0                 jmp     short loc_55560B
Ищем откуда взялась:
 Код: .text:00401E0B                 call    sub_4A8480.text:00401E10                 mov     ecx, [ebp+var_8]
 .text:00401E13                 call    sub_402190
 .text:00401E18                 mov     ecx, eax
 .text:00401E1A                 call    XignCode_proc
 .text:00401E1F                 movzx   eax, al
 .text:00401E22                 test    eax, eax
 .text:00401E24                 jnz     short loc_401E46
Запускаем Hiew32 и меняем строки:
 Код: .text:00401E1A                 call    XignCode_proc.text:00401E1F                 movzx   eax, al
на
 
Все... Теперь вылавливатель жучков не запускается, а игра работает.
 
DI; HALT; RET ))))
 
	
	
	
		
	Сообщений: 21 
	Тем: 5 
	Зарегистрирован: Oct 2014
	
 Репутация: 
12 
	
	
		После долгих мучений нашел все же нужный код. Код:     /* encrypt codeecx = buffer
 esi = 0x11cfd
 edi = 0
 
 .text:01411800 loc_1411800:                            ; CODE XREF: Encrypt1+42j
 .text:01411800                 mov     al, [edi+ecx]   ; ecx = buffer
 .text:01411803                 mov     edx, esi
 .text:01411805                 sar     edx, 8
 .text:01411808                 xor     al, dl
 .text:0141180A                 mov     [ecx], al
 .text:0141180C                 movzx   eax, al
 .text:0141180F                 add     eax, esi
 .text:01411811                 imul    eax, 0CE6Dh
 .text:01411817                 add     eax, 58BFh
 .text:0141181C                 inc     ecx
 .text:0141181D                 sub     ebp, 1
 .text:01411820                 mov     esi, eax
 .text:01411822                 jnz     short loc_1411800 ; ecx = buffer
 
 */
DI; HALT; RET ))))
 
	
	
	
		
	Сообщений: 21 
	Тем: 5 
	Зарегистрирован: Oct 2014
	
 Репутация: 
12 
	
	
		Вот. Сделал небольшой сниффер. С багами конечно. Пока не придумал, как большие пакеты совместить. Но работает: https://yadi.sk/d/bFZRD3OicLyhV
DI; HALT; RET ))))
 
	
	
	
		
	Сообщений: 21 
	Тем: 5 
	Зарегистрирован: Oct 2014
	
 Репутация: 
12 
	
		
		
		10-29-2014, 07:32 PM 
(Сообщение последний раз редактировалось: 10-29-2014, 08:07 PM   Tahoma.)
		
	 
		Расшифровал передаваемый параметр при запуске игры: Добавлено через 35 минутКод:     buf_unbase64 = decrypt_base64_openssl((unsigned char*)base64_str, &size);
 char ccc[] = "wzlAUnchEr";
 int step = 0;
 for (int i = 0; i < size; i++)
 {
 buf_unbase64 [i] ^= ccc[step];
 ++step;
 if (step > (strlen(ccc)-1))
 step = 0;
 }
Смотрю никто не заинтересован проектом. 
Тему можно закрывать
	
DI; HALT; RET ))))
 
	
	
	
		
	Сообщений: 41 
	Тем: 2 
	Зарегистрирован: Jul 2010
	
 Репутация: 
0 
	
	
		Игра не интересна думаю. Есть другой проект где ваши знания пригодятся. В ЛС.
	 
	
	
	
		
	Сообщений: 103 
	Тем: 2 
	Зарегистрирован: Dec 2013
	
 Репутация: 
213 
	
	
		Разбирали бы вы с таким энтузиазмом - Icarus Online, я с удовольствием принял бы участие. Так как Dungeon Striker тоже оказалась не столь подающей надежды на будущее.
	 
	
	
	
		
	Сообщений: 21 
	Тем: 5 
	Зарегистрирован: Oct 2014
	
 Репутация: 
12 
	
	
		trixiejack Написал:Разбирали бы вы с таким энтузиазмом - Icarus Online, я с удовольствием принял бы участие. Так как Dungeon Striker тоже оказалась не столь подающей надежды на будущее. 
Не вижу способа зарегистрироваться без KMC. Дайте регистрацию на офе и можно поглядеть чего и с чем там все
	 
DI; HALT; RET ))))
 
	
	
	
		
	Сообщений: 103 
	Тем: 2 
	Зарегистрирован: Dec 2013
	
 Репутация: 
213 
	
	
		Tahoma Написал:Не вижу способа зарегистрироваться без KMC. Дайте регистрацию на офе и можно поглядеть чего и с чем там все 
Единственный способ - через покупку. Поэтому напишу в ЛС skype и дам данные от аккаунта.
	 |