吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 44424|回复: 243
收起左侧

[原创] 【原创】如何手工构造一个windows程序

    [复制链接]
小俊 发表于 2017-12-27 17:34
本帖最后由 小俊 于 2018-4-23 17:56 编辑

手工构造Windows程序
首先,我们要知道,Windows程序指的是什么,是(.exe)还是(.dll)。不管它是什么,他一定是操作系统规定的以某一种特定的格式的文件。也是就是所谓的PE文件
PE文件格式我在这里不会做非常详细的讲解,网上有其他很多教程
本章的目标就是手工打造弹出一个消息框的Windows程序



Hello.png
需要用到的工具:010editor
为了方便新手,这里我提供一个用汇编写的版本,方便大家做比较
下载地址:https://pan.baidu.com/s/1DAihSCt2i990dxI23phiCg
想知道如何编写的请看我另外的一篇帖子
https://www.52pojie.cn/thread-679902-1-1.html
好了,现在开始
010editor有个很方便的功能,能帮我们解析PE格式
把我们的汇编版本用010editor打开



ins.png

第一次exe文件打开会提示这个框,点击Install安装
这是一个帮我们解析PE格式的插件



2017-12-27_144623.png
我一个一个来解释这些是什么东西
吧第一个展开,我们向来看第一个
第一个是DOS头,需要注意的只有第一个字段,和最后一个字段,其他字段都不重要,可以随便改



2017-12-27_144847.png




2017-12-27_145507.png

第二个是DosStub,意思是在MS-DOS操作系统下,打开这个exe,会执行里面的代码,这个对我们来说一点也不只重要,现在谁还用DOS啊。待会我们构造的时候,这个部分直接不用写



2017-12-27_145911.png

接下来是最重要的NT头
NT头分为3个部分



2017-12-27_150212.png
  • PE标志
  • 文件头
  • 扩展头(也叫可选头,但是里面的字段不可以不写,所以我叫他扩展头,很重要)
PE标识里的内容始终为字符PE



2017-12-27_150523.png
接下来是文件头



2017-12-27_150759.png




2017-12-27_151429.png
扩展头



2017-12-27_151915.png
导入表为什么我要将导入表呢,因为我们的程序需要用到MessageBoxA这个函数,所以我们需要导入这个函数,这个函数是在user32.dll这个模块中的,所以我们需要导入。
除了用导入表找到函数API地址,我还有另外一种方法,就是动态获取,遍历kernel.dll的导出表找到loadlibrary函数地址,然后在用loadlibrary函数加载user32.dll,然后遍历user32.dll的导出表,找到MessageBoxA就可以了,有兴趣看我另一篇帖子:https://www.52pojie.cn/thread-674684-1-1.html说了这么多,导入表在哪呢? 导入表在数据目录表的第二项,也就是扩展头的最后一个数组的第二项,里面保存了导入表的RVA和大小



2017-12-27_154808.png
这里我们需要用RVA转文件偏移了
RVA是0x2100,我们先找0x2100在那个区段
先看.text段, .text段RVA为0x1000,大小没有超过0x1000,所以肯定不在 .text 区段



2017-12-27_155258.png
还有一个 .rdata 段,只读数据段,RVA为0x2000,大小为0x200,所以0x2100就在 .rdata 正中间,



2017-12-27_155650.png
.rdata 区段首文件偏移为0x400
所以,导入表在文件偏移0x500的位置



2017-12-27_160014.png
到这里,Demo程序分析的差不多了,现在开始手工构造了新建一个十六进制文件



2017-12-27_161130.png
先构造DOS头



2017-12-27_161335.png
然后是文件头和PE标志



2017-12-27_161806.png
然后是扩展头



2017-12-27_162513.png
然后是区段描述表
一个代码段,一个数据段



2017-12-27_162945.png
然后填充空数据,试一下能不能跑起来
在代码段写一个C3,汇编就是ret,要不然会报错



2017-12-27_163318.png
双击没有反应,说明没错,因为我什么代码都没写
如果提示 此应用程序无法运行,或者这个程序不是windows程序,这样错误,说明你构造的有问题框架没问题,现在继续构造导入表 ,在rdata段构造,开始位置为0x400



2017-12-27_172225.png
然后调用MessageBoxA,在代码段中修改代码
修改为:0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x00, 0x6A, 0x00, 0xFF, 0x15, 0x60, 0x20, 0x40, 0x00, 0xC3 (图中有错误,CALL的是死地址,应该用FF15指令CALL IAT)
也就是汇编指令push 0 push 0 push 0 push 0 call MessageBoxA



2017-12-27_172407.png
运行



2017-12-27_172655.png
弹出了个没文字的信息框,因为我们给的参数都是0
想让他显示文字,只需要把字符串地址push进去就能显示文字了

分享一个非常非常好用的PE工具visualPE,15pb韦老师编写,这是我目前用过最好用的PE工具,每个字段都有详细的注释
下载地址:https://pan.baidu.com/s/1svfRnjHvgnS0F6nYfT-mMA



2017年12月29日 更新俩张图片,方便大家理解PE,图片来源:Malware Unicorn (独角兽) 团队

免费评分

参与人数 105吾爱币 +103 热心值 +98 收起 理由
saturnxv + 1 + 1 谢谢@Thanks!
52user + 1 + 1 谢谢@Thanks!
thatana + 1 + 1 用心讨论,共获提升!
Smt、萌牙 + 1 用心讨论,共获提升!
13297398667 + 1 谢谢@Thanks!
tztt3033 + 1 + 1 用心讨论,共获提升!
f8561 + 1 谢谢@Thanks!
恋上丶柠檬酸 + 1 虽然看不懂但还是觉得蛮厉害的
科技创造价值 + 1 + 1 我很赞同!
l47559 + 1 + 1 用心讨论,共获提升!
lzhzy597 + 1 谢谢@Thanks!
huzibbs + 1 + 1 我很赞同!
jmy668xjtu + 1 我很赞同!
CrazyMelody + 1 + 1 谢谢@Thanks!
466 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
帅气的小莲 + 1 + 1 谢谢@Thanks!
海天一色001 + 1 + 1 谢谢@Thanks!
cwl + 1 + 1 热心回复!
shuaiqiu2222 + 1 + 1 我很赞同!
likte + 1 + 1 谢谢@Thanks!
mono + 1 + 1 我很赞同!
wuhanbin + 1 + 1 不明觉厉
风予 + 1 + 1 热心回复!
whdfog + 1 + 1 用心讨论,共获提升!
Variazioni + 1 + 1 我很赞同!
laaland + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Ganlv + 1 + 1 我很赞同!
SuperF + 1 + 1 用心讨论,共获提升!
zhiyi1120 + 1 + 1 谢谢@Thanks!
吾爱木天 + 1 + 1 用心讨论,共获提升!
未知了 + 1 + 1 用心讨论,共获提升!
hfut + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
半夜挑灯复习 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zldaidai + 1 + 1 我很赞同!
djkzhengjun + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
FireCloud + 1 + 1 热心回复!
steve-atc + 1 + 1 我很赞同!
苏半仙儿 + 1 + 1 我很赞同!
23dd + 1 + 1 我很赞同!
周章章 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
bdshr + 1 + 1 我很赞同!
芝士就是力量 + 1 + 1 谢谢@Thanks!
dongwin + 1 + 1 我很赞同!
GD:1412 + 1 + 1 用心讨论,共获提升!
超二 + 1 + 1 热心回复!
zamliage + 1 + 1 这真是大神之力啊!
yuze0804007 + 1 + 1 拜见大佬
SomnusXZY + 1 + 1 热心回复!
swest + 1 + 1 用心讨论,共获提升!
至尊舞帝 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
boyving + 2 + 1 我很赞同!
mein + 1 + 1 我很赞同!
幽龙天 + 1 + 1 我很赞同!
junty + 1 已答复!
2286390676 + 1 + 1 我很赞同!
felixyuan + 1 + 1 我很赞同!
许褚 + 1 + 1 我很赞同!
773827986 + 1 + 1 具visualPE,由15pb的韦老师编写这波广告100分
a7816995 + 1 + 1 谢谢@Thanks!
skyformat99 + 1 + 1 我很赞同!
1154h + 1 + 1 学习学习,楼主辛苦了
lookerJ + 1 + 1 我很赞同!
xinkui + 1 + 1 谢谢@Thanks!
gfjykldd + 1 + 1 用心讨论,共获提升!
zhaojunkai + 1 + 1 必须赞一个,流程清晰!
qwerttqqaz + 1 + 1 我很赞同!
Allyn0303 + 1 + 1 我很赞同!
戏言19 + 1 + 1 用心讨论,共获提升!
xtstc + 1 + 1 我很赞同!
okzhlq + 1 + 1 用心讨论,共获提升!
kilkilo502 + 1 我很赞同!
cr7890 + 1 + 1 谢谢,极简exe写得最通俗详细的了!
没有如果儿 + 1 + 1 我很赞同!
2864095098 + 1 + 1 热心回复!
wtzql + 1 + 1 用心讨论,共获提升!
qwe159 + 1 + 1 谢谢@Thanks!
嘎子科技 + 1 + 1 我很赞同!
hbwazxf + 1 + 1 我很赞同!
一杯柠檬苏打 + 1 + 1 谢谢@Thanks!
C-ARan + 1 + 1 热心回复!
Ravey + 1 + 1 谢谢@Thanks!
Stillthekid + 1 + 1 我很赞同!
zy1234 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Layna + 1 + 1 用心讨论,共获提升!
shenjingqq + 1 + 1 谢谢@Thanks!
羽月莉音 + 1 + 1 我很赞同!
鸡儿在学习 + 1 + 1 谢谢@Thanks!
疯狂醉虎 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
/bq + 1 + 1 谢谢@Thanks!
one486 + 1 + 1 谢谢@Thanks!
itfanr + 1 谢谢@Thanks!
明月相照 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
745237896 + 1 + 1 辛苦了 兄弟
沙朗牛排 + 1 + 1 热心回复!
废宅小五 + 1 + 1 谢谢@Thanks!
wangxp + 1 + 1 谢谢@Thanks!
zjjxyz + 1 + 1 谢谢@Thanks!
秋丶 + 1 + 1 说实话我看不懂,不过感觉楼主很厉害
godwan + 1 图片挂了兄弟 显示不出来

查看全部评分

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

xuanqing 发表于 2018-1-4 07:28
自己动手编写个pe是了解这种格式最方便的方法了
明月相照 发表于 2017-12-27 21:59
本帖最后由 明月相照 于 2017-12-27 22:04 编辑

其实LZ这个贴说明白了些,WINDOWS或DOS程序和汇编之间的对应关系;各种高低级语言、汇编之间的转换和编译。明白了相应的原理后,就用这个方法直写出程序。算是一种对程序语言的逆向,因为用过编程语言后再来看这个方式,真的来编程好吃力呀。
通过这个了解PE文件的结构,对于逆向、脱壳等学习还是很有帮助的。
Poner 发表于 2017-12-27 17:45
都同学 发表于 2017-12-27 17:50
学习一波,楼主辛苦了
 楼主| 小俊 发表于 2017-12-27 17:52
Poner 发表于 2017-12-27 17:45
好像在哪看过类似的文章

完完全全原创,没有产考过任何文章,这是我对PE的理解,自己构造的,产考过任何文章全家暴毙

点评

我可没说你抄了别人的东西当原创,不用对家里人说这么重的话吧!! 我的意思是之前看过类似的文章也是手工打造一个PE 方法应该不一样  详情 回复 发表于 2017-12-27 17:59
我是你老大 发表于 2017-12-27 17:54
学习了!
Poner 发表于 2017-12-27 17:59
小俊 发表于 2017-12-27 17:52
完完全全原创,没有产考过任何文章,这是我对PE的理解,自己构造的,产考过任何文章全家暴毙

我可没说你抄了别人的东西当原创,不用对家里人说这么重的话吧!!
我的意思是之前看过类似的文章也是手工打造一个PE 方法应该不一样
 楼主| 小俊 发表于 2017-12-27 18:02
Poner 发表于 2017-12-27 17:59
我可没说你抄了别人的东西当原创,不用对家里人说这么重的话吧!!
我的意思是之前看过类似的文章也是手 ...

给我帖子上个色把,发了好多技术贴,根本没人看,现在随便发一个外挂帖,几万浏览量轻轻松松

点评

你发错版块了额 以后这样的技术文章你应该发在脱壳破解区  详情 回复 发表于 2017-12-27 18:05
Poner 发表于 2017-12-27 18:05
小俊 发表于 2017-12-27 18:02
给我帖子上个色把,发了好多技术贴,根本没人看,现在随便发一个外挂帖,几万浏览量轻轻松松

你发错版块了额  以后这样的技术文章你应该发在脱壳破解区
Poner 发表于 2017-12-27 18:12
写的还算是可以   给你个精华   希望以后能写出更好的文章!
 楼主| 小俊 发表于 2017-12-27 18:24
Poner 发表于 2017-12-27 18:12
写的还算是可以   给你个精华   希望以后能写出更好的文章!

感谢大佬给我信心,我会持续跟新技术贴的

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
龙傲天Mary苏 + 1 + 1 我很赞同!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 13:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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