тринеруем мозги и логику

Discussion in 'Болталка' started by mazaxaka, 1 Dec 2012.

  1. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    в общем с Apeckou уже 2 день мучаемся.



    снифнули приложение андроида.но не понятно как шлются данные

    вот вылажую то что имеется,
    кто возможно знает, или давайте думать вместе потренеруем логику

    в етих даных идет , имя\ДР\мыло\ПАс\пароль , нужно только понять как генерировать етот код. и что вообще внутри

    вроде base64 но при декоде мусор
    вот еще 1 запрос
    запросы разные. как видно в начале кусок кода повторяется всегда W6blXWXOgI5XeLens2ful

    дальше декомпелил приложуху. стал рытся в коде. но не понял подчти нечего. что нашел ето
    пробовал побайтово декодить ето бас64 , но работает не полностью после 8 байта нужно брать не следующие 2 , а те 2 только либо первый и последний с пребедущего или 2 и 1 со следующего. правда получилось всего 50% но и там мусор ето не то что шлется.

    вот еще нашел в коде.

    Вот еще тут уже всплывает AES и как я понял ключ к нему
    Вот еше тоже ключи какието
    Code:
    .field public static final AES_ALGORYTHM:Ljava/lang/String; = "AES"
    field public static final AES_ALGORYTHM_SPEC:Ljava/lang/String; = "AES/ECB/ZeroBytePadding"
    .field public static final AES_CRYPT_KEY:Ljava/lang/String; = "Ua3!shYk#hMCxoEn"
    .field public static final BALANCE_PRODUCT_LIST_ID:I = 0x4b5
    .field public static final BILLING_PUB_KEY:Ljava/lang/String; = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsdetyN99gwSb4WSd5HXrgMYLG6sCSCkABbR6u+yaioYyywYTR4SA4srxAUAO2jo8oOsRMw3/O4502BPF+q+DbRL2wUtYYSiyJQJ0BWWVrLKVECNVHL/cbH5MViM8gzEtLciNnlR6KW2PhlTqTKh88eYaI8gRxHiyta5dKOIoryS4dO3vJDyY+Q8o3f9EAfBiiDEFqM56sI6ctKwzKWEdlYhCjCQ48hAVRj6xcKMzXoXr8J9DE6R6e4F7PGD7rLD9RPkCM5j0L4hygy+D4tLUyNEkp6FpJK/S4Ifg2IcSrnWL+6aGRBo4vgnAMDwjDL74k6z6onVrqKUFLljzZWuzpwIDAQAB"
    .field public static final FLURRY_CODE:Ljava/lang/String; = "H5TVBXYXPDJG4RM39M54"
    .field public static final MD5_SALT:Ljava/lang/String; = "8Ub_!dI32mD-fd1$"
    .field public static final PUSHLINK_CODE:Ljava/lang/String; = "b6ra3ri2lsrge838"
    .field public static final TAPJOY_APP_ID:Ljava/lang/String; = "72383039-ac60-4cf8-b6c2-0c3d1dea8ae2"
    .field public static final TAPJOY_SECRET_KEY:Ljava/lang/String; = "LTvITTEEn1vfOoB88UX1"
    .field public static final VIP_PRODUCT_LIST_ID:I = 0x3e9
     
  2. Apeckou

    Apeckou Elder - Старейшина

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    методом телепатической связи было установлено, что юзается алгоритм AES
    Но пока непонятно,

    либо

    AES/CBC/PKCS5Padding

    либо

    AES/ECB/ZeroBytePadding


    кто может расшифровать плз отпишитесь!

    ключ Ua3!shYk#hMCxoEn

    jYv0x3URkZvx8Xrx7E13APxQbDLyXJursEQzfWMMUEzbhbrgDRdmxaQHoQudHJFx1UdWDmcXUxggtpXn04QceUcKZufkX7ZlEOyGXwMtVpEoozqe2LoXaGVj4UtjdBh6mbeg3%2BaLAAbBAFrvB7tnCiwQ%2BIB9O4uULS0trIJ%2BFKs%3D

    у меня кракозябры получаются
     
  3. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Инициализирующий вектор ещё нужен, тогда можно расшифровать. Если в начале кусок одинаковый, то скорее всего после AES строка никак не изменяется.
     
    #3 randman, 1 Dec 2012
    Last edited: 1 Dec 2012
  4. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    где вектор взять? как он выглядит примерно?

    верно там в начале идет код W6blXWXOgI5XeLens2ful он повторяется дальше другой.


    и еще было найдено
    Code:
    "net.robotmedia.billing.utils.AESObfuscator-1|"
    и еще смущает
    джаву я не знаю. но догадываюсь что ето не обычный бас64. или я ошибаюсь?
     
  5. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Что-то я запутался. Расшифровывается очень легко, для ECB не нужен вектор. Это обычный base64. :) Что тут мучится то :D
    Недавно в своем проекте использовал подобную технологию, правда там шифр получше, ключ бинарный, и данные шифруются 2 раза, используя перевернутую строку первого результата + код с ключами недоступен и ещё одна функция пытается запутать взломщика.
    PHP:
    $a = new AES_Encryption('Ua3!shYk#hMCxoEn');
    echo 
    $a->decrypt(base64_decode('W6blXWXOgI5XeLens2fulIJynxKBxo8oTD+XH6xHN9oDlLzHU2pvdjsL1DW5GCDI6qu+AvAOvrTVMajjKMXq/gOS26MB2jF58j2cEPBkqkncZsG5gE4K5nNBRYr0rZBlWJlZ/Dw1vDADkCdAaSCjSO9dP1Gy/zKhaS2BUUs3xLQ='));
    class 
    AES_Encryption
    {
        private 
    $key$initVector$mode$cipher$encryption null;
        private 
    $allowed_bits = array(128192256);
        private 
    $allowed_modes = array('ecb''cfb''cbc''nofb''ofb');
        private 
    $vector_modes = array('cbc','cfb','ofb');
        private 
    $allowed_paddings = array(
            
    'ANSI_X.923' => 'ANSI_X923',
            
    'ISO_10126'     => 'ISO_10126',
            
    'PKCS7'         => 'PKCS7',
            
    'BIT'         => 'BIT',
            
    'ZERO'         => 'ZERO',
        );
        
        private 
    $padCrypt_url   'http://dev.strategystar.net/2011/10/php-cryptography-padding-ansi-x-923-iso-10126-pkcs7-bit-zero/';
        private 
    $aesEncrypt_url 'http://dev.strategystar.net/';
        
        
    /***
         * String $key        = Your secret key that you will use to encrypt/decrypt
         * String $initVector = Your secret vector that you will use to encrypt/decrypt if using CBC, CFB, OFB, or a STREAM algorhitm that requires an IV
         * String $padding    = The padding method you want to use. The default is ZERO (aka NULL byte) [ANSI_X.923,ISO_10126,PKCS7,BIT,ZERO]
         * String $mode       = The encryption mode you want to use. The default is cbc [ecb,cfb,cbc,stream,nofb,ofb]
         **/
        
    public function __construct($key$initVector=''$padding='ZERO'$mode='ecb')
        {
            
    $mode strtolower($mode);
            
    $padding strtoupper($padding);
            
            if(!
    class_exists('padCrypt'))
            {
                throw new 
    Exception('The padCrypt class must be loaded for AES_Encryption to work: '.$padCrypt_url);
            }
            
            if(!
    function_exists('mcrypt_module_open'))
            {
                throw new 
    Exception('The mcrypt extension must be loaded.');
            }
            
            if(
    strlen($initVector) != 16 && in_array($mode$this->vector_modes))
            {
                throw new 
    Exception('The $initVector is supposed to be 16 bytes in for CBC, CFB, NOFB, and OFB modes.');
            }
            elseif(!
    in_array($mode$this->vector_modes) && !empty($initVector))
            {
                throw new 
    Exception('The specified encryption mode does not use an initialization vector. You should pass an empty string, zero, FALSE, or NULL.');
            }
            
            
    $this->encryption strlen($key)*8;

            if(!
    in_array($this->encryption$this->allowed_bits))
            {
                throw new 
    Exception('The $key must be either 16, 24, or 32 bytes in length for 128, 192, and 256 bit encryption respectively.');
            }
            
            
    $this->key $key;
            
    $this->initVector $initVector;
            
            if(!
    in_array($mode$this->allowed_modes))
            {
                throw new 
    Exception('The $mode must be one of the following: '.implode(', '$this->allowed_modes));
            }

            if(!
    array_key_exists($padding$this->allowed_paddings))
            {
                throw new 
    Exception('The $padding must be one of the following: '.implode(', '$this->allowed_paddings));
            }
            
            
    $this->mode $mode;
            
    $this->padding $padding;
            
    $this->cipher mcrypt_module_open('rijndael-128'''$this->mode'');
            
    $this->block_size mcrypt_get_block_size('rijndael-128'$this->mode);
        }
        
        
    /***
         * String $text = The text that you want to encrypt
         **/
        
    public function encrypt($text)
        {
            
    mcrypt_generic_init($this->cipher$this->key$this->initVector);
            
    $encrypted_text mcrypt_generic($this->cipher$this->pad($text$this->block_size));
            
    mcrypt_generic_deinit($this->cipher);
            return 
    $encrypted_text;
        }
        
        
    /***
         * String $text = The text that you want to decrypt
         **/
        
    public function decrypt($text)
        {
            
    mcrypt_generic_init($this->cipher$this->key$this->initVector);
            
    $decrypted_text mdecrypt_generic($this->cipher$text);
            
    mcrypt_generic_deinit($this->cipher);
            return 
    $this->unpad($decrypted_text);
        }
        
        
    /***
         * Use this function to export the key, init_vector, padding, and mode
         * This information is necessary to later decrypt an encrypted message
         **/
        
    public function getConfiguration()
        {
            return array(
                
    'key'             => $this->key,
                
    'init_vector'   => $this->initVector,
                
    'padding'         => $this->padding,
                
    'mode'             => $this->mode,
                
    'encryption'    => $this->encryption ' Bit',
                
    'block_size'    => $this->block_size,
            );
        }
        
        private function 
    pad($text$block_size)
        {
            return 
    call_user_func_array(array('padCrypt''pad_'.$this->allowed_paddings[$this->padding]), array($text$block_size));
        }
        
        private function 
    unpad($text)
        {
            return 
    call_user_func_array(array('padCrypt''unpad_'.$this->allowed_paddings[$this->padding]), array($text));
        }
        
        public function 
    __destruct()
        {
            
    mcrypt_module_close($this->cipher);
        }
    }
    class 
    padCrypt
    {
        public static function 
    pad_ISO_10126($data$block_size)
        {
            
    $padding $block_size - (strlen($data) % $block_size);
            
            for(
    $x=1$x<$padding$x++)
            {
                
    mt_srand();
                
    $data .= chr(mt_rand(0,255));
            }
            
            return 
    $data chr($padding);
        }
        
        public static function 
    unpad_ISO_10126($data)
        {
            
    $length ord(substr($data, -1));
            return 
    substr($data0strlen($data)-$length);
        }
        
        public static function 
    pad_ANSI_X923($data$block_size)
        {
            
    $padding $block_size - (strlen($data) % $block_size);
            return 
    $data str_repeat(chr(0), $padding 1) . chr($padding);
        }
        
        public static function 
    unpad_ANSI_X923($data)
        {
            
    $length ord(substr($data, -1));
            
    $padding_position strlen($data) - $length;
            
    $padding substr($data$padding_position, -1);
            
            for(
    $x=0$x<$length$x++)
            {
                if(
    ord(substr($padding$x1)) != 0)
                {
                    return 
    $data;
                }
            }
            
            return 
    substr($data0$padding_position);
        }
        
        public static function 
    pad_PKCS7($data$block_size)
        {
            
    $padding $block_size - (strlen($data) % $block_size);
            
    $pattern chr($padding);        
            return 
    $data str_repeat($pattern$padding);
        }
        
        public static function 
    unpad_PKCS7($data)
        {
            
    $pattern substr($data, -1);
            
    $length ord($pattern);
            
    $padding str_repeat($pattern$length);
            
    $pattern_pos strlen($data) - $length;
            
            if(
    substr($data$pattern_pos) == $padding)
            {
                return 
    substr($data0$pattern_pos);
            }
            
            return 
    $data;
        }
        
        public static function 
    pad_BIT($data$block_size)
        {
            
    $length $block_size - (strlen($data) % $block_size) - 1;
            return 
    $data "\x80" str_repeat("\x00"$length);
        }
        
        public static function 
    unpad_BIT($data)
        {    
            if(
    substr(rtrim($data"\x00"), -1) == "\x80")
            {
                return 
    substr(rtrim($data"\x00"), 0, -1);
            }
            
            return 
    $data;
        }
        
        public static function 
    pad_ZERO($data$block_size)
        {
            
    $length $block_size - (strlen($data) % $block_size);
            return 
    $data str_repeat("\x00"$length);
        }
        
        public static function 
    unpad_ZERO($data)
        {
            return 
    rtrim($data"\x00");
        }
    }
    На выходе получаем:
    PHP:
    a=register&l=lolnaponobggm%40mail.ru&n=lol&g=m&bd=30&bm=10&by=2006&dt=1&d=d4dd7a5f-b2f3-363b-938a-0cf2791e1cb0&p=lol123
     
    #5 randman, 1 Dec 2012
    Last edited: 1 Dec 2012
  6. Apeckou

    Apeckou Elder - Старейшина

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    охренеть чувак, пасиба большущее!