吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4830|回复: 7
收起左侧

[分享] 手写一个小PE

[复制链接]
cagebird 发表于 2015-11-1 00:56
本帖最后由 cagebird 于 2015-11-1 00:57 编辑

闲来无事手写一个小的PE程序,能够弹出一个对话框。经过一个大晚上的时间终于搞定,发一贴子和大家交流探讨一下。
最后EXE文件凑了252字节大小-----爱52(∩_∩),在win7系统测试的,XP应该还可以更小。
一、首先写一个汇编代码用MASM32编译一下(为了省空间没加ExitProcess函数,程序运行结束记得在任务管理器中结束掉):


最后EXE大小为16K,链接obj文件时设置一下文件对齐尺寸4字节



查看生成的文件属性,大小直接降到了684字节,用编译器生成的,用链接器合并节仍然很大,下面我就用winhex手写16进制。

二、根据PE文件的格式把PE头先简单的写出来,需要根据其他数据填写的先写CC,等候再填写。附件(PE-1图)
前期填写比较简单,直接按照格式要求填就行。
00位置:MZ标示,前两位必须是4D 5A;
3C位置:是E_lfanew  PE头位置,指向PE头地址;
04-----3C中间,我们插入我们的PE头,节省空间,内存节对齐粒度正好对着E_lfanew  PE头,设为4字节;
DOS Stub部分可有可无,为节省空间就不要了;
文件创建时间随便;
IMAGE_OPTIONAL_HEADER32长度要计算一下;
所有代码段大小,初始化数据段大小不重要;
程序执行入口RVA一定填好,OEP位置;
代码节和数据节起始RVA不重要;
内存、文件对齐粒度都设置4字节(经过测试200H字节下两个值要相同,不然会出错);
操作系统版本号、校验和、栈设置不太重要,本PE映像版本不能乱填;
数据目录我们只要2项,但后面要多预留8个字节;
节表段我们只要一个;
输入表手工较难设置,需要找准地址,全是16进制容易看花眼,不过我把输入表拆开了,找前面几段不重要的地址塞进去;
messagebox函数前面代号不重要,user32后面的dll也可以不要,系统函数只识别前面名字;
数据区可以不要,随便找个地方引用就是,这里我用的是节表名字,前面加了(52--)标识;
代码部分就是4个PUSH参数,一个CALL跳到JMP,最后再RET返回,



代码部分没有拆开,在后面,共23个字节,刚开始看前面有空余22个字节,
我改了下代码,去了CALL,直接jmp,但是下一句语句地址没法压栈,我在JMP前加了ADD EDX,15     PUSHE EDX两句代码就可以了。



最后生成的文件有点乱,主要是我把输入表分的比较散,仔细看还是没问题。



网盘里有生成的EXE文件,和大家多多交流交流共同学习,亲手写个PE对文件结构理解,逆向破解病毒分析还是很有帮助的。
http://pan.baidu.com/s/1mg6I9ao


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

a87399 发表于 2015-11-1 00:59
赞赞,支持楼主,支持沙发
674274971 发表于 2015-11-1 10:47 来自手机
三生三世 发表于 2015-11-1 11:09
Monitor 发表于 2015-11-1 11:34
X64 还是没支持,运行没效果
Hmily 发表于 2015-11-2 16:38
楼主你上传的图片有问题吧,传哪去了?
 楼主| cagebird 发表于 2015-11-3 21:26
Hmily 发表于 2015-11-2 16:38
楼主你上传的图片有问题吧,传哪去了?

帖子编辑上传时就点个上传,点了好多次才成功。
 楼主| cagebird 发表于 2015-11-3 21:28
307677814 发表于 2015-11-1 11:34
X64 还是没支持,运行没效果

系统不一样,有些字段选择的值也需要改变,我按照win7编写的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 17:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表