Сейчас на форуме: asfa, Rio, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Подкиньте идей по написанию обфускатора к простому деобфускатору :)
Посл.ответ Сообщение

Ранг: 0.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 января 2013 20:15 · Поправил: phpprog
· Личное сообщение · #1

В программе пакет данных встречается следующей деобфускацией:
local3 - массив обфусцированных данных

var _local4 = [3, 4, 1, 4, 3, 2, 2, 3, 2, 1];
var _local6 = "";
var _local7 = 0;
var _local8 = 0;
var _local9 = 0;
for ( ; _local9 < _local3.length ; _local9++) {
var _local10 = Number(_local3[_local9]);
if ((_local9 % 5) != 0) {
_local6 = _local6 + String.fromCharCode((_local10 - _local4[(_local8++) % 10]) - _local7);
}
if (_local10 > 127) {
_local10 = _local10 - 128;
_local10 = -128 + _local10;
}
_local7 = _local10 % 20;
}
return(_local6);

Мне надо обфусцировать данные и подсовывать программе - которая деобфусцирует данные этим кодом.

Кручу-верчу, пока не получается, хотя на вид достаточно просто всё.




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 28 января 2013 21:22
· Личное сообщение · #2

Питон

Code:
  1. import random
  2.  
  3. _table = [3, 4, 1, 4, 3, 2, 2, 3, 2, 1]
  4. def unp(_l3):
  5.   _l6 = ''
  6.   _l7 = 0
  7.   _l8 = 0
  8.   for _l9 in xrange(len(_l3)):
  9.     _l10 = ord(_l3[_l9:_l9+1])
  10.     if _l9 % 5 != 0:
  11.        _l6 += chr((_l10 - _table[_l8 % 10]) - _l7)
  12.        _l8 += 1
  13.     if _l10 > 127:
  14.       _l10 -= 128
  15.     _l7 = _l10 % 20
  16.   return _l6
  17.  
  18.  
  19. _in = 'Hello World!'
  20. _out = ''
  21. key = 0
  22. idx_in = 0
  23. = random.randint(0, 127)
  24. _out += chr(X)
  25. key = (% 128) % 20
  26. idx = 1
  27.  
  28. while 1:
  29.    if idx % 5 != 0:
  30.       X = (ord(_in[idx_in:idx_in+1]) + _table[idx_in % 10]) + key
  31.       _out += chr(X)
  32.       idx_in += 1
  33.    else:
  34.       _out += chr(X)
  35.    idx += 1
  36.    key = (% 128) % 20
  37.    if idx_in == len(_in):
  38.       break
  39.  
  40. print _out
  41.  
  42. print unp(_out)


может криво, но вроде работает

вывод программы

9\u~vv„&kyyu~m.
Hello World!

L[t}uuѓ%jxxt}l-
Hello World!

-----
127.0.0.1, sweet 127.0.0.1


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

Ранг: 0.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 января 2013 21:33 · Поправил: phpprog
· Личное сообщение · #3

Зашёл удалить тему (т.к. нашёл у себя ошибку - при обфускации в переменную записывал текущее значение, а не предыдущее), а тут уже решение есть

Спасибо большое, что откликнулись

***

PHP
Code:
  1.        
  2.  function obfuscate($local3) {
  3.              $local4 = array(3, 4, 1, 4, 3, 2, 2, 3, 2, 1);
  4.              $local5 = 0;
  5.              $local6 = array();
  6.              $local7 = 0;
  7.              $local8 = 0;
  8.              $local9 = 0;
  9.               $= 0;
  10.               $= 0;
  11.           do { 
  12.                  $local10 = intval($local3[$i]);
  13.                 if (($% 5) != 0) {
  14.                     $buf = ($local10 + $local4[($local8++) % 10]) + $local7;
  15.                     $local6[] = $buf;
  16.                      ++$i;
  17.                         ++$j;
  18.                         if ($buf > 127) {
  19.                               $buf = $buf - 256;
  20.                         }
  21.                         $local7 = $buf % 20;
  22.                } else {
  23.                      $local7 = 0;
  24.                     $local6[] = 0;
  25.                      ++$j;
  26.                  }
  27.          } while( $< count($local3) );
  28.         return($local6);
  29. }





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 28 января 2013 21:59
· Личное сообщение · #4

Видимо, можно закрыть, раз решение нашлось.


 eXeL@B —› Вопросы новичков —› Подкиньте идей по написанию обфускатора к простому деобфускатору :)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати