手工把一个PE文件装载起来了

模拟操作系统的装载器LoadPE 模拟操作系统实现loadPE 设计思路 将PE文件头加载到内存中 把所有节区数据加载到内存 修正导入表,也就是上面的获取导入函数地址填入到IAT中 注意:为了防止装载的程序涉及到VA不一样,导致loadPE访问地址崩溃,所以自己的loadPe程序的基址要和装载的程序地址要一样,可以修改link 选项 /base:基地址 举例说明:假如对方模块基址为10000000 有个指令为jmp 0x1000... 阅读详情

前面分析了LoadLibrary函数,今天根据前面分析的原理,居然手工把PE文件装载成功了。当然为了减少工作量,我还是利用了巧妙的方法。其实只要充分理解了虚拟地址,基地址,还有那些乱起八糟的PE表。回想起来也不是难的不可战胜。最后的结果是看不到执行模块的的一段内存区域开始执行代码咯Tongue out。。如果再把一些PE文件标示去除掉,甚至使用完就release掉,再狠点代码加密启动SEH机制动态解密代码,甚至再强悍点,把代码放在共享区间(windows默认为每个程序都映射了一个共享区间,这个区间地址我忘记了,只有翻翻代码了)---简直不是人干的。

CreatePrcoess就是在内核创建一个PEB,,剩下的工作可以自己做嘛。。但是太复杂了,按照许木木的话来说----没有意义。。。该利用windows现成的就利用啊,只是不是常规利用而已。

       并且有些PE文件资料有些地方介绍的也不完全正确。或者理解上有少许偏差。前人栽树后人开花啊,觉得这些人真的太强悍了。

目前还有些扫尾工作,现在手工加载的PE文件只用到了ntdll.dll,kernel32.dll,user32.dll,,由于这3个dll几乎是最先加载的Dll,所以基本都能加载的制定的地址,这样输入表不用重新定位就能工作了。但是如果还用到了其他DLL,输入表就需要再处理了。。为了简单起见,我决定还是在手工加载PE文件的时候的一个执行函数完成这个工作。想起来,这样最理想和方便。。完成了这部分工作后,需要验证下.res资源段是否是放在了正确的位置上。

一步一步来吧。。

忽然觉得自己的这个工作就像在做一个壳。。。

通过分析PE文件的加载,有了一些新的思路和想法,Crying(我现在都讨厌自己有新想法了,有了新的想法就想去实现和验证,就又要做工作,哎!好奇害死猫啊)

现在的保护系统---ring0保护系统,无一列外的都保护了OpenProcess,WriteProcess,ReadProcess,keattachprocess,kestackattachprocess甚至OpenThread。

对于OpenProcess我们可以在CreateProcess点,这个时候ring0还没加载,这个时候抢先OpenProcess拿到权限。那不就直接绕过了后面的OpenProcess的防护了吗?这种方法对于像CE这种有代码的东东就很管用了。另一个办法听说据说是通过csrss.exe来拿到权限,具体方法不知道。我猜想ring0再凶悍,也不敢对csrss.exe的OpenProcess不放行吧。纯属猜想,据说听说道听途说,从csrss.exe中DuplicateHandle出来,就把门打开了。

对于WriteProcess,ReadProcess这2个函数只要是Debuger需要这几个函数来读写Debugee的数据。OK,,ring0保护不让我读写了,怎么办??曾经我试图自己想

在ring0中实现这2个函数,---其实目前流行的做法就是你勾了我也勾,,我绕过你的检查就完蛋。确实很简单。不幸的是,有些坏蛋还要先检查这2个内核函数的完整性,就只能自己勾,你勾了我就耍赖不干了。然后呢,我们可以自己添加一个系统服务来绕过这个检查,让debuger调用这2个函数的地方改道调用新的系统服务器,确实是好方法,唯一的难度就是PEDIY自己的专用OD.然而事情没这么简单WriteProcess,ReadProcess这两个函数都要调用keattachprocess,kestackattachprocess来切换到指定的进程,ring0保护者就在这里筑起了一道防线,不允许别人切换进来。骨灰级的做解决办法就是自己实现keattachprocess,kestackattachprocess这2个函数,暴汗!!!windows中找到自己的页面和内存是如此的复杂,在undocument windows 2000 inside 中对于这个内存的计算,页表,页目录,有详细的说明,我这种笨蛋看到这里---满篇汉字没一个字不认识但就是掌握不了。  使我想弄明白的是,windows是一个多任务系统,保护系统程序本身也会被切换出上下文,当被切换回来的时候,是不是也要keattachprocess呢??需要验证啊??如果是,是否可以假装是自己被切换呢??满头雾水,一脸茫然啊 。还有就是ring0如果不停的对peb中的debugport清0,,怎么办呢??似乎很难啊??你如果停止它这个清0的内核线程,肯定很容易被发现啊。。在内核下硬件断点,ring0保护 程序可以先清除了硬件断点,怎么办呢?如何才能命中关键点呢??有一个人提出过可以内核欺骗,把这个peb内存位置置为切换在已经置换的状态,然后在页面置换的中断中处理,如果是保护本身访问这个peb.debugport,OK,,我就告诉你这个debugport确实为0.。。否则该是啥就是啥。。这个技术太高深了,实在是实现不了。。。好在这个保护检查到了debugport非0后使用的是很normal的进程结束技术办法,有人通过钩挂相关的结束函数,不允许程序退出简单的解决了这个问题。。

最后一直有个问题没弄明白,有的保护可以直接越过蓝屏重启机器,应该是一个cpu的中断服务,类似我们手工按下了计算机的reset按键。。改天上图书馆找本老的dos书查一下这个中断号

PE学习.动手写PE.见缝插针 来自:http://bbs.pediy.com/showthread.php?t=138356 此贴用于申请邀请码! 1.PE文件基本结构图 接下来,让我们动手吧! 首先,让我们来明确下目的: 1.构建自己的pe程序,知道了pe文件的结构后,我们就可以按照p 阅读详情

相关推荐

不用CreateProcess:内存加载EXE的PE装载器原理与源码实现

在Windows系统中,进程创建通常依赖CreateProcess等API,但在逆向工程、软件沙箱和自解压打包场景下,开发者常需绕过标准加载链路,直接在内存中映射并运行EXE。这种技术本质是手工实现PE装载器:解析DOS/NT头,映射节区,修复重定位表,填充导入表,并最终跳转入口点。相比系统Loader,它更可控,适合需要深度监控或定制加载环境的场景。文章从基础概念入手,剖析内存加载的核心原理,阐明重定位与IAT处理的技术要点,并结合x86/x64差异、TLS回调和调试验证等工程实践,帮助读者在五分钟内实现

weixin_33417488的博客 180

Windows逆向项目-LoadPE

Windows逆向项目-LoadPE

1739

LoadPE工具

LoadPE工具

反病毒工具-LordPE

LordPE简介一款强大的可执行文件分析辅助脱壳工具,附带16进制编辑器.不包括反汇编模块.它名字叫LordPE而不是LoadPE. 其拥有基于最小功能的PE修改方式.对于win32平台下如果不将样本拖到其中分析看看,还叫分析恶意程序吗?可见其非常常用实用.

KD的疯狂实验室 1万+

loadPE查壳工具

不多说了,查壳工具,信息安全必备之神兵利器

LoadPE源代码

LoadPE源代码

实验五——手工编写PE文件

【实验名称】 手工编写PE文件 【实验目的】 1.了解PE文件的概念、结构 2.熟悉PE编辑查看工具,详细了解PE文件格式 3.重点分析PE文件文件头、引入表、引出表,以及资源表 【实验原理】 1.PE文件概述 PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL) 2.PE文件结构 3.PE文件各部分描述 MS-DOS

Onlyone_1314的博客 8926

LoadPE工具(修改了可正常运行).rar

LoadPE工具(修改了可正常运行)."_"

PE文件格式详解(手工实现一个可执行文件)

【转载文章-看雪学院】非常经典 http://www.pediy.com/kssd/index.html 其实还是很多细节的地方没弄懂,保存下来,认真分析分析。【文章标题】: 手写可执行程序 【文章作者】: dncwbc 【作者邮箱】: dnc2588@163.com 【作者QQ号】: 182445917 【软件名称】: Hello World! 【软件大小】: 2.5K 【下载地址

kouhong_lady的专栏 4283

loadpe工具(1-4)

好用的PE文件查看分析工具,能查看PE文件各段,各种文件信息。

LoadPE 无病毒版

LoadPE目前网上大多数都在病毒,这个已经用卡巴杀过了。没有病毒。大家放心使用。

程序员自我修养阅读笔记——可执行文件的装载过程

1 可执行文件的装载过程 1.1 进程虚拟地址空间   一个可执行文件被装载到内存变成程序后(进程和程序的区别在于一个是静态的一个是动态的,程序就是菜谱,进程就是厨师参考菜谱做菜的过程),拥有自己独立的地址空间。该地址空间是一个虚拟的地址空间,在该进程看来该空间内包含内核和自身,32bit系统该空间的大小是4GB,64bit系统是2的64次方-1bit。也就是说,一个程序实际上能够用到的虚拟内存空间实际上是小于理论值的,因为操作系统需要占用。 1.2 装载的方式   静态装入:将程序执行时所需要的指令和数据

梦的灰色边沿... 2878

loadpe最新版豪华版中文

loadpe最新版豪华版中文2014.7.11无毒的

PE格式:手工实现各种脱壳后的修复

PE(Portable Executable)导入表是Windows操作系统中可执行文件(如DLL和EXE)的一部分,用于记录该文件所依赖的外部模块和函数。导入表是PE文件结构中的一部分,负责描述程序在运行时需要引用的外部符号,以便操作系统在加载程序时能够解析这些符号并正确地链接到相应的函数或模块。

微软技术分享 6095

FANUC机器人PROFINET通讯方式组态

6 然后对模块进行命名及更改IP地址,点击“Network Detection”,进行扫描,会生成下图,双击商科模块会生成下边的对话框,对模块进行命名及更改IP地址,在“Permanent Name”处点对勾,完成后点击“Apply Name及Apply”进行命名。此处注意,上图左上在线在不了,网络扫描处上面也灰色的,扫描不了。5双击abcc-prt-2-port RT(FW1.13),生成下面图标,在右边点击1、2把原来内容删掉,从新在左侧加载 ,使1、2是输出,3、4为输入,完成后点击OK。

dxs93的博客 8427

HC-05蓝牙模块详细配置、连接与使用过程

用手按着模块上的按键,再给蓝牙模块上电。当蓝牙模块上的灯慢闪的时候就说明进入了配置模式了。在配置蓝牙的时候一定要将串口助手按这个要求配置:设置波特率 38400,数据位 8 位,停止位 1 位,无校验位,这是固定操作! 根据蓝牙的主从模式进行不同的设置,二者主要区别就在于AT+ROLE这个指令如果这里没返回OK可能有一下几种情况:如果正常返回OK,那就可以进行下一步了 配置蓝牙密码的时候,特别是配置HC05,密码必须加双引号"",否则不能正常设置!!!! 给从机模式蓝牙配置好之后,将蓝牙重

qq_51688022的博客 2万+

可执行文件的装载与进程

可执行文件的装载与进程 进程虚拟地址空间 程序是一个静态的概念,是一些预先编译好的指令和数据集合的一个文件 进程是一个动态的概念,是程序运行时的一个过程 C语言指针大小的位数与虚拟空间的位数相同 #include<stdio.h> int main() { int a = 10; int* p = &a; printf("%ld\n",sizeof(p));//8 可得出64位平台下指针位64位,即8字节 return 0; } 程序在运行时处于操作系

blll0的博客 1138

2026年数学建模国赛B题无线电干扰源的快速自动定位与清除 论文详细解析

数学建模竞赛论文无线电干扰源的快速自动定位与清除2026 年高教社杯全国大学生数学建模竞赛 B 题完整求解论文交会定位、极大极小测点优化、自适应多频道搜索与定向源恢复的统一建模模型、算法、代码、图表与验证一体化交付本文研究圆形目标区域中多个未知无线电干扰源的快速检测、定位与清除问题,建立了由误差楔交会模型、角度观测信息模型、分层勘测模型、鲁棒射线交会模型和定向覆盖反馈模型组成的统一求解框架。模型同时覆盖题目中的四个子问题:多测向射线形成的多边形定位区域及直径、第二个测点的极大极小优选、全向源自动搜索清除策略

YOLO 357

链接、装载与库(五) 可执行文件的装载

1. 进程虚拟地址空间 程序和进程有什么区别:程序(或者狭义上讲可执行文件)是一个静态的概念,它就是一些预先编译好的指令和数据集合的一个文件;进程则是一个动态的概念,它是程序运行时的一个过程,很多时候把动态库叫做运行时(Runtime)也有一定的含义。 每个程序被运行起来以后,它将拥有自己独立的虚拟地址空间(Virtual Address Space),这个虚拟地址空间的大小由计算机的硬件平台决定,具体地说是由CPU的位数决定的。硬件决定了地址空间的最大理论上限,即硬件的寻址空间大小,比如32位的硬件平台决

lin的博客 413

YOLOV26详解 从原理到部署

计算机视觉领域最具影响力的目标检测框架迎来重大里程碑。2026年1月,Ultralytics 正式发布 YOLOv26——这不是一次简单的版本迭代,而是一场面向边缘计算时代的架构重构。本专栏基于 Ultralytics 官方技术白皮书、YOLO Vision 2025 大会首发内容及国际前沿研究成果,系统拆解 YOLOv26 从算法原理到工程落地的全栈技术体系。与常规教程不同,我们聚焦与,帮助你在端侧 AI 部署的实战中掌握核心竞争力。

u012133341的博客 2013

万字长文带你由浅入深夯实ARM汇编基础——汇编指令及寻址方式最全梳理(附示例)!

见到汇编就害怕?读完这篇,扫除汇编拦路虎!!(示例丰富,可做手册,随手查阅!)

车载系统攻城狮 1万+

程序员的自我修养--链接、装载与库笔记:可执行文件的装载与进程

可执行文件只有装载到内存以后才能被CPU执行。 1. 进程虚拟地址空间 程序和进程有什么区别:程序(或者狭义上讲可执行文件)是一个静态的概念,它就是一些预先编译好的指令和数据集合的一个文件;进程则是一个动态的概念,它是程序运行时的一个过程,很多时候把动态库叫做运行时(Runtime)也有一定的含义。 每个程序被运行起来以后,它将拥有自己独立的虚拟地址空间(Virtual Address Sp...

网络资源是无限的 1351

PentAGI自动渗透测试平台搭建与使用

但是PentAGI的缺陷也比较明显,一个是自动化程度高带来过程的介入困难,整个渗透的过程都交给AI自动决策,无法进行人工调整,耗时较长;从上述过程来看PentAGI似乎是一个比较“可用”的AI自动化渗透测试平台,但是在继续等待测试的过程中,PentAGI的一些缺点也暴露了出来,一个是测试的过程非常漫长,因为PentAGI是使用配置大模型API key的方式全自动运行,支持openai、deepseek等主流LLM大模型,过程中不需要人工介入,会不断自动调整,所以比较依赖于大模型本身的响应速度。

墨痕诉清风的博客 2399

【读书笔记】【程序员的自我修养 -- 链接、装载与库(二)】进程虚拟地址空间、装载与动态链接、GOT、全局符号表、共享库的组织、DLL、C++与动态链接

进程虚拟地址空间、装载与动态链接、GOT、全局符号表、共享库的组织、DLL、C++与动态链接

多丰富下自己呀 6461

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 48

FFmpeg 开发(01):FFmpeg 编译和集成

尽管 FFmpeg 功能强大,但是由于其采用的是带有传染性的 LGPL/GPL 开源协议,所以一些大厂基本上都是自己独立开发类似的音视频处理库,甚至在接口和组织模块上模仿 FFmpeg 。

字节流动 1万+
上一篇: VB6逆向工程浅析
vbsourcecode
博客等级 码龄17年 19粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值