Netexpert FAQ 网络分析专家学习建议入口 @netexpert成员申请指南
网络分析时代 netexpert积分规则的说明 Netis招贤纳士(2008年11月22日更新)
发新话题
打印

让Skype直接生成明文debug-yyyymmdd-hhmm.trace.txt

让Skype直接生成明文debug-yyyymmdd-hhmm.trace.txt

标题: 让Skype直接生成明文debug-yyyymmdd-hhmm.trace.txt

创建: 2006-10-27 14:59
链接: [url]http://www.opencjk.org/~scz/misc/200610271459.txt[/url]

我们修理的Skype.exe属性如下:

--------------------------------------------------------------------------
文件版本    : 2.5.0.91
产品版本    : 2.5
BuildTime   : 22.05.2006 13:06:54
文件大小    : 20,440,616字节
语言        : 英语(美国)
--------------------------------------------------------------------------

Skype在生成debug-yyyymmdd-hhmm.log的同时生成debug-yyyymmdd-hhmm.trace.txt,
记录语音引擎相关信息,用了简单的异或加密。

--------------------------------------------------------------------------
00963D78                         loc_963D78:
00963D78 8B 54 24 18                 mov edx, [esp+14h+in]
00963D7C
00963D7C                         loc_963D7C:
00963D7C 8B 7C 24 10                 mov edi, [esp+14h+var_4]
00963D80 8A 0C 2A                    mov cl, [edx+ebp]                   ; in[i]
00963D83 8B 47 28                    mov eax, [edi+28h]                  ; x,初值为0
00963D86 8A 04 45 F8 22 B7 00        mov al, byte ptr xortable[eax*2]    ; xortable[x]
00963D8D 32 C1                       xor al, cl                          ; xortable[x] ^ in[i]
00963D8F 3C 1F                       cmp al, 1Fh                         ; if ( ( xortable[x] ^ in[i] ) > 31 )
00963D91 7F 0E                       jg  short loc_963DA1
00963D93 C6 04 1E 01                 mov byte ptr [esi+ebx], 1           ; out[o] = 1
00963D97 B1 7F                       mov cl, 7Fh
00963D99 46                          inc esi                             ; o++
00963D9A 2A C8                       sub cl, al                          ; 127 - xortable[x] ^ in[i]
00963D9C 88 0C 1E                    mov [esi+ebx], cl                   ; out[o] = 127 - xortable[x] ^ in[i]
00963D9F EB 1C                       jmp short loc_963DBD
00963DA1
00963DA1                         loc_963DA1:                             ; if ( 127 != ( xortable[x] ^ in[i] ) )
00963DA1 3C 7F                       cmp al, 7Fh
00963DA3 75 0D                       jnz short loc_963DB2
00963DA5 C6 04 1E 02                 mov byte ptr [esi+ebx], 2           ; out[o] = 2
00963DA9 8A 14 2A                    mov dl, [edx+ebp]                   ; in[i]
00963DAC 46                          inc esi                             ; o++
00963DAD 88 14 1E                    mov [esi+ebx], dl                   ; out[o] = in[i]
00963DB0 EB 0B                       jmp short loc_963DBD
00963DB2
00963DB2                         loc_963DB2:                             ; if ( ( xortable[x] ^ in[i] ) < 32 )
00963DB2 3C 20                       cmp al, 20h
00963DB4 7C 3C                       jl  short loc_963DF2
00963DB6 3C 7E                       cmp al, 7Eh                         ; if ( ( xortable[x] ^ in[i] ) > 126 )
00963DB8 7F 38                       jg  short loc_963DF2
00963DBA 88 04 1E                    mov [esi+ebx], al                   ; out[o] = xortable[x] ^ in[i]
00963DBD
00963DBD                         loc_963DBD:                             ; x
00963DBD 8B 47 28                    mov eax, [edi+28h]
00963DC0 46                          inc esi                             ; o++
00963DC1 40                          inc eax                             ; x++
00963DC2 B9 1F 00 00 00              mov ecx, 1Fh
00963DC7 99                          cdq
00963DC8 F7 F9                       idiv ecx                            ; x / 31
00963DCA 8B 44 24 10                 mov eax, [esp+14h+var_4]
00963DCE 8B 7C 24 18                 mov edi, [esp+14h+in]
00963DD2 83 C9 FF                    or  ecx, 0FFFFFFFFh
00963DD5 45                          inc ebp                             ; i++
00963DD6 89 50 28                    mov [eax+28h], edx                  ; x = x % 31
00963DD9 33 C0                       xor eax, eax
00963DDB F2 AE                       repne scasb
00963DDD F7 D1                       not ecx
00963DDF 49                          dec ecx                             ; 不包括结尾的NUL字符
00963DE0 3B E9                       cmp ebp, ecx                        ; if ( i < strlen( in ) )
00963DE2 7C 94                       jl  short loc_963D78
--------------------------------------------------------------------------

xortable定义如下:

--------------------------------------------------------------------------
00B722F8  11 00 64 00 63 00 0B 00 03 00 38 00 57 00 56 00
00B72308  2C 00 58 00 77 00 65 00 11 00 45 00 39 00 41 00
00B72318  6F 00 4D 00 50 00 11 00 01 00 3B 00 63 00 7A 00
00B72328  28 00 49 00 76 00 34 00 47 00 60 00 3F 00
--------------------------------------------------------------------------

注意汇编代码对xortable的使用,这是一个包含31个元素的数组,每个元素占两字节,
但实际只用了第一个字节。

用C风格的伪代码描述加密过程:

--------------------------------------------------------------------------
/*
* 全部有符号
*/
int     i,
        o,
        x,
        t,
        len;
char   *in,
       *out;
char    xortable[31]    =
{
0x11, 0x64, 0x63, 0x0B, 0x03, 0x38, 0x57, 0x56,
0x2C, 0x58, 0x77, 0x65, 0x11, 0x45, 0x39, 0x41,
0x6F, 0x4D, 0x50, 0x11, 0x01, 0x3B, 0x63, 0x7A,
0x28, 0x49, 0x76, 0x34, 0x47, 0x60, 0x3F
};

/*
* 这是一个Skype进程范围内的全局变量
*/
x   = 0;
len = strlen( in );
for ( i = 0, o = 0; i < len; i++, o++ )
{
    t   = xortable[x] ^ in[i];
    /*
     * [0x00,0x1F]及[0x80,0xFF]
     */
    if ( t <= 0x1F )
    {
        out[o++]    = 1;
        out[o]      = 127 - t;
    }
    else if ( 0x7F == t )
    {
        out[o++]    = 2;
        out[o]      = in[i];
    }
    /*
     * 汇编代码中有两个永远为假的比较,属于垃圾判断。
     */
    else
    {
        out[o]      = t;
    }
    x   = ( x + 1 ) % 31;
}  /* end of for */
--------------------------------------------------------------------------

debug-yyyymmdd-hhmm.trace.txt原始内容如下:

--------------------------------------------------------------------------
Date: 十月 26, 2006\r\n
Time: 20:58:32\r\n
\r\n
<Encrypted Data>\r\n
... ...
<Encrypted Data>\r\n
--------------------------------------------------------------------------

可以离线解密,也可以直接修改二进制文件:

--------------------------------------------------------------------------
00963D8D      32C1          |xor     al, cl
00963D8F      3C 1F         |cmp     al, 1F
00963D91      7F 0E         |jg      short 00963DA1
--------------------------------------------------------------------------
00963D8D      8AC1          |mov     al, cl
00963D8F      3C 1F         |cmp     al, 1F
00963D91      EB 27         |jmp     short 00963DBA
--------------------------------------------------------------------------

这样处理后的Skype_new.exe可以并且只能生成明文debug-yyyymmdd-hhmm.trace.txt。
说了世上一无牵挂为何有悲喜
说了朋友相交如水为何重别离
说了少年笑看将来为何常回忆
说了青春一去无悔为何还哭泣

TOP

厉害,有没有已经做好的skype_new.exe?

TOP

发新话题
版块跳转