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. 在scanf函数中占位符使用错误而产生的一些错误

    出现的问题 在做编程题的的时候,遇到了一个很奇怪的错误,出问题的代码如下: 1 #include <cstdio> 2 using namespace std; 3 4 int main( ...

  2. 聊一聊和Nacos 2.0.0对接那些事

    前言 nacos 2.0.0 已经发布了 alpha1, alpha2 和 beta 三个版本了,部分测试报告也已经出来了. Nacos2.0.0-ALPHA2 服务发现性能测试报告 Nacos 2. ...

  3. P2764 最小路径覆盖问题 题解(二分图)

    建图思路很明确,拆点跑最大匹配,但这明显是个二分图的题题解居然只有一篇匈牙利算法. 发一种和之前那篇匈牙利思路略有不同的题解. 本题的难点就是如何输出,那么我们不妨在建图的时候加入一个原则,即:连边时 ...

  4. python网络编程TCP服务多客户端的服务端开发

    #服务多客户端TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何 ...

  5. Linux tar 使用笔记

    常用语法 打包和压缩包 仅打包不压缩:tar -cvf usr.tar /usr 将 /usr 目录打包为 usr.tar 打包并以 gz 格式压缩:tar -czvf usr.tar.gz /usr ...

  6. PTA 输出数组元素

    7-3 输出数组元素 (15 分)   本题要求编写程序,对顺序读入的n个整数,顺次计算后项减前项之差,并按每行三个元素的格式输出结果. 输入格式: 输入的第一行给出正整数n(1).随后一行给出n个整 ...

  7. Redis入门到放弃系列-redis数据类型

    Redis数据类型? Redis 提供一些常用的数据类型:Strings.Lists.Sets.Sorted sets.Hashes.Arrays.Bitmap.Streams Strings(字符串 ...

  8. Hi3516如何连接Wifi(二)

    目录: 一.总体思路 二.启动Daemon 三.作者文章合集 书承上回(Hi3516如何连接Wifi(一)),上一篇聊了一下怎样在Hi3516中用wpa_supplicant连接到Wifi热点,本文讲 ...

  9. oo暑期课程总结

    一.当时未能完成的作业 未能完成的作业是第四单元的作业. 未能完成的原因主要有以下两点:一是当时对于数据的整理没有好的设计和思路:二是临近期末,未能合理地分配时间导致作业未能完成 二.改进的部分 通过 ...

  10. 1W字|40 图|硬核 ES 实战

    前言 上篇我们讲到了 Elasticsearch 全文检索的原理<别只会搜日志了,求你懂点检索原理吧>,通过在本地搭建一套 ES 服务,以多个案例来分析了 ES 的原理以及基础使用.这次我 ...