能力值:
(RANK:330 )
26 楼
啊,不好意思,我没说清楚,我说的是EXE,DLL的话得另外想些旁门左道的办法才行了。
另外,并不是用LoadDll来测试,LoadDll无论是DLL还是EXE Unlable都是必然的结果
我也发个程序
source:
procedure TForm2.FormCreate(Sender: TObject);
var
test:DWORD;
begin
test := LoadLibrary('test_InjectDll.dll');
MessageBox(0,Pchar(IntToHex(test,16)),'',MB_OK);
end;
LoadLibrary的功效其实是很神奇的
上传的附件:
能力值:
(RANK:1060 )
27 楼
有效的PE?
能力值:
( LV9,RANK:330 )
28 楼
天热了, 雨停了, 做俯卧撑的也多起来了
能力值:
( LV2,RANK:10 )
29 楼
请问楼主,在B处还把文件长度和160h比较了,这个160h到底是什么啊?
004533C0 /$ 55 push ebp
004533C1 |. 8B6C24 0C mov ebp, dword ptr [esp+C]
004533C5 |. 81FD 60010000 cmp ebp, 160
004533CB |. 56 push esi
004533CC |. 8BF1 mov esi, ecx
004533CE |. 72 2D jb short 004533FD
004533D0 |. 8B5424 0C mov edx, dword ptr [esp+C]
004533D4 |. 8956 08 mov dword ptr [esi+8], edx
004533D7 |. 66:813A 4D5A cmp word ptr [edx], 5A4D
004533DC |. 75 1F jnz short 004533FD
能力值:
(RANK:1130 )
30 楼
喝高了,点错附件了,上面那个是EXE,不是dll
EXE很强大啊~~~ LoadLibrary更强大
上传的附件:
能力值:
(RANK:1130 )
31 楼
满足那3个条件的DLL在某时某刻某处能正常执行,为什么不叫有效的PE
能力值:
( LV2,RANK:10 )
32 楼
peid有时候很白痴的说
能力值:
( LV2,RANK:10 )
33 楼
[QUOTE=cham;477184]请问楼主,在B处还把文件长度和160h比较了,这个160h到底是什么啊?
004533C0 /$ 55 push ebp
004533C1 |. 8B6C24 0C mov ebp, dword ptr [esp+C]
004533C5 |...[/QUOTE]
嗯,多谢cham提醒,此处应该也是判断一个文件是有效PE的比较处。这个0X160应该是PEID默认的文件头的最小值。即DOS-stub+File Header+Optional Header+Data directories+Section Headers的最小值为0x160,就是说如果文件的大小小于最小文件头大小的话,也不是有效的PE,即下面的jb会跳走。
能力值:
(RANK:1060 )
34 楼
何时何刻何处
能力值:
(RANK:1130 )
35 楼
dll基址和加载到内存中的镜像基址一样的时候,重定位表是可以忽略的
能力值:
( LV2,RANK:10 )
36 楼
我要努力学习好和各位开怀畅谈
能力值:
( LV2,RANK:10 )
37 楼
楼主说的好像不对,应该是MZ Header+PE Signature+File Header+Optional Header+Data directories+Section Headers的最小值为0x160吧!MZ Header:64byte;PE Signature:4byte;File Header:20byte;Optional Header+Data directies:224byte;1个Section Header:40byte.所以64+4+20+224+40=352=0x160.这个好像是XP以下是可以的,但是XP最少需要2个段。
能力值:
( LV2,RANK:10 )
38 楼
你那个加法的算法是不对的,你可以尝试修改一下PE头,就像WinUpack那个壳一样,它的MZ Header和PE标志在同一区域内,你那么加就重复了,这样的程序peid一样认为是有效的PE。至于每个段的名字叫什么,可能是我不太专业吧,呵呵。
能力值:
( LV2,RANK:10 )
39 楼
如果结构重叠的话,我这样算确实是错的。还是自己去做个类似的PE吧,不然搞不清!
能力值:
( LV2,RANK:10 )
40 楼
《Windows程序设计》 的有关PE检测代码
///////////////////////////////////////
// ValidPE.cpp文件 #include <afxdlgs.h>
#include "ValidPE.h"
CMyApp theApp;
BOOL CMyApp::InitInstance()
{
// 弹出选色文件对话框
CFileDialog dlg(TRUE);
if(dlg.DoModal() != IDOK)
return FALSE; // 打开检查的文件
HANDLE hFile = ::CreateFile(dlg.GetFileName(), GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox(NULL, "无效文件!", "ValidPE", MB_OK);
}
// 定义PE文件中的DOS头和NT头
IMAGE_DOS_HEADER dosHeader;
IMAGE_NT_HEADERS32 ntHeader;
// 验证过程
BOOL bValid = FALSE;
DWORD dwRead;
// 读取DOS头
::ReadFile(hFile, &dosHeader, sizeof(dosHeader), &dwRead, NULL);
if(dwRead == sizeof(dosHeader))
{
if(dosHeader.e_magic == IMAGE_DOS_SIGNATURE) // 是不是有效的DOS头?
{
// 定位NT头
if(::SetFilePointer(hFile, dosHeader.e_lfanew, NULL, FILE_BEGIN) != -1)
{
// 读取NT头
::ReadFile(hFile, &ntHeader, sizeof(ntHeader), &dwRead, NULL);
if(dwRead == sizeof(ntHeader))
{
if(ntHeader.Signature == IMAGE_NT_SIGNATURE) // 是不是有效的NT头
bValid = TRUE;
}
}
}
}
// 显示结果
if(bValid)
MessageBox(NULL, "是一个PE格式的文件!", "ValidPE", MB_OK);
else
MessageBox(NULL, "不是一个PE格式的文件!", "ValidPE", MB_OK);
::CloseHandle(hFile);
return FALSE;
}
能力值:
( LV2,RANK:10 )
41 楼
牛人的精彩比评!!!