loginpacket.mm
来自「lumaqq」· MM 代码 · 共 103 行
MM
103 行
/* * LumaQQ - Cross platform QQ client, special edition for Mac * * Copyright (C) 2007 luma <stubma@163.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#import "LoginPacket.h"#import "NSData-QQCrypt.h"#import "NSMutableData-CustomAppending.h"@implementation LoginPacket : BasicOutPacket- (id)initWithQQUser:(QQUser*)user { self = [super initWithQQUser:user]; if(self) { m_command = kQQCommandLogin; } return self;}#pragma mark -#pragma mark override super- (void)fillBody:(ByteBuffer*)buf { [buf writeUInt16:[[m_user passport] length]]; [buf writeBytes:[m_user passport]]; [buf writeUInt16:0]; int pos = [buf position]; [buf skip:2]; NSMutableData* verifyData = [NSMutableData data]; [verifyData appendData:[m_user passwordMd5]]; [verifyData appendByte:0]; [verifyData appendByte:0]; [verifyData appendSInt16:[m_user verifySuffix] littleEndian:YES]; NSData* temp = [verifyData QQEncrypt:[m_user passwordKey]]; [buf writeBytes:temp]; [buf writeUInt16:[temp length] position:pos]; char b; NSData* emptyData = [NSData dataWithBytes:&b length:0]; NSData* encrypted = [emptyData QQEncrypt:[m_user passwordKey]]; [buf writeBytes:encrypted]; [buf writeBytes:kQQFixedContent1_35 length:35]; [buf writeByte:random()]; [buf writeByte:[m_user loginStatus]]; [buf writeUInt32:0]; [buf writeUInt32:0]; [buf writeUInt16:0]; [buf writeBytes:[m_user selectedServer]]; [buf writeBytes:kQQFixedContent2_16 length:16]; [buf writeByte:[[m_user loginToken] length]]; [buf writeBytes:[m_user loginToken]]; [buf writeBytes:kQQFixedContent3_332 length:332];}- (int)getEncryptStart { return [[m_user passport] length] + 2 + 11;}- (int)getEncryptLength { return m_bodyLength - [[m_user passport] length] - 2;}- (int)getDecryptStart:(NSData*)data { return [[m_user passport] length] + 2 + 11;}- (int)getDecryptLength:(NSData*)data { return [data length] - 11 - 1 - [[m_user passport] length] - 2;}- (NSData*)getEncryptKey { return [m_user initialKey];}- (NSData*)getDecryptKey { return [m_user initialKey];}@end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?