首页
社区
课程
招聘
[原创]手写可执行程序
发表于: 2007-7-27 02:26 66158

[原创]手写可执行程序

2007-7-27 02:26
66158
收藏
免费 9
支持
分享
最新回复 (77)
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
太好了,收藏。
2010-3-4 17:40
0
雪    币: 219
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
写的不错,学习了。
2010-3-8 12:57
0
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
牛人,还没有听说过手写呢
2010-3-8 13:57
0
雪    币: 6790
活跃值: (4441)
能力值: (RANK:600 )
在线值:
发帖
回帖
粉丝
54
楼主的耐心值得钦佩,为写一个pe文件生成器提供极好的资料。
2010-3-8 15:28
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
55
至此,我们已经完成了PE结构的编写。是不是已经大功告成了呢?别着急,为了让我们写的程序可以运行,我们还要
完成.text(代码段), .rdata(只读数据段),data(全局变量数据段)三个段的实体部分。
首先编写.text段,他紧接着PE结构后面,但是我们如何编写这些内容呢?前面已经说过,.text段中存放所有的可执行
代码(机器码),我们可以通过先编写汇编指令(调用MessageBoxA和ExitProcess两个函数),然后反汇编出机器代码抄
到这里就可以了。这里有一点要注意,我们在为MessageBoxA函数传递参数时,如何将“Hello World!”字符串以及消息
框的标题“消息框”字符串传过去呢?这就要用到我们的.data(全局变量数据段)了,我们可以把这两个字符串放到这个段
中,然后把字符串的偏移首地址作为参数传给MessageBoxA即可。因为要以200h对齐,所以剩余部分用零补齐,最终得到
的代码如下:

00400 6A 00 68 00 30 40 00 68 07 30 40 00 6A 00 E8 07 j.h.0@.h0@.j.?
00410 00 00 00 6A 00 E8 06 00 00 00 FF 25 08 20 40 00 ...j.?...% @.
00420 FF 25 00 20 40
00 00 00 00 00 00 00 00 00 00 00 %. @...........
00430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00470 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................


這個地方的解釋有點太牽強了,最好把後面那倆jmp解釋一下  要不人家看的雲裡霧裡的  不知道爲什麽jmp的地址是這樣的,我翻譯了一下  lz上面提到的機器碼

0040101D      E8 07000000     CALL PE.00401029  //call MessageBox
00401022      6A 00           PUSH 0
00401024      E8 06000000     CALL PE.0040102F  //call ExitProcess
00401029      FF25 08204000   JMP DWORD PTR DS:[402008]
0040102F    - FF25 00204000   JMP DWORD PTR DS:[402000]

402008  和 402000 實際上是FirstThunk的RVA地址啦,  它指向的內容才是內核的PE加載器在加載PE文件的時候獲得的真正的函數地址  最好解釋一下
ps。雖然RadAsm編譯出來是這樣結構的exe程序,其實完全可以設計的不一樣,各個部份位置都可以調整。
2010-6-7 09:05
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
56
PE文件头:是PE相关结构 IMAGE_NT_HEADERS 的简称,其中包含了许多PE装载器用到的重要域。执行体在支持PE文件
结构的操作系统中执行时,PE装载器将从DOS MZ header中找到PE header的起始偏移量,跳过了MS-DOS 实模式残余程序 ,
直接定位到真正的文件头PE header, 长度20byte)。

楼主的这句话有点错误,通过e_lfanew定位到的是到了NT_HEADERS结构,还没有跳过PE标志的.得过了4个字节的PE文件标志才到IMAGE_FILE_HEADER结构的.不过在接下来楼主写的里却已经改正了这个错误.

楼主真是够耐心啊,一个一个的手写进来,觉得你可以用程序来实现填充这样更好呢.


實在看不出來LZ那裡錯了
2010-6-7 09:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
很象高手!呵呵!
2010-8-14 16:55
0
雪    币: 226
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
myd
59
老大好帖子哦!
2011-2-20 21:35
0
雪    币: 278
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
深入简出  很好 很强大 佩服楼主对PE格式的认知程度
2011-2-22 03:47
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
这实际上就是编译器最后生成PE文件的 工作。
2011-2-22 08:42
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
mark一下
2011-5-17 14:05
0
雪    币: 23
活跃值: (31)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
63
真是深入理解pe格式啊
2011-5-17 14:54
0
雪    币: 264
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
** 啊  神人
2011-6-2 12:41
0
雪    币: 1660
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
相当的佩服,好好学习
2011-6-2 13:41
0
雪    币: 500
活跃值: (995)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
感谢楼主,让我这个菜鸟好好理解了PE结构
2011-6-6 09:53
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
67
好牛额…学习
2011-6-6 12:21
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
68
顶呀  太好了
2011-6-6 16:44
0
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
69
真是不错的文章
2011-7-19 13:25
0
雪    币: 121
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
写的很是专业,从另一层面能更加的学习PE了!
2011-8-1 02:57
0
雪    币: 773
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
好文章,收藏起来慢慢学习
2011-10-11 11:19
0
雪    币: 47
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
条理清晰   很好
2011-10-17 00:49
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
73
不错不错,才学程序3个月就已经这水平,佩服
2011-10-24 22:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
74
对了解PE结构有很大的帮助
下次手写个JPEG出来吧
2011-10-25 12:58
0
雪    币: 32
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
75
膜拜膜拜膜拜
2012-7-15 23:42
0
游客
登录 | 注册 方可回帖
返回
//