You are on page 1of 2

677" 太原城 市职业 技术学 院学 报 总第 " 5 期

年 第・期6 #$%&’() $* +(,-%(’ .&/(’ 0$1(2,$’() 1$))343 89 & 6 77 " 期

基于 aJU6777 和 aJUY? 系 统 的 <== 隐 藏


陈小辉
C 淮阴师范学院> 江苏 淮阴 66@77!)
: 摘要 ; 文章叙述了通过创建远程线程的技术, 将 <== 从一个进程空间注入另一个进程空间 >
从而达到了隐藏 <== 的目的。
: 关键词 ; 动态链接库; 代码隐藏;远程线程
: 中图分类号 ; +?@! : 文献标识码 ; 8 : 文章编号 ; !"5@ A 77B"C 677" D 76 A 7!"! A 76

在当前的很多危险的木马控制软件中, 国外的木 9$2K3& 所指向的地址空间中。


马软件禽兽(E3(F2 6G 76)是一款功能非常强大的远程 a&,23?&$13FFX3^$&M(E 进程的句柄 ,9$2K3&> Z]_ ‘ ‘
控制工具。该木马软件具有非常好的隐蔽性, 其服务器 aJU<TaR ‘ ‘ FMF23^@6 ‘ ‘ 1IKL))6G L))Z> F,e3> U.== D \ F,e3
端在远程机器上运行后,会采用远程线程插入技术,将 为 字符 串 Z]_ ‘ ‘ aJU<TaR ‘ ‘ FMF23^@6 ‘ ‘ 1IKL))6G L))f
自己 的 服 务器 代 码 注入 到 HI9)$&3G 3I3 或 是 J’23&’32 的长度。
HI9)$&3& 进程中,注入后在 “ 任务管理器 ” 中不会被发现 第五, 接下来就是将 1IKL))6G <= 插入到 E 进程空
注入的代码(本文中我们将该代码放在 <== 中), 更增 间。 这个就要求目标 E 进程中的线程调用 =$(L=,/&(&M8
强了迷惑性。分析如何使用线程插入技术将代码到插 将写好的 1IKL))6G <== 加载到 E 进程地址空间中。因此
入系统进程隐藏自己。 这种解决方案要求 8 进程在 E 目标进程中创建一个新
一、原理 线程, 该线程由 8 进程创建的, 因此 8 进程能够控制它
防止一个进程的崩溃引起其他进程乃至整个系统 执行什么 代码。aJU<TaR 为我 们提供了一个叫 ]&3S
的崩溃或者一个进程的运行干扰另一个进程的运行。 (23P3^$23+K&3(L 的函数,使得可以在另一个进程中创
本文中笔者就如何从 8 进程中向目标 E 进程空间中注 建线程:
入 1IKL))6G <== 代码作阐述。 O8U<=H ]&3(23P3^$23+K&3(LC
第一, 我们将要插入的代码放在 <== 中, 例如可以 O8U<=H K?&$13FF>
在 <== 中放入线程函数, 将远程服务器端代码封装在 ?RH].PJ+-Q8++PJE.+H 9F(>
线程函数里。 <aTP< LdR2(1NR,e3>
第二, 在进程 8 中获取 =$(L=,/&(&M8 在 N3&’3)@6G L)) ?+OPH8<QR+8P+QPT.+JUH 9*’R2(&28LL&>
中 的 地 址 9*(&2K&3(L*%’> ?+OPH8<QR+8P+SPT.+JUH ?0TJ< 9b?(&(^>
9*(&2K&3(L*%’ V C?+OPH8<QR+8P+QPT.+JUH D <aTP< *Ld]&3(23>
W32?&$18LL&3FFCW32X$L%)3O(’L)3 C+HY+ CZ[HPS ?<aTP< 9Ld+K&3(LJL D \
UH=@6ZD D> Z=$(L=,/&(&M8Z D\ 其中 K?&$13FF 指明在哪个进程中创建线程,是用
9*(&2K&3(L*%’ 传给 ]&3(23P3^$23+K&3(L 函数 9*’R2(&28LL 于标识 E 目标进程的句柄。 参数 9*’R2(&28LL& 指明线程
参数。 函数在 E 目标进程中的地址。 将存在 [3&’3)@6G <== 中
第三, 必须将 <== 加路径名的字符串( 本例中是Z 的 =$(L=,/&(&M8 函 数 的 地 址 传 递 给 上 述 ]&3(23P3S
]_ ‘ ‘ aJU<TaR ‘ ‘ FMF23^@6 ‘ ‘ 1IKL))6G L))Z,将编译 好 ^$23+K&3(L 函数,当然这里面有个前提条件是 =$(L=,S
的 1IKL))6G L)) 放入 ]_ ‘ aJU<TaR ‘ FMF23^@6 目 录下 ) /&(&M8 函数已被影射进入了 E 目标进程的地址空间,
放入远程进程 E 的地址空间中。在进程 8 中调用 0,&S 幸好在 绝大多 HI9)$&3G 3I3 或是 J’23&’32 HI9)$&3& 等这
2%()8))$1HI 函数使得我们可以在另一进程 E 的地址空 样的 W.J 进程中都影射了该函数。?b?(&(^ 是传递给线
间中分配内存。 ?0TJ< 0,&2%()8))$1HI CO8U<=H K?&$13FF> 程函数的参数。
?0TJ<9b8LL&3FF> RJcHQ+LdR,e3> <TaP<*)8))$1(2,$’S 结合上面函数的结果, 8 进程调用下面函数的形式为:
+M93> <aTP< *)?&$12312D \ 例如, 该函数得到的返回地址是 K2K&3(L V ]&3(23P3^$23+K&3(L C K9&$13FF>
9$2K3&。 在函数中我们给 K?&$13FF 传递的是进程 E 的句 U.==>
柄, 因此 9$2K3& 是指向进程 E 地址空间有效地址的指针。 7>
第四 ,用 a&,23?&$13FFX3^$&M 将字 符串 写到 前面 9*(&2K&3(L*%’>

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
多媒体教学中需要引起注意的一点是教学主体没 件扮演着课堂主角,由此导致教师忽视教学的策略与
有变。在教学过程中始终要把握好学生的主体地位,发 方法,忽视教学的难点与 重点,忽视学生的感受与反
挥教师的主导作用,避免课件的喧宾夺主。由于借助多 应,忽视与学生的情感交流;导致学生只关注屏幕内容
媒体教学具有信息量大、呈现快速、表现直观、操作简 而忙于抄录笔记,忽略教师的讲解,也无暇思考问题,
便的特点,教学活动很容易出现“课件喧宾夺主”的不 所谓“上课”
变成“看课”

良倾向。师生依赖荧屏展现,演示成为关注的中心,课

・!"!・
2345671 &‘ R 5273M6’’ U 89:: ;
-1 ^ /6’’)[6=3N R B326P 34567 273M6’’ ‘)&*(76i B ; <
89:: ; < 764(7P<
第六,经过上面的调用得到一个结果,那就是通过 _
将目标进程 = 中的 :3)>:&?7)7@A 作为线程函数启动, e e 成功则在上面获取的进程中分配存储空间做准备
启动后给它传递的参数是 234567 所指向的在目标进程 e e 并将该内存空间递交, 且空间为可读写
= 中 分 配 的 存 储 字 符 串 B+C D D EF8GHEI D D ’@’J ’&Q6 U ! , ’47*6PR 2’Q*&?‘&*6 ; <
46KL# D D MN5>**#$ >**B的指针。因此 :3)>:&?7)7@A 线程函 234567 U R M5)7 + ; %&74()*A**3MXN R
数加载该 MN5>**#$ >** 到目标进程 = 的地址空间中。最 5273M6’’1
后让进程 A 结束, MN5>**#$ >** 留在进程 = 中。 89::1
二、 实现 ’&Q61
第一,创建 MN5>**#$ >** 动态链接库。利用工具是 /X/V+H//FY1
%+ , , "$ - 创建工程 “ /O+ A22E&PQ)7> R >** ; ” 1 接下来 WAfXVTXAGETFYX ; <
选定工程存放的位置和工程的 名称 MN5>**#。 在创建 e e 将 B +C D D EFGHEI D D ’@’46KL# D D MN5>**#$ >** B
G:: 的类 型中 选定 “/O+ 扩充 G::( 利 用共 享 /O+ 串写入上述进程分配的空间中
G:: ) ”。 在 G**/)&P 函数 >ST6)’3P U G::VWTH+XIIVAYY &‘ R i E7&46W73M6’’/6K37@ R 5273M6’’1
A+Z 分支中加入: 2345671
/6’’)[6=3NR89::1BMN5>**#$ >**)44)M5B1B+AWYFH8B1/=VH\;< R W%HFG ; 2’Q*&?‘&*61
弹出对话框表示 MN5>**#$ >** 已加载。 ’&Q61
在 G**/)&P 函数 >ST6)’3P U G::VWTH+XIIVGXY 89:: ; ;
A+Z 分支中加入: ^
6N&4?3N R ; 函数的调用, 6N&4?3N R ; 定义如下: /6’’)[6=3N R BS7&46 43 273M6’’ ‘)&*(76i B ; <
]3&> 6N&4?3N R ; 764(7P<
^ _
/6’’)[6=3N R89::1B>** >644)M5B1 B+AWYFH8B1 /=JH\;< e e 获取 \67P6*L#$ >** 模块中 :3)>:&?7)7@ 函数的地址
_ e e 作为开始启动的远程线程的线程函数
在卸载 MN5>**#$ >** 时提示 G:: 卸载。同时在 MNJ WYZTXAGVIYATYJTH9YF8X2‘)74576)>‘(PURWYZTXAGJIYATYVTH9YF8X
5>**#$ >6‘ 定义 6N&4?3N 为导出函数, 定义如下: f64W73MA>>76’’Rf64/3>(*6Z)P>*6RYXdYRB\XT8X:L#B ; ;1
:F=TATa BMN5>**#B B:3)>:&?7)7@AB;<
GXI+TFWYFH8bMN5>**# E&P>3S’ G@P)K&M :&Pc :&?7)7@b &‘R 2‘)74576)>‘(P U U 89::;
XdWHTYI ^ /6’’)[6=3N RB2‘)74576)>‘(P U U 89::i B;<
< XN2*&M&4 6N2374’ M)P [3 5676 764(7P<
6N&4?3N< MN5 )>> ‘37 6N2374 ‘(PM4&3P _
最后编译工程得到 MN5>**#$ >** 动态链接库,将该 e e 创建远程线程以启动 :3)>:&?7)7@A 线程函数
动态链接库放入 +C D EF8GHEI D ’@’46KL# D 目录下。 54576)> U+76)46T6K346Y576)>R5273M6’’1
第二,为简化过程,笔者生成了一个 76M>**$ 6N6 为 89::1
目标进程 = 的执行体。 -1
第三,46’4>**#$ 6N6 作为进程 A 的执行体,在其菜 2‘)74576)>‘(P1
单点击事件中生成响应代码,将实现注入的写在里面: 2345671
]3&> +/)&PO7)K6C C HP/6P(!R ; -1
^ 89:: ;<
M5)7+2’Q*&?‘&*6U B+C D DEFGHEID D’@’46KL#D DMN5>**#$>**B< e e ee e e e e ee e e e e e ee e e e e e
ZA8G:X 5273M6’’ U 89::1 54576)> U 89::< &‘R54576)> U U 89:: ;
GEHTG >SW73M6’’F> U -< ^ /6’’)[6=3N Rj54576)> U U 89::i B;<
e e >** 串名的长度 764(7P<
&P4 ’&Q6 U -< _
e e 指向 = 进程中分配的空间地址 e e A 进程等待在远程目标进程 = 中创建的线程结束
M5)7 +234567 U 89::< E)&4O37I&P[*6H?k6M4 R 54576)>1 F8OF8FYX ; <
e e 找到 = 进程创建窗口的句柄 /6’’)[6=3N R B2)’’ 5676B ; <
ZE8G 5SP> U C C O&P>E&P>3S R 89::1 B76M>**B; < _
e e 根据上面的句柄获取创建 该窗口的进程 FG, 以上代码在 EF8#--- 和 EF8dW 上实验, 运行良好。
而不是线程 FG
GEHTG >SY576)>F> U f64E&P>3SY576)>W73M6’’F>R 5SP>1
g>SW73M6’’F> ; <
e e 获取包含上面线程的进程的句柄
5273M6’’ U H26PW73M6’’ R
WTH+XIIV+TXAYXVYZTXAG h
WTH+XIIV%/JHWXTAYFH8 h 参考文献:
WTH+XIIV%/JETFYX1 &!0 范 辉 $ %&’()* + , , "$ - 程序简明教 程 . / 0 $
OA:IX1
北京:高等教育出版社 1 #--! $
>SW73M6’’F> ; <
・!"#・

You might also like