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

就是找一个PE文件,用自己的部分代码部分覆盖或者而修改自己另一个代码部分的补丁姿势(现实中使用很少,极少数破解可以用到。这次例子目的是了解PE)。

第一个实验,写个例子。然后把函数1和函数2调换一下。

代码如上,很简单。先输出111,在输出222.根据:

可知,相关FOA   main 0x440  main1 0x400  main2 420

两个函数如上,最后C3是return,仔细观察,是下面参数不同:

OK,好办,直接替换这两个参数就行了呗:

然而发现,并不性。还是先输出111,有输出222。当时我还傻愣半天,还找同事问问。怎么这么简单,改个东西。我却失败了。额...结果我输了一块雪糕。原因是这两个函数根本没有被调用到。比如这样。我上来就C3,发现程序继续运行。

原因是因为直接被优化掉了,编译器编译的时候直接把这两个函数的字节码弄到了调用的地方,看反汇编就知道了:

相关编译选项是这两个:

我们可以把 内联函数扩展禁用:

这样就调用函数了,这个时候再去改函数就有反应了。这里不上图了,我本地测试发现可以。

下面我试了下编译选项,总结了一些组合产生的结果(VS2015 C++)

(1)优化:完全  内联函数扩展:开

(1)优化:禁用   内联函数扩展:开

(2)优化:禁用   内链函数扩展:关

(3)优化:完全   内链函数扩展:关

例子2,模拟一个最简单的破解:

要想在错误密码或者不输入密码的时候走yes函数,姿势有很多:

(1)OD直接加载起来,在判断密码正误的地方改下逻辑,可以直接改判断部分或者if不满足后执行的函数地址(如果是实际情况,推荐这个)。

(2)直接上来把PE入口函数指向yes,这样可以直接跑yes函数了。但是这样的缺点不会执行其他别的逻辑代码了,而且执行完,应该不会退出。我记得是退出不了。或者再在后面自己追加退出代码。

(3)覆盖部分主函数里面的代码,让他进入主函数后直接就跳转到yes函数了。(这个思路也行)。

(4).....还有很多姿势。下面就简单实现下上面三个姿势。虽然没什么用,练着玩,为接下来的复杂PE变形做铺垫。

实现姿势1:OD加载走走逻辑破解:

OK这就行了,比较简单,不细说了。

实现姿势2:改PE入口的地址,直接让他跑yes函数:

看下入口:

之前是什么都不管,反正RVA1000对应FOA400

OK yes函数在这里,41000处,直接把13F2 改成1000就行了:

这样双击就直接破解了:

和预想一样,点击确定后卡在这个黑色界面上了:

实现姿势3:直接代码覆盖(这个不通用,之后在解释):

直接把400-420的函数yes 代码覆盖到420-440的no里,如果no里代码比较多,可以直接C3返回,但是上面也有很多坑,之后会的例子里会解释。

Windows PE变形练手1-用PE自己的机器码修改自己的逻辑的更多相关文章

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

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

  2. Windows PE变形练手3-把通用模板机器码直接覆盖目标PE

    把通用模板机器码直覆盖目标PE 这个地方真是尝试了好久,遇到很多坑点,Win PE那本书上的东西有点不够,也就直接写书上的例子会发现很多地方不是说的那样,里面提供的信息太少了,就比如里面并没有提被注入 ...

  3. Windows API初练手 -- 疯狂写文件代码

    警告:恶作剧软件,慎用!仅供初学者研究代码所用!!! 提示:默认文件创建目录在"D:\test",如果需要使用的话请自行更改目录. 1. Windows API 版本 (调用系统函 ...

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

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

  5. Python—经典练手题目汇总

    Python-经典练手题目汇总 # 1.有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两# 个,问几天以后能卖完? day=0 xg=1020 for i in rang ...

  6. web前端学习部落22群分享给需要前端练手项目

    前端学习还是很有趣的,可以较快的上手然后自己开发一些好玩的项目来练手,网上也可以一抓一大把关于前端开发的小项目,可是还是有新手在学习的时候不知道可以做什么,以及怎么做,因此,就整理了一些前端项目教程, ...

  7. C语言练手游戏-控制台输出一个会移动的坦克

    把C语言的知识融合起来做一个练手的小游戏项目,将自己掌握到的数据结构.数组.函数.宏定义等知识综合利用,增加对语法的熟练程度. 操作系统: windows 10 x64 编译IDE : VS2015 ...

  8. 小甲鱼PE详解之资源(PE详解11)

    原文出自:www.fishc.com 最近一直在安排第一届鱼C 学习班的事情,忙活了好一阵子,真是对不住大家,还大家久等了,这里要跟大家说声不好意思 ^_^ 今天我们来谈谈资源部分,资源部分可以说是 ...

  9. 亲测:三个值得练手的Java实战项目

    测试奇谭,BUG不见. 大家好,我是谭叔. 一提到编码,很多小伙伴便感到头疼,特别是半路转行的小伙伴或者没有系统学习过计算机基础的小伙伴. 对于想学而不知道怎么学的小伙伴,我可以分享下我的策略: 刷一 ...

随机推荐

  1. Educational Codeforces Round 98 (Rated for Div. 2)

    A 如果\(n = m\),答案为\(2 \times n\):如果\(n \ne m\),答案为\(2 \times max(n,m) - 1\) #include <bits/stdc++. ...

  2. WPF 应用 - 拖拽窗体、控件

    1. 拖拽窗体 使用 System.Windows.Window 自带的 DragMove() 方法即可识别窗体拖动. DragMove(); 2. 拖拽控件:复制.移动控件 <Grid> ...

  3. ResNet论文笔记

    其实ResNet这篇论文看了很多次了,也是近几年最火的算法模型之一,一直没整理出来(其实不是要到用可能也不会整理吧,懒字头上一把刀啊,主要是是为了将resnet作为encoder嵌入到unet架构中, ...

  4. 在CentOS上安装Nginx配置HTTPS并设置系统服务和开机启动(最全教程)

    友情提示:全部配完大约需要20分钟,本教程配合 xshell 和 xftp 使用更佳. 系统配置:CentOS 7.5 本教程 摘繁华 版权所有. 操作按键 常用按键: 复制操作:Shift+Ins ...

  5. (2)MySQL进阶篇SQL优化(show status、explain分析)

    1.概述 在应用系统开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产环境的影响也 ...

  6. [set]JZOJ 5821 手机信号

    Description

  7. 剑指 Offer 03. 数组中重复的数字

    剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知 ...

  8. java例题_44 一个偶数总能表示为两个素数之和

    1 /*44 [程序 44 偶数的素数和] 2 题目:一个偶数总能表示为两个素数之和. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个偶数(大于2的偶数,因为1不是素数) 7 * 2.用for ...

  9. KeyError:‘uid' Python常见错误

    使用不存在的字典键值 检查字典和要查的内容 如有不正确改正即可

  10. mvel 配合正则表达式实现文本替换

    mvel 依赖 <dependency> <groupId>org.mvel</groupId> <artifactId>mvel2</artif ...