能力值:
( 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写数据
具体的在论坛找相关资料,比较多的
|
能力值:
(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我又不知道该怎么做了. 谢谢大家!
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
那你可以先学习C语言
|
能力值:
( LV13,RANK:350 )
|
-
-
5 楼
可以在start()里面写内联汇编
恩 多动手学写C
|
能力值:
(RANK:10 )
|
-
-
6 楼
我正在多写c.否则就用汇编了.这里是正在有不懂的正在请求帮助.
我自己找找吧.~
谢谢大家.
|
|
|