Windows PE变形练手1-用PE自己的机器码修改自己的逻辑
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自己的机器码修改自己的逻辑的更多相关文章
- Windows PE变形练手2-开发一套自己的PE嵌入模板
PE嵌入模板 编写一段代码,生成一个已经处理过重定位信息,同时所有的内容都在代码段里,并且没有导入表的PE程序,把这个程序嵌入到其他PE的相关位置,能够独立的运行,接下来是整理了2个模板,一个是Hel ...
- Windows PE变形练手3-把通用模板机器码直接覆盖目标PE
把通用模板机器码直覆盖目标PE 这个地方真是尝试了好久,遇到很多坑点,Win PE那本书上的东西有点不够,也就直接写书上的例子会发现很多地方不是说的那样,里面提供的信息太少了,就比如里面并没有提被注入 ...
- Windows API初练手 -- 疯狂写文件代码
警告:恶作剧软件,慎用!仅供初学者研究代码所用!!! 提示:默认文件创建目录在"D:\test",如果需要使用的话请自行更改目录. 1. Windows API 版本 (调用系统函 ...
- Windows PE 第十二章 PE变形技术
PE变形技术 这章东西太多,太细了.这里我只记录了一些重点概念.为后面学习做铺垫. PE变形:改变PE结构之后,PE加载器依然可以成功加载运行我们的程序. 一 变形常用技术: 结构重叠技术.空间调整技 ...
- Python—经典练手题目汇总
Python-经典练手题目汇总 # 1.有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两# 个,问几天以后能卖完? day=0 xg=1020 for i in rang ...
- web前端学习部落22群分享给需要前端练手项目
前端学习还是很有趣的,可以较快的上手然后自己开发一些好玩的项目来练手,网上也可以一抓一大把关于前端开发的小项目,可是还是有新手在学习的时候不知道可以做什么,以及怎么做,因此,就整理了一些前端项目教程, ...
- C语言练手游戏-控制台输出一个会移动的坦克
把C语言的知识融合起来做一个练手的小游戏项目,将自己掌握到的数据结构.数组.函数.宏定义等知识综合利用,增加对语法的熟练程度. 操作系统: windows 10 x64 编译IDE : VS2015 ...
- 小甲鱼PE详解之资源(PE详解11)
原文出自:www.fishc.com 最近一直在安排第一届鱼C 学习班的事情,忙活了好一阵子,真是对不住大家,还大家久等了,这里要跟大家说声不好意思 ^_^ 今天我们来谈谈资源部分,资源部分可以说是 ...
- 亲测:三个值得练手的Java实战项目
测试奇谭,BUG不见. 大家好,我是谭叔. 一提到编码,很多小伙伴便感到头疼,特别是半路转行的小伙伴或者没有系统学习过计算机基础的小伙伴. 对于想学而不知道怎么学的小伙伴,我可以分享下我的策略: 刷一 ...
随机推荐
- WEB服务-Nginx之十-keepalived
WEB服务-Nginx之10-keepalived 目录 WEB服务-Nginx之10-keepalived Keepalived和高可用 基本概述 Keepalived安装配置 Keepalived ...
- WorkSkill整理之 java用Scanner 类输入数组并打印
输入不确定长度的数组 import java.util.*; public static void main(String[] args){ System.out.println("请输入一 ...
- HDU_3746 Cyclic Nacklace 【KMP的应用】
一.题目 HDU3746 二.分析 KMP比较好解决的一个问题:如果求一个串中的循环节? 仔细回想KMP的用法,重点是next数组,相当于就是后缀和前缀的比较,那么不正是方便了我们确定循环节? 如果以 ...
- 前端er必须知道的Git地址及常用工具地址
商城篇(找工作必练) 开源商城 推荐指数:5星,掌握了它,可以说,今后工作中的各种需求都不是问题,工作1~2年的也可以学习其中的思路(建议收藏). 这是一个集小程序/公众号/app为一体的商城系统,包 ...
- Elasticsearch集群升级指引
目录 背景 第一部分 版本升级指引 第二部分 升级方法和具体步骤 总结 参考文献及资料 背景 Elasticsearch集群的版本升级是一项重要的集群维护工作.本篇文章参考官方文档,将详细介绍相关细节 ...
- angular+ionic -- 启动命令
初始angular+ionic项目,启动需ionic的启动命令: ionic serve
- leetcode 刷题(数组篇)11题 盛最多水的容器(双指针)
题目描述 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) .找出其 ...
- Android-SQLite的介绍 以及四个基本操作~
在Android 开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的.一 ...
- Java刷题-stack
一.getMin栈 题目描述 实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 输入描述: 第一行输入一个整数N,表示对栈进行的操作总数. 下面N行每行输入一个字符串S ...
- JAVAEE_Servlet_02_Servlet接口实现类HttpServlet
Servlet接口实现类 * Servlet接口: Servlet接口是来自于Servlet规范下的一个接口,存在于HTTP服务器(Tomcat)所提供的jar包中.Servlet-api.jar. ...