Сейчас на форуме: vasilevradislav, Magister Yoda, site-pro, Rio (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› Salsa20 - не выходит раскодировать ответ от сервера...
Посл.ответ Сообщение

Ранг: 11.4 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 23 февраля 2013 18:34 · Поправил: virus_forever
· Личное сообщение · #1

Приветствую!

Имеется у меня самописная swf, которая подключается к программе динамически по средствам ActiveX и вызывается код при помощи CallFunc.
Я на Delphi не стал заморачиваться с "рипом" кода, пока-что решил сделать по такой схеме.

В swf я реализовал:
1) Подгрузку новой swf из пакетов. В которой, как я сегодня узнал, алгоритм salsa20. Каждый раз на этом этапе в ней меняется вектор инициализации и еще кое что. В пакете идет 99.9% всей swf, сжатой inflate и размер всего. Далее объединяется с "хидером" и "футером" и отправляется в лоадер. Пример это swf (собранной) - прикрепляю.

2) ARC4 (раз уж все рипнул, то и это)

3) BigInteger

В "синтетике" все функции работают!

Часть кода из моей swf:
Code:
  1.                  public function ClientEncode(aData: String): String
  2.                  {
  3.                         var ByteData: ByteArray = new ByteArray();
  4.                         
  5.                         ByteData = Base64.decodeToByteArray(aData);
  6.                         ByteData.position = 0;
  7.                         
  8.                         if (this.ClientEncrypted == true)
  9.                          {
  10.                                fscommand("log", "ClientEncode~ClientEncrypted");
  11.                                ClientIncomingARC.encrypt(ByteData);
  12.                                ByteData.position = 0;
  13.                          }
  14.                         
  15.                         if (this.ClientSecured == true)
  16.                          {
  17.                                fscommand("log", "ClientEncode~ClientSecured");
  18.                                ByteData = this.ClientIncomingSalsa.encode(ByteData);
  19.                                ByteData.position = 0;
  20.                          }
  21.                          
  22.                         return Base64.encodeByteArray(ByteData);
  23.                  }
  24.                  
  25.                  public function ServerEncode(aData: String): String
  26.                  {
  27.                         var ByteData: ByteArray = new ByteArray();
  28.                         
  29.                         ByteData = Base64.decodeToByteArray(aData);
  30.                         ByteData.position = 0;
  31.                         
  32.                         if (this.ServerEncrypted == true)
  33.                          {
  34.                                fscommand("log", "ServerEncode~ServerEncrypted");
  35.                                ServerIncomingARC.encrypt(ByteData);
  36.                                ByteData.position = 0;
  37.                          }
  38.                         
  39.                         if (this.ServerSecured == true)
  40.                          {
  41.                                fscommand("log", "ServerEncode~ServerSecured");
  42.                                ByteData = this.ServerIncomingSalsa.encode(ByteData);
  43.                                ByteData.position = 0;
  44.                          }
  45.                          
  46.                         return Base64.encodeByteArray(ByteData);
  47.                  }      
  48.                  
  49.                  public function ClientDecode(aData: String): String
  50.                  {
  51.                         var ByteData: ByteArray = new ByteArray();
  52.                         
  53.                         ByteData = Base64.decodeToByteArray(aData);
  54.                         ByteData.position = 0;
  55.                         
  56.                         if (this.ClientSecured == true)
  57.                          {
  58.                                fscommand("log", "ClientDecode~ClientSecured");
  59.                                ByteData = this.ClientOutgoingSalsa.decode(ByteData);
  60.                                ByteData.position = 0;
  61.                          }
  62.                          
  63.                         if (this.ClientEncrypted == true)
  64.                          {
  65.                                fscommand("log", "ClientDecode~ClientEncrypted");
  66.                                ClientOutgoingARC.decrypt(ByteData);
  67.                                ByteData.position = 0;
  68.                          }
  69.                          
  70.                         return Base64.encodeByteArray(ByteData);
  71.                  }
  72.                  
  73.                  public function ServerDecode(aData: String): String
  74.                  {
  75.                         var ByteData: ByteArray = new ByteArray();
  76.                         
  77.                         ByteData = Base64.decodeToByteArray(aData);
  78.                         ByteData.position = 0;
  79.                         
  80.                         if (this.ServerSecured == true)
  81.                          {
  82.                                fscommand("log", "ServerDecode~ServerSecured");
  83.                                ByteData = this.ServerOutgoingSalsa.decode(ByteData);
  84.                                ByteData.position = 0;
  85.                          }
  86.                          
  87.                         if (this.ServerEncrypted == true)
  88.                          {
  89.                                fscommand("log", "ServerDecode~ServerSecured");
  90.                                ServerOutgoingARC.decrypt(ByteData);
  91.                                ByteData.position = 0;
  92.                          }          
  93.                          
  94.                         return Base64.encodeByteArray(ByteData);
  95.                  }


Тут используется 4 объекта подгружаемой SWF, к этому я пришел в тестах буквально полчаса назад. Сперва был 1 экземпляр. Потом решил сделать 2 - на сервер и клиент. Потом 4...

Проблема:
От клиента зашифрованный пакет я прочитать могу без проблем.

Code:
  1. FromClient
  2. buffer := "F2 1D F5 89 36 63 B8 88 79 D7 9D 72 E6 CE DE E2 DE A2 2C 45 41 40 39 D3 EC B8 0F CD 81 63 5A 14 97 67 95 20 85 D8 19 6A B1 10 D0 4E 32 87 71 22 C4 A1 5A A6 EF 65 FD 24 FA F4 22 5A 2D A3 EF F4 F1 5B 88 00 6F 8F D8 3D 30"
  3. С этого момента, пакеты идут защищенными... 
  4. Настройка системы... 
  5. Готово!
  6. Проверка системы... 
  7. length := "73"
  8. Reading Packet...
  9. pktSize := "71"
  10. pktDataSize := "71"
  11. Handle Packet...
  12. ID := "23373"
  13. Get Handler...
  14. Have := "True"
  15. Handler := "TicDarkOrbitHandlerHandshakeRequest"
  16. HandshakeRequest
  17. Size: 65
  18. length: 65
  19. EOF: True
  20. Position := "74"
  21. End := "True"
  22. buffer := "F2 1D F5 89 36 63 B8 88 79 D7 9D 72 E6 CE DE E2 DE A2 2C 45 41 40 39 D3 EC B8 0F CD 81 63 5A 14 97 67 95 20 85 D8 19


От сервера - не читаются!

Code:
  1. FromServer
  2. buffer := "F2 1D E0 B0 36 63 B8 88 79 D7 39 53 C9 B9 D1 D6 DD 34 A6 EF A6 A3 B3 9C 5D 43 75 56 87 24 DE 4A E5 14 C4 4E 5E CE 11 5C AB ED 5A 02 7F C0 01 ED 11 02 1D E1 31 56 21 D3 0B C2 14 E1 DF 14 65 AB BD C5 5B 72 73 E9 98 81 29"
  3. dec_buffer := "24 13 8A 8A B1 0D 79 54 57 3F 9C E3 3A 76 43 57 E4 A7 DD 51 61 C6 80 55 ED E7 51 BF 1B 64 16 AC 66 9F CA 9F 2D BC 23 B1 C1 B5 60 F4 F8 BA 50 2A 1E D4 56 87 7E 2A B0 47 58 3F 70 AB 63 2A 32 EE FA FD 9B 7A 56 0E 65 60 BE"
  4. length := "73"
  5. Reading Packet...
  6. pktSize := "9235"
  7. pktDataSize := "71"
  8. Handle Packet...
  9. ID := "35466"
  10. Get Handler...
  11. Have := "False"
  12. Position := "9238"
  13. End := "True"
  14. buffer := "D6 49 E0 B0 36 63 B8 88 79 D7 39 53 C9 B9 D1 D6 DD 34 A6 EF A6 A3 B3 9C 5D 43 75 56 87 24 DE 4A E5 14 C4 4E 5E CE 11 5C AB ED 5A


Да и шифруются потом соответственно в совсем другой массив байт. В чем может быть дело?
По поводу ошибочности вызовов нужных функций - все проверил несколько раз.

Есть у меня SWF-лог. Там находится следующее:
Code:
  1. ClientDecode~ClientSecured
  2. ServerEncode~ServerSecured
  3. ServerDecode~ServerSecured
  4. ClientEncode~ClientSecured


Что доказывает правильность вызова.

7c52_23.02.2013_EXELAB.rU.tgz - 17C5D000 - 11.swf




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 23 февраля 2013 23:45
· Личное сообщение · #2

Вопрос решен, я полагаю

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.


| Сообщение посчитали полезным: virus_forever

Ранг: 11.4 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 23 февраля 2013 23:46
· Личное сообщение · #3

Вопрос решен)
Спасибо 4kusNick за помощь!




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 23 февраля 2013 23:54
· Личное сообщение · #4

решение озвучите для потомства?

-----
[nice coder and reverser]


| Сообщение посчитали полезным: SReg, _ruzmaz_

Ранг: 11.4 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 24 февраля 2013 00:44
· Личное сообщение · #5

Дело было в том, что у меня создавался 1 (оказывается) экземпляр подгружаемой флешки.

Я сделал 2 загрузчика разных, прогрузил 2 совершенно разных экземпляра флешки. Одной расшифровывал\шифровал данные с клиента, другой - с сервера.

Все оказалось просто)


 eXeL@B —› Крэки, обсуждения —› Salsa20 - не выходит раскодировать ответ от сервера...
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати