首页
论坛
课程
招聘
[原创]如何向WM程序注入代码[1]总纲
2009-3-23 15:27 7500

[原创]如何向WM程序注入代码[1]总纲

2009-3-23 15:27
7500
【文章标题】: 如何向WM程序注入代码[1]总纲
【文章作者】: 手冷
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  上一篇帖子太笼统了, 是笔者处于兴奋中, 没有控制好难度和长度. 根据版主的建议, 笔者决定把自己的研究成果以一个专题的形式写出来与大家分享!

  所谓代码注入本身, 是一种技术. 目的是在一个已经存在的, 编译完成的目标程序中注入其他代码, 并扭转原目标程序的执行流程, 使得新添加的代码能够在适当的时候(比如目标程序运行之前)得到执行.
  这种技术, 可以用于恶意代码的编写, 也可以用于加壳等软件保护方式. 技术本身是没有善恶之分的, 善恶只在人心一念之间.
  
  代码注入可以用工具实现, 也可以用编程的方式实现. 本系列讨论在WM环境下, 如何以ARM汇编和WinCE API向一个程序注入代码.
  
  笔者希望能通过这个系列, 引导大家一步一步实现自己的代码注入功能, 同时在这个过程中, 极大加深对ARM汇编和PE格式的理解.
  
  基本要求:
      本系列要求读者对ARM汇编有一定了解(至少得看得懂ARM语句), 最好是找一本ARM汇编入门书, 先看看并且试着自己将每条指令都写一写, 功能不见得复杂, 但需熟练. 推荐文全刚写的<<汇编语言程序设计: 基于ARM体系结构>>, 这本书对笔者初期帮助很大.
      读者对PE格式要了解, <<加密与解密>>, <<软件加密技术内幕>>都有重点介绍. WM的程序延续了桌面平台的PE结构, 动手术的理论基础是一样的. 笔者视情况, 可能不会作详细的介绍.
      要动手实践, 纸上得来终觉浅, 实践出真知.
  
  推荐软件, 笔者只使用了以下软件, 不知道其他的会不会更好:
      要研究PE格式, 自然是WinHex, PEditor, 要涉及到汇编, 反汇编, 不能不用VS2008的Debugger和IDA Pro.
      另外, 最重要的, 吐血推荐的是: Xarm 1.0
      Xarm 1.0不光是一个方便快捷的汇编编写工具, 其附带的大量示例和文档, 绝对是新手入门的捷径! 笔者从一窍不通一路走来, 就是一个学习和改造改写Xarm的过程.
  
  
  写作目的:
      希望这个专题能让读者更加清晰深入的理解ARM汇编, 和PE结构. 对汇编各个细节的特性手到擒来, 运用灵活自如, 同时对WM系统也得到更加深入的理解. 最终能自己动手向目标程序注入自己的代码.
  当然, 这只是笔者的愿望, 希望写出来大家能够容易理解, 又尽可能避免错误.
  
  
  
  下一篇文章预告: 尝试介绍ARM汇编中的一些大家容易忽略的关键
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年03月23日 15:24:43

第五届安全开发者峰会(SDC 2021)议题征集正式开启!

收藏
点赞0
打赏
分享
最新回复 (14)
雪    币: 2309
活跃值: 活跃值 (48)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
加百力 活跃值 12 2009-3-23 16:07
2
0
坐着沙发,大力支持一把!
雪    币: 2309
活跃值: 活跃值 (48)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
加百力 活跃值 12 2009-3-23 16:10
3
0
对于复杂、内容较多的项目分成专题很有利于降低难度,提高大家的学习兴趣,同时也方便自己总结。这也是看雪前辈前面给我的建议,我感觉确实很有道理所以也推荐给你!
雪    币: 2309
活跃值: 活跃值 (48)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
加百力 活跃值 12 2009-3-23 16:23
4
0
2008年上半年推出Xarm v1.0后又增加了不少内容,还没来的及整理下半年就被拉进某公司当壮丁去了。

经过过去一年的积累,“手冷”兄弟在Xarm上已经有了很深的造诣!前面他给我看了很多他写的宏定义和子函数,水平都相当高!我们对手冷兄弟水平很有信心!

手冷兄弟目前还在知名高校读硕士,时间充足,基础又扎实。Xarm v2.0中大家一定会看到大量的手冷兄弟的成果!
雪    币: 51
活跃值: 活跃值 (10)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
Yonsm 活跃值 5 2009-3-23 19:57
5
0
暴寒,没听过Xarm都。

如何注入代码,PPC中非常简单的,SP5/6中有些麻烦,但我已经整出了方案(http://bbs.pediy.com/showthread.php?t=84342),还没理出文章。期待楼主大作。
雪    币: 2309
活跃值: 活跃值 (48)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
加百力 活跃值 12 2009-3-23 20:03
6
0
Xarm是Blitz Force团队搞得一个用ARM汇编写WM程序的小工具。

手冷的玩法类似于一个PE病毒,在可执行文件中添加一个新节,获得运行权限,运行完成后返回宿主程序。使用的大部分都是WIN32平台的技术,但根据WM平台的特点进行了改变,移植到了WM平台。
雪    币: 51
活跃值: 活跃值 (10)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
Yonsm 活跃值 5 2009-3-23 20:12
7
0
跟我搞得CodeZap差不多用途?CodeZap想移植到WinCE中,苦于一直找不到好方法去获取Kernel32.dll的函数表(看到有方法,没搞成)。
雪    币: 2309
活跃值: 活跃值 (48)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
加百力 活跃值 12 2009-3-23 20:17
8
0
在CE平台有个麻烦的问题是所有系统级DLL被装入内存后最初的4K内存无法访问。

不知Yonsm老大有没有办法?

前面我研究CE加壳软件使用的方法是新建一个节保存输入表,其中只有coredll.dll中的LoadLibraryW函数和GetProcAddressA函数。外壳中需要的函数都通过这两个函数动态加载。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
手冷 活跃值 1 2009-3-24 08:55
9
0
我这个用汇编搞的, 作为汇编练手用的.

对, 是用PE病毒技术, 对静态的EXE文件添加节, 并修改PE头, 使得执行该文件时, 先运行添加的新节中的代码. 新节代码执行完以后, 交还原程序的控制权.

所以这个系列会涉及大量汇编的东西...

你的方法看得我目瞪口呆... 太佩服了, 果然专业! 我还得好好理解.
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
手冷 活跃值 1 2009-3-24 08:58
10
0
我用的也是这个办法, 把目标程序的整个IID数组都搬到新节中, 然后再在新节中添加自己的IID和IAT. IAT中可以只有这两个函数, 也可以把新节中要用到的函数都写入.
雪    币: 2309
活跃值: 活跃值 (48)
能力值: (RANK:510 )
在线值:
发帖
回帖
粉丝
加百力 活跃值 12 2009-3-24 09:21
11
0
桌面平台没有那么多限制可以在内存中查找Kernel32.dll装载的位置,然后分析PE格式,查找需要的API。WM目前还不能用这个办法。
雪    币: 51
活跃值: 活跃值 (10)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
Yonsm 活跃值 5 2009-3-24 22:00
12
0
各有各的用途,你这种方法用于改写PE之类的可行(一般是病毒或破解之类的)。但往往很多应用软件需要 Hook API 或者动态注入的,所以只是不同的应用需要啦(比如来电防火墙等)。
雪    币: 7
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
KylixC 活跃值 2009-6-26 01:41
13
0
学习了,值得收藏
好东西要顶起来,让大家都看到

期待下一篇
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ccpp 活跃值 2009-7-8 21:22
14
0
下一篇 没了?虎头蛇尾?
雪    币: 55
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
打小 活跃值 2009-7-22 15:48
15
0
关注~~~~~~~
游客
登录 | 注册 方可回帖
返回