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 + -
显示快捷键?