首页
社区
课程
招聘
[旧帖] [求助]用c实现向PE添加新节遇到的问题 0.00雪花
发表于: 2009-10-8 09:33 1713

[旧帖] [求助]用c实现向PE添加新节遇到的问题 0.00雪花

2009-10-8 09:33
1713
大家好~
我知道汇编的标号代表一个代码的偏移. 所以也能够知道一段代码的长度和地址.
用汇编的话.最后添加新节的时候.
WriteFile(hFile,//这里就是新节代码标号就可以.

但是我想用c写一个同样的程序. c有和asm一样的可以确定一段代码的偏移和地址的一个"特性"吗
.

而且新节的代码要该怎么写呢 ?       谢谢大家!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
2
确定一段代码的偏移和地址可以这样:
void start(){;Body}
void end(){_asm _emit 0x90}
SizeStart=(DWORD)end-(DWORD)start
AddrStart=(DWORD)&start
新节的代码要该怎么写呢 ?
先在区块表中增加区块,更新FileHeader.NumberOfSections,PE->OptionalHeader.SizeOfImage等信息
然后memset和memcpy写数据
具体的在论坛找相关资料,比较多的
2009-10-8 16:56
0
雪    币: 31
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢斑竹.
关键就是向新节怎么写数据不懂.
我看一个示例
    ;****************************************
    ;在文件的最后写入我们的新节:
    ;****************************************
    invoke SetFilePointer, hFile, 0, 0, FILE_END
    push 0
    lea eax, dwFileReadWritten
    push eax
    push [My_Section.SizeOfRawData]
    lea eax, vStart
    push eax
    push hFile
    call WriteFile
...

vStart:
    call nStart
nStart:
    pop ebp
    sub ebp, offset nStart    ;得到新节在文件中的实际偏移地址

    ;显示对话框:
    push MB_OK or MB_ICONINFORMATION
    lea eax, szMyCaption[ebp]
    push eax
    lea eax, szMyMsg[ebp]
    push eax
    push 0
    call MessageBoxA_Addr[ebp]

    ;恢复原入口地址。当这个节执行完毕后,就回到了原来的文件入口处继续执行:
    mov eax, Old_ImageBase[ebp]
    add eax, Old_AddressOfEntryPoint[ebp]
    push eax
    ret

    ;变量定义:
    MessageBoxA_Addr        dd    0
    szMyMsg                 db    "为PE文件添加新节显示启动信息", 13, 10, 13, 10,\
                                  "老罗的缤纷天地",13, 10, "http://www.LuoCong.com", 0
    szMyCaption             db    "老罗的病毒基础教程系列 by LC", 0
    Old_ImageBase           dd    0
    Old_AddressOfEntryPoint dd    0
vEnd:

这样就很容易的写了.但是用c该怎么办呢 ? 然道是要先把这段代码翻译成二进制然后WriteFile嘛?
没有办法和汇编这样 简便些的 ?

还有就是重定位. 转成c我又不知道该怎么做了.  谢谢大家!
2009-10-8 17:11
0
雪    币: 2513
活跃值: (545)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
那你可以先学习C语言
2009-10-8 17:21
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
5
可以在start()里面写内联汇编
恩 多动手学写C
2009-10-8 17:29
0
雪    币: 31
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
6
我正在多写c.否则就用汇编了.这里是正在有不懂的正在请求帮助.

我自己找找吧.~
谢谢大家.
2009-10-8 18:54
0
游客
登录 | 注册 方可回帖
返回
//