把通用模板机器码直覆盖目标PE

这个地方真是尝试了好久,遇到很多坑点,Win PE那本书上的东西有点不够,也就直接写书上的例子会发现很多地方不是说的那样,里面提供的信息太少了,就比如里面并没有提被注入的目标PE的随机基址问题,比如说中给了一套模板(模板里面有一些变量定义了没有使用,还有获取Kernel32.dll的地方是错误的,还有通用模板运行的时候内存溢出了...)额...总之不要在意这些细节。我自己摸索着弄吧,这个地方。

今天打算尝试几种姿势手动把自己的模板机器码添加到目标PE某个位置让其加载我们的功能。

对于模板代码来说,要注意的问题之前说过了,注意导入表、注意数据段、注意重定位等等。其实重定位还是很好解决的。导入表和数据段可以解决,但是很麻烦,需要重构,这也就意味着给我们的目标无形中带来了兼容性的问题。学习的时候可以过度开发。深刻研究,但是一旦你是为了实现功能而写代码的时候建议一定要从简,我们的目的是实现功能。出招过慢通常是因为姿势过多[这个是别人提醒我的话]。OK不废话,说正题。

尝试1:

(1)随便写一个程序,作为宿主文件,记住代码多写点。别弄的代码段只有很少内容,结果自己注入的模板字节码比原来.text还大。[记住这个文件的随机基址一定要关闭,如果你用的是VS的话,在这里]

(2)编写一个通用模板程序(加载dll的),汇编代码在最后,开发环境(vs2012+masm32),这个程序的基址随不随机无所谓,因为一会只是把.text段部分拷贝过去。

下图是生成的载体EXE:

(3)然后把1生成的那个exe,的程序入口改成对应FOA=0X400的地方。在把2生成的EXE的代码段部分拷贝到1的FOA=0X400处,运行1生成的exe会发现成功加载了相关dll。

下图是改PE头里面程序入口地址:

然后是替换代码段的部分:

最后那个E9 XXX 我没有修改,这个地方是留着最终嵌入到目标程序某个位置,执行完之后最好是跳转回原来的函数入口,这样就不会影响原目标载体的正常执行,同时又能执行我们自己的代码逻辑。

这个实验是要是为了验证载体的独立行和可行性。因为源程序里并没有嵌入代码里的那些调用函数,也没有导入表,也没有数据段。这样只要让目标文件的逻辑指向咱们的入口就OK了,咱们是完全独立的。同时上面注意一个问题,就是再写被注入载体例子的时候,我是关掉了随机基址选项。接下来实验二尝试打开随机基址选项。因为实际嵌入别人程序很多时候对方的随机基址选项是开着的。开不开随机基址,看PE头信息就能看出来:

尝试2:

这次打算解决上一个例子的不足。关于随机基址的问题,在平时使用的过程中,通常要做的是嵌入到别人的程序里,所以咱们认为很多的程序的那个选项是开着的,也就是基址是随机的,这个地方我刚刚做了很多尝试,我一开始是发现我嵌入的代码在call的地方失败了,call的地址什么都没有,然后我就在嵌入模板里在这个位置上做了很多次尝试,结果都失败了。我用全局变量重定位的姿势搞了这个call,结果还是不行(可能是姿势错误)。后来我反复编译我自己的一个helloworld[因为我也不知道到底那个选项改了什么],发现那个选项对代码段没有影响,额...既然我的代码是独立可以运行的,同时那个东西对代码段又没有影响,那是不是在我的程序里,我可以直接把那个随机的选项抹掉:

结果我是在PE头里找到那个位置,把那个改成0,发现可以成功运行,然后我又找来chrome等别的程序,测试了几个,发现可以。

然后打算下个PE比较工具看下具体细节,随便点击了一个界面进去了:

看到的这个:

一如既往的”喜欢的界面”,看那个大大橙色点击下来你就会下载一个你都不知道是啥的东西,对,都怪你,不仔细看细节。然后在下面不起眼的地方找到了“真实”的下载地址,下载了个这货:

依然很熟悉的套路

百度上搜索东西,下载很多都是下载个这么个东西,超级大礼包。[打着签名哦,而且国内杀软几乎都方行了],也许上面也是,都没违规只是做的不明显让你取消安装。但是国外貌似不承认这种所谓的不违规:

下面是avast上执行这个exe的结果,执行前没报毒,也就是祖国的这款大礼包程序并没有对avast的动态扫毒做免杀,打着签名还被avast报毒,这肯定是一点都没有免杀...

最后经过重重困难,在虚拟上安装了UC,然后运行不起来。FK。浪费时间。算了这个地方酱紫。继续 实验2 的测试流程

然后就硬着试了一次:把目标PE头里面的这个字段直接抹成0,然后在用 实验1 的姿势去做,结果发现是可以的。OK 说下这次尝试的姿势步骤:

(1)找到本机chrome.exe,修改PE头的两个地方

{

A:基部重定位表地址为0

B:程序入口地址RVA(FOA=0x400)

}

(2) 然后编译嵌入模板文件,把.text(FOA=400)处的机器码拷贝到(1)改变之后的对应FOA=0X400的位置上。

(3) 把测试dll和改好后的exe放到,chrome原来文件夹下,记住改名为chrome.exe,无意发现,chrome.exe如果换了名字之后就运行不起来了,额...不知道这个是处于防护还是什么,应该不是防护,防护的话这么做感觉没什么卵用,难道是怕别人做类似chrome->chrome2,my.exe->chrome.exe 这类事? 反正便面上看没卵用。

(4) 运行chrome会发现相关dll被加载,点击确定之后chrome崩溃,崩溃是必然,因为首先没有给最后的那个跳转指令E9 XXXX更改实际值,同时因为暴力覆盖了原来代码部分,导致代码损坏。So这就是下个实验要做的事,把代码嵌入到某个位置,比如某个间隙,某个段(比如最后一段),或者自己单独创建一个段。放在里面等等。然后修改函数入口跳转进来,做完事再跳转到之前该跳转的位置。

下面是实验2的一些细节截图:

下图成功通过chrome.exe加载了dll。

下图是我本机上原版chrome重命名后起不来,弹的错误窗口:

劫持过程中发现360弹窗,注意木马名称。之前没见过这个颜色的窗,我没记错的话之前是见过红色的[应该是加载服务或者驱动的时候],黄色的[镜像劫持或者hook的时候,直接cmd强行修改密码也是黄色]...不过不重要,可能就是随便换个皮肤吧,还顺便打个广告。主要是看描述和名称。同时还发现一个问题,如果是改chrome的话发现有保护,改自己写的代码并没有保护,没猜错应该是有这种特判逻辑,有时间研究下怎么过这个。不过这个不重要了,平时很少分析国内杀软。也不知道国内杀软都什么套路,就像发现电脑管家的一个优点就是界面贼帅,但是随便TDL无签名加上一个驱动,然后干掉它。全程没有提示。额.....

360提示报毒之后,被修改的chrome.exe被干掉了,但是那个劫持I.dll,没被清理掉。这个地方差评,也许是还没到我加载这个DLL的时候就已经被截断了,所以就直接把exe干了。然后并没有在沙箱里跑我,看我操作那些文件,进一步清理。不过这样做也可以理解。没有理由继续深一步清理。产品---用户,效率---过度开发。很多时候过度开发就是在浪费生命。

之后的实验是在不破坏原来PE结构的前提下附加我们的补丁代码。姿势有很多,我觉得我会选择扩展最后一节大小来做这个事,不过越简单的东西也就越容易被检测出来,想到最后一节扩展,突然想起个事,最后一节改完之后,然后对其,然后修改PE头。貌似对于大签名的文件来说签名还是正常的。这个之前分析过。BUT,这么改肯定要修改PE头的另两个字节,入口地址和代码重定位值。签名跟定无效了。So......

感觉今天废话说的有点多,可能是周末时间多,无聊吧。看到都好奇,就简单看看。

Windows PE变形练手3-把通用模板机器码直接覆盖目标PE相关推荐

  1. Windows PE变形练手1-用PE自己的机器码修改自己的逻辑

    PE变形练手1-用PE自己的机器码修改自己的逻辑 就是找一个PE文件,用自己的部分代码部分覆盖或者而修改自己另一个代码部分的补丁姿势(现实中使用很少,极少数破解可以用到.这次例子目的是了解PE). 第 ...

  2. Windows PE变形练手2-开发一套自己的PE嵌入模板

    PE嵌入模板 编写一段代码,生成一个已经处理过重定位信息,同时所有的内容都在代码段里,并且没有导入表的PE程序,把这个程序嵌入到其他PE的相关位置,能够独立的运行,接下来是整理了2个模板,一个是Hel ...

  3. html模板字幕,HTML通用模板

    xxx *{margin: 0px;padding: 0px;} a{text-decoration: none;color: #333;} ul,li{list-style: none;} body ...

  4. 手工打造目标PE的步骤

    为了熟悉程序流程,先通过手工方式打造这一补丁.目的是使用最原始的不经过加工(如免重定位.动态加载技术)的程序,在尽量不改变目标PE结构的前提下,实现将代码附加到.text节中.将数据附加到.data节 ...

  5. Windows PE 第十二章 PE变形技术

    PE变形技术 这章东西太多,太细了.这里我只记录了一些重点概念.为后面学习做铺垫. PE变形:改变PE结构之后,PE加载器依然可以成功加载运行我们的程序. 一 变形常用技术: 结构重叠技术.空间调整技 ...

  6. c# 火狐浏览器怎么嵌入窗体中_「C#上位机必看」你们想要的练手项目来了

    最近有越来越多做电气的小伙伴开始学习C#来做上位机开发,很多人在学习一段时间后,都有这种感觉,似乎学到了很多知识,但是不知道怎么应用,因此我找了一个真实的上位机小项目,让大家来练练手.这篇文章主要对这 ...

  7. [C++练手项目] DocAnalysis

    [C++练手项目] DocAnalysis 文章目录 [C++练手项目] DocAnalysis 任务分析 编码 转换DOC文件到TXT 分词 停止词 两文档相同和不同字符数统计 总体实现思路 一.分 ...

  8. python简单项目-4个Python经典项目实战,练手必备哦!

    Python是一种极具可读性和通用性的编程语言.Python这个名字的灵感来自于英国喜剧团体Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣.Python易于设置, ...

  9. python基础教程第三版豆瓣-Python爬虫入门教程:豆瓣读书练手爬虫

    点击蓝字"python教程"关注我们哟! 前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及 ...

最新文章

  1. 如何用eclipse操作MySQL数据库进行增删改查?
  2. 中国顶尖的技术社区们在一个群里,会聊什么…
  3. java 折半_折半算法
  4. Scala中的类和对象
  5. jdk8读取文件_JDK 7和JDK 8中大行读取速度较慢的原因
  6. JAVA面试考点解析(12) -- 算法
  7. inno setup打包的安装包如何在卸载完程序后可以继续安装_这两个方法就够了!快速制作Python程序Windows安装包...
  8. java打开文件对话框
  9. NR SRB and message transfer
  10. 大中型企业九种资金管理模式
  11. 《流浪地球 2》 Deepfake 小试牛刀,45+ 吴京「被」年轻,变身 21 岁小鲜肉
  12. SSM_jsp实现汽车销售管理系统
  13. MyBatisPlus代码生成器(CodeGenerator)
  14. 请教知网检索返回网址的问题
  15. 哈哈~,终于把阿里妈妈的广告申请下来了
  16. 【L2-019 悄悄关注 】天梯赛L2系列详解
  17. 在线制作9 patch图片
  18. 做一个即时利润表仪表板(不用等账都做完核对完关账后)
  19. 在最大中求最小系列问题(二分)
  20. 如何看待 Python(PyScript) 可以做浏览器前端开发语言?

热门文章

  1. OPPO R11巴萨限量版开售,上午10点线上线下火爆开启!
  2. Spring MVC 实现原理
  3. MySQL学习笔记_9_MySQL高级操作(上)
  4. 管中窥豹,初探Win RE(Windows恢复环境)
  5. [转]java取得Linuxcpu,内存,磁盘实时信息
  6. ZedGraph在Asp.net中的应用
  7. Python 闭包详解
  8. html的分类与特点
  9. 笔试题118-130
  10. Id.exe和ld.exe: cannot open output file … : Permission denied问题。