邪恶八进制信息安全团队技术讨论组's Archiver

金州 2005-12-16 00:40

[转载]Http/ftp 文件下载器

文章作者:罗云彬<BR><BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>;  Programmed by 罗云彬, [email]bigluo@telekbird.com.cn[/email]<BR>;  Website: [url]http://asm.yeah.net[/url]<BR>;  LuoYunBin's Win32 ASM page (罗云彬的编程乐园)<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>;  公用子程序部分:通用部分<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>_FillMemory  proto  :DWORD,:DWORD,:DWORD  ;填充内存<BR>_CopyMemory  proto  :DWORD,:DWORD,:DWORD  ;拷贝内存<BR>_GetStringValue  proto  :DWORD,:DWORD    ;转换字符串的值<BR>_GetStringPoint  proto  :DWORD,:DWORD,:DWORD  ;取字符串第N个参数开始指针<BR>;********************************************************************<BR>;  填充内存<BR>;  参数:填充的地址,长度,填充的值<BR>;  相同于:RtlFillMemory<BR>;********************************************************************<BR>_FillMemory  proc  _lpDest,_dwCount,_dwChar<BR><BR>   pushad<BR>   mov  edi,_lpDest<BR>   mov  eax,_dwChar<BR>   mov  ecx,_dwCount<BR>   cld<BR>   rep  stosb<BR>   popad<BR>   ret<BR><BR>_FillMemory  endp<BR>;********************************************************************<BR>;  拷贝内存<BR>;  参数:目标地址,源地址,长度<BR>;  相同于:RtlCopyMemory<BR>;********************************************************************<BR>_CopyMemory  proc  _lpDest,_lpSource,_dwCount<BR><BR>   pushad<BR>   mov  esi,_lpSource<BR>   mov  edi,_lpDest<BR>   mov  ecx,_dwCount<BR>   cld<BR>   rep  movsb<BR>   popad<BR>   ret<BR><BR>_CopyMemory  endp<BR>;********************************************************************<BR>;  转换字符串的值<BR>;  参数:字符串地址,进制(缺省为10进制)<BR>;  返回:数值<BR>;********************************************************************<BR>_GetStringValue  proc  _lpString,_dwBase<BR>   local  @dwValue<BR><BR>   pushad<BR>   mov  ebx,_dwBase<BR>   .if  ebx == 0<BR>     mov  ebx,10<BR>   .endif<BR><BR>   xor  eax,eax<BR>   mov  esi,_lpString<BR>_GSV_Loop:<BR>   mov  cl,[esi]<BR>   inc  esi<BR>   or  cl,cl<BR>   jz  _GSV_LoopEnd<BR>   cmp  cl,20h<BR>   jz  _GSV_Loop<BR>   cmp  cl,'0'<BR>   jb  _GSV_LoopEnd<BR>   cmp  cl,'9'<BR>   ja  _GSV_Check1<BR>   sub  cl,'0'<BR>   jmp  _GSV_CheckOK<BR>_GSV_Check1:<BR>   or  cl,20h<BR>   cmp  cl,'a'<BR>   jb  _GSV_LoopEnd<BR>   cmp  cl,'f'<BR>   ja  _GSV_LoopEnd<BR>   sub  cl,'a'-10<BR>_GSV_CheckOK:<BR>   movzx  ecx,cl<BR>   cmp  ecx,ebx<BR>   jae  _GSV_LoopEnd<BR><BR>   mul  ebx<BR>   add  eax,ecx<BR>   jmp  short _GSV_Loop<BR>_GSV_LoopEnd:<BR>   mov  @dwValue,eax<BR>   popad<BR>   mov  eax,@dwValue<BR>   ret<BR><BR>_GetStringValue  endp<BR>;********************************************************************<BR>;  取字符串第N个参数开始指针<BR>;  参数:字符串地址,第几个参数,分隔符<BR>;  返回:第N个参数指针<BR>;********************************************************************<BR>_GetStringPoint  proc  _lpString,_dwNumber,_dwChar<BR>   local  @dwPoint<BR><BR>   pushad<BR>   <BR>   mov  esi,_lpString<BR>   cld<BR><BR>   mov  ebx,_dwChar<BR>   xor  ecx,ecx<BR>   inc  ecx<BR>   cmp  ecx,_dwNumber<BR>   jz  _GSP_OK    ;如果取第一个参数直接返回<BR>_GSP_Loop:<BR>   lodsb<BR>   or  al,al<BR>   jz  _GSP_Error  ;如果到字符串尾还没有找到,出错<BR>   cmp  al,bl<BR>   jnz  _GSP_Loop<BR>   inc  ecx    ;如果找到分隔符,记数加1<BR>   cmp  ecx,_dwNumber<BR>   jnz  _GSP_Loop<BR>_GSP_OK:<BR>   lodsb<BR>   cmp  al,20h    ;去掉参数前的空格<BR>   jz  _GSP_OK<BR>   dec  esi<BR>   clc<BR>   jmp  _GSP_Return<BR>_GSP_Error:<BR>   stc<BR>_GSP_Return:<BR>   mov  @dwPoint,esi<BR>   popad<BR>   mov  eax,@dwPoint<BR>   ret<BR><BR>_GetStringPoint  endp<BR>;********************************************************************

页: [1]
© 1999-2008 EvilOctal Security Team