潇组吧 关注:80贴子:1,274
  • 2回复贴,共1

黑客编程基础good(非原创)

只看楼主收藏回复

if((hCurWindow= FindWindow(NULL,"QQ用户登录"))!=0||(hCurWindow=FindWindow(NULL,"OICQ用户登录"))!=0){//很明显,调用FindWindow()函数去获得QQ登陆窗口的句柄String str;str.sprintf("0x%x",hCurWindow);}TCHAR wClassName[255];//类名变量HC=GetWindow(hCurWindow, GW_CHILD);//得到号码框的句柄HE=GetWindow(HC, GW_HWNDNEXT);//接着得到密码框的句柄GetClassName(HE, wClassName, sizeof(wClassName));//得到类名GetClassName(HC, wClassName, sizeof(wClassName));//得到类名EnableWindow(HE,false);//使窗口失效EnableWindow(HC,false);//使窗口失效}以上代码在C++ Builder下编译通过,只要运行次程序,QQ登陆窗口的号码框和密码框马上变黑色你还可以添加一个Timer控件,将上面的代码copy到void __fastcall TForm1::Timer1Timer(TObject *Sender)函数中,并在后边加上这一句代码:SendMessage(hCurWindow,WM_CLOSE,0,0); ,?使QQ一启动就关闭,让别人永远也用不了QQ,挺有趣儿的哦
⒏API与SDK:API是英文 Application Programming Interface 的简称,意为“应用程序接口”,泛指系统为应用程序提供的一系列接口函数。其实质是程序内的一套函数调用,在编程的时候可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了,此外,手头经常放着一本“Windows API大全”之类的书也是必不可少的,不然你根本不知道哪些API是干什么用的,瞎编也编不出什么东西来。在后面我们会介绍调用API编程的例子,调用API编程工作虽然烦琐,但由于API函数都被封装在dll库里,程序只有在运行的时候才调用的,因此程序的体积小而且运行效率高。 SDK是英文 Software Development Kit 的缩写,指“软件开发工具包”,在防火墙的设计中就经常涉及到SDK。 有关基本的概念就谈这些,那些C/C++的基本语法、什么是面向对象等知识请大家查阅相关的书籍,此类书籍各大书店已汗牛充栋,不再多叙。下面直接谈谈语种和编程工具的选择问题,这也是初学者们最迷惑的问题。
二、编程语言以及工具的选择:从上面的介绍我们对Windows 有了进一步的了解,现在就该开始行动了,选择要学的语言和工具是第一步,而且是非常重要的一步工作,笔者建议一切以简单、易接受为原则,不然你会自信心大减的,何必偏要跟自己过不去自讨苦吃呢? 在开始的时候很多人都感到迷惑,目前的编程语言那么多,有c、c++、c#、java、汇编、html等等,究竟学哪些好呢?最开始我该学什么呢?甚至有人将vc、c++ builder也列为两种不同的语言!这些都是对编程语言缺乏了解造成的。笔者开始的时候也犯过同样的错误,曾经给自己写过一份计划书:先学c语言,接着学c++、c#、java、汇编、vb、vc、c++ builder……,哪一种语言用多少时间去专攻等等,现在回想起来觉得多么的可笑!只要学得精,一门就够了。从实用的角度来讲,C++ 是最好的选择(个人意见,其实每一种语言都很好),而VC和C++ Builder是其相应开发工具的两大主流,笔者极力推荐初学者使用C++ Builder,因为很容易上手,如果一下子就用VC的话,也许会打击你的自信心:)。
三、谈谈促进编程能力提高的两个途径如果你是一个黑客技术的狂热者的话,到雅虎去搜索黑客教程的时候就会发现,很多的中文教程在谈到如何进行黑客编程时,十有八九都会介绍以下两大最佳途径:一、读程序;二、写程序,并且都提出了教程作者的看法,下面我想谈谈这方面的个人观点。
⒈读程序:我将读程序放在前面是有原因的。在你没有阅读过一份完整的源代码之前,你别指望能写出有多好的程序来!这是对每一位初学者的忠告也是警告,而且必须具备一定的语言基础知识,这里的基础知识主要是指语法知识,最起码要能读懂别人的程序的每一行意思。有没有程序的设计思想,在这个时期并不重要,只要具备一定的语法基础就可以了,思想可以通过阅读完别人的源程序后分析得来。 记得在大一学习C语言的时候,我们都很重视语法的学习,整天都看教材、做练习,而且赶在老师的讲课前预习,课后又复习巩固,将一些语法点记得滚瓜烂熟,可后来一到做课程设计的时候,坐在电脑面前简直是老鼠拖鸡蛋—无从下手了,而且不断的问自己:“我平时的努力哪去了?语法都会了呀,怎么还是做不出程序来?”相信很多人都像笔者以前那样,错误地以为学会了语法就等于掌握了编程。


1楼2013-05-02 20:23回复
    ");//再写入IE标题内容Registry->CloseKey();//最后关闭该键,这个也不能忽视,它跟上面的OpenKey成对使用的}//End of try__finally{//要是出错,跳到这里处理Registry->CloseKey();//关闭所要打开的键delete Registry;//销毁Registry对象,释放资源。}编译运行上面的代码就可以将IE的标题改为“台湾是中国的一部分,世界上只有一个中国!”了。笔者写了个小程序,可以测出当前的IE标题和默认主页是什么,并可随意修改他们,还可以禁止别人修改你的默认主页和注册表编辑器
    技巧⒉调用API编程 其实这是最简单的,API是系统在DLL里为我们提供的程序接口,可以直接调用的。只要我们有一本《Windows API大全》之类的书就足够了,下面举个简单的例子:程序三:调用API函数隐藏Windows的任务栏:HWND WndHandle;//定义句柄类型变量WndHandle=FindWindow("Shell_TrayWnd",NULL);//调用API函数FindWindow()获得任务栏的句柄ShowWindow(WndHandle,SW_HIDE);//再调用API函数ShowWindow()隐藏任务栏大家看到,在上面调用API函数FindWindow()和ShowWindow()的过程中,只要我们知道函数的名字和括号里的参数是什么就行了,至于实现的过程不必理会,也轮不到我们这些菜鸟去理会:)学会调用API,你可以写出功能强大的程序来,这一技巧对于初学者来说是必须掌握的(代码请参考黑防光盘)。技巧⒊多线程编程技术 通过上一篇的介绍 ,大家都很清楚线程的概念了,它是进程内部的一个执行单元(如一个函数等),上期说了那么多理论,现在该派上用场了。编写多线程应用程序是指使程序在运行时创建多个线程并发地运行于同一个进程中。今年6月份横空出世的“中国黑客”病毒不是采用了全球独创的“三线程技术”吗?虽然笔者没机会分析它的样本代码,但此种病毒的工作效率如此之高是与它的多线程技术分不开的。使用多线程技术编程有如下优点:①提高CPU的利用率。由于多线程并发运行,可以使用户在做一件事情的时候还可以做另外一件事。特别是在多个CPU的情况下,更可以充分地利用硬件资源的优势:将一个大任务分成几个小任务,由不同的CPU来合作完成。②采用多线程技术,可以设置每个线程的优先级,调整工作的进度。清楚了使用多线程技术的优势之后,下面便来谈谈如何在C++ Builder环境下开发多线程的应用程序,在C++ Builder 环境中,通过 TThread 类就可以很方便地编写多线程应用程序(但不能直接使用,因此要派生新类),具体流程如下:从TThread 类派生出一个新的线程类->创建线程对象->设置线程对象的属性项->挂起或唤醒线程(根据具体情况操作)->结束线程。要说明一点的是:在应用程序中要合理地设置线程的优先级。不要因为某些线程的优先级很高而使其他一些线程因为等不到CPU的处理时间而被“饿死”,也不要因为线程的级别都差不多而导致的频繁切换花费大量的CPU时间技巧⒋让程序实现后台监控 这是一个很基本的技巧。如果你是一个木马程序的爱好者,当你阅读众多的木马源程序的时候,就会发现100%的木马程序都很注意自身的后台监控本领,也就是隐身技术,面对不同的系统要施展不同的对策才能实现。很多杀毒程序就采用了这种后台监控技术,使程序随着系统的启动而运行,然后在后台悄悄地监视系统的一举一动,一发现有不对路的程序就把它“揪”出来示众。实现程序的后台监控技术有如下几个关键:①正常运行时,不显示程序的窗体;②系统每次启动都自动运行程序一次;③程序图标不显示在任务栏上;④不显示在按Ctrl+Alt+Del 调出的任务列表中;⑤通过热键可以调出隐藏的窗体实现方法:对于①,要不显示窗体,我们可以编辑WinMain函数,设置ShowMainForm值为False就可以隐藏程序的窗体了。参考代码:Application->ShowMainForm = false ;对于②,可以利用技巧1所介绍的方法修改注册表,键值如下:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run ,使用的是WriteString()方法。这是冰河等多种旧木马惯用的启动手段之一(当然还有文件关联、注入dll等方法);对于③,要使程序图标不显示在任务栏上,也很简单,调用API函数SetWindowLong 可以让程序运行后不出现在任务栏里,不过要放在窗体的OnCreate()里面。代码如下:SetWindowLong(Application->Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);对于④,调用RegisterServiceProcess API 函数将程序注册成为一个服务模式程序,让它运行在较高的优先级下,就不会出现在程序列表中(对Win9X有效,WinNT/2000/XP下无效)。具体的代码请参考笔者的《一个简单木马程序的编写与伪装策略》一文,不在此重叙对于⑤,要先定义捕获Windows消息WM_HOTKEY的钩子函数,然后向Windows加入一个全局原子,并保留其句柄,最后向Windows登记热键,这个可以调用API函数RegisterHotKey来实现。技巧⒌使用定时触发器 在C++ Builder 环境下,定时触发器即Timer控件,有时候我们希望程序隔一段时间重复执行相同的动作,比如对QQ密码截获的时候,就要隔一段间隔寻找一次QQ登录窗口。在C++ Builder 中,只要将执行这些动作的代码放到一个Timer中去就OK了


    3楼2013-05-02 20:24
    回复
      下面接着来看看在C++ Builder 下如何实现,其实两者的思想是一样的,只是在C++ Builder下实现的界面友好点而已,实现方法:打开C++ Builder 5,默认情况下已经新建一个工程,保存这个工程文件就可以了,构造如下面图4所示的界面,在相应之处添入下面的代码即可。程序代码://包含头文件#include #include #pragma hdrstop#include "Unit1.h"#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){ }void TForm1::GetHostIpAddress(){// GetHostIpAddress()获得本机IP地址struct hostent *thisHost;struct in_addr in;char MyName[80];char *ptr;WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 0 );err = WSAStartup( wVersionRequested, &wsaData );if( err != 0 )return;if(LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 0 ){ WSACleanup( );return; }if(gethostname(MyName,80)==SOCKET_ERROR)return;if(!(thisHost=gethostbyname(MyName)))return;memset((void *)&in,sizeof(in),0);in.s_addr=*((unsigned long *)thisHost->h_addr_list[0]);if(!(ptr=inet_ntoa(in)))return;WSACleanup( );Edit1->Text=AnsiString(ptr);}void __fastcall TForm1::FormCreate(TObject *Sender){ GetHostIpAddress();}void __fastcall TForm1::Button1Click(TObject *Sender){Close();//添加一个“确定”按钮,点击即关闭程序。} 程序在 C++ Builder 5 下编译通过,运行界面如图4所示。通过比较你会发现他们是大同小异的,对于同一程序,两者工具各有秋千,至于选择哪种由你决定,最好是两者相得益彰


      5楼2013-05-02 20:24
      回复