流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4392回复:26

谁有暴力搜索4G空间,高效点的代码!

楼主#
更多 发布于:2002-06-21 21:26
偶写了一个用异常处理的方法!又慢又不稳定!
谁有跟好的解决方案!!

最新喜欢:

baoyibao99baoyib...
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
zsb9527
驱动小牛
驱动小牛
  • 注册日期2002-05-31
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-22 20:05
 
偶写了一个用异常处理的方法!又慢又不稳定!
谁有跟好的解决方案!!


我没有写过。
但是用Softice进行4G空间的搜索时候比较快的。
在Win98下使用的是0x30这个选择子。这个选择子描述的是0-4G
的可读可写内存。在Win2000下好像是0x10吧。

既然是可读可写的内存我想就没有必要进行异常处理了。

如果不是异常处理的问题的话,你就要改进算法了。
在Softice里面应该进行的是字符串匹配算法吧。
小子,从今天开始,你就是华府的低等下人,9527就是你的终身代号。 [img]http://www.driverdevelop.com/forum/upload/zsb9527/2002-06-25_6.jpg[/img]
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-22 20:31
SOFTICE对内存的搜索是保证存在的不会产生无效内存它只搜索存在的页,就不会产生异常!
我的算发没问题,就搜索"MZ"关键字!
我想主要的问题是异常处理需要大量的CPU时间!
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-22 20:34
我没有写过。
但是用Softice进行4G空间的搜索时候比较快的。
在Win98下使用的是0x30这个选择子。这个选择子描述的是0-4G
的可读可写内存。在Win2000下好像是0x10吧。

既然是可读可写的内存我想就没有必要进行异常处理了。

如果不是异常处理的问题的话,你就要改进算法了。
在Softice里面应该进行的是字符串匹配算法吧。
------------------------------------------------------------------------
直接搜要结构化异常以处理页不存在异常,softice估计由于了解物理页帧库只是能看存在页(不存在页的内容就是???????,hehe).
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-22 20:40
我没有写过。
但是用Softice进行4G空间的搜索时候比较快的。
在Win98下使用的是0x30这个选择子。这个选择子描述的是0-4G
的可读可写内存。在Win2000下好像是0x10吧。

既然是可读可写的内存我想就没有必要进行异常处理了。

如果不是异常处理的问题的话,你就要改进算法了。
在Softice里面应该进行的是字符串匹配算法吧。
------------------------------------------------------------------------
直接搜要结构化异常以处理页不存在异常,softice估计由于了解物理页帧库只是能看存在页(不存在页的内容就是???????,hehe).


对头!!
老哥你有好办法吗??
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-22 21:26
我觉得结构化异常处理就是最好的啦,大失所望?haha
处理物理页帧表或者在页目录与页表中搜存在项实质差不多,缺点太明显,不好。
等等看,哪位兄弟有好办法。
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-23 19:35
我看分析一下哪俩个进程读写API可能有帮助吧!
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
Nouk
驱动中牛
驱动中牛
  • 注册日期2001-08-22
  • 最后登录2006-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-06-24 10:30
我看分析一下哪俩个进程读写API可能有帮助吧!

That\'s Kernel Function Call.
Taiwan's Driver Developer
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-06-25 21:43
我说的是 USER API
ReadProcessMemory
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-06-26 09:01
我说的是 USER API
ReadProcessMemory
 

霍藿,高见,人家正是要搜API的地址,那ReadProcessMemory从哪里来?
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-06-26 09:12
流氓兔的意思是仿照ReadProcessMemory来构造自己的函数。我看了一下,ReadProcessMemory->ntdll!NtReadVirtualMemory->内核服务例程,而内核服务例程预处理后就KeAttachProcess,并直接repz movsd,地址无效怎办?其实它也用的是结构化异常处理。
hoho,搞不懂“又慢又不稳定”怎会?
Nouk
驱动中牛
驱动中牛
  • 注册日期2001-08-22
  • 最后登录2006-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-06-26 10:03
我说的是 USER API
ReadProcessMemory
 

ccc
ReadProcessMemory->ntdll!NtReadVirtualMemory
ReadProcessMemory->VxD Service.
That\'s the user mode wrapper.
So I say kernel function.
Becaz u says u need to analysis it....
Taiwan's Driver Developer
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-06-26 12:39
那ReadProcessMemory从哪里来
-------------------------------------------------------------------------
在NT/2000下,直接用int2e好了,几句话而已,病毒使用完全可以;9x下也类似用未公开的VxdCall。XP用sysenter这个似乎不必,我在别人的XP上仍可用int2e。总的来说,要有几个版本是个大缺点。
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-06-26 12:40
流氓兔的意思是仿照ReadProcessMemory来构造自己的函数。我看了一下,ReadProcessMemory->ntdll!NtReadVirtualMemory->内核服务例程,而内核服务例程预处理后就KeAttachProcess,并直接repz movsd,地址无效怎办?其实它也用的是结构化异常处理。
hoho,搞不懂“又慢又不稳定”怎会?

我看了ReadProcessMemory他也调用了其他的API偶看这条路是行不通了!
搜索一俩个地址看不效率,要对整个4G空间搜索就慢了!有太多的不存在页!就会产生N多异常!!哪就慢了。
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-06-26 12:44
我看了ReadProcessMemory他也调用了其他的API
-------------------------------------------------------------------------
你用的是98?2000?
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-06-26 12:48
有太多的不存在页!就会产生N多异常
-----------------------------------------------------------------------
可以先Query在读取。
另外,你是不是try块里直接狂读呀,如果是发现一页第一个DWORD就有异常,直接跳过此页,似乎没那么慢呀。
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-06-26 12:58
有太多的不存在页!就会产生N多异常
-----------------------------------------------------------------------
可以先Query在读取。
另外,你是不是try块里直接狂读呀,如果是发现一页第一个DWORD就有异常,直接跳过此页,似乎没那么慢呀。


你这也是个好方法!但可靠性不高!对部分系统可能不行!
我用的是98+2K
我在nsfocus看到了这个虽然不能解决4G搜索但还是用用的!他省掉了很多的异常!!
void shellcodefn()
{
   int         *except[3];
   FARPROC     procgetadd=0;
   char        *stradd;
   int         imgbase,fnbase,i,k,l;
   HANDLE      libhandle;
   _asm {
     jmp          nextcall
     getstradd:   pop    stradd
                  lea    EDI,except
            mov    eax,dword ptr FS:[0]
            mov    dword ptr [edi+0x08],eax
            mov    dword ptr FS:[0],EDI
    }
    except[0]=0xffffffff;
    except[1]=stradd-0x07;
/* 保存异常结构链和修改异常结构链,SHELLCODE接管异常 */

    imgbase=0x77e00000;
/* 搜索KERNEL32.DLL 的起始其实地址 */

         call getexceptretadd
   }
/* 得到异常后的返回地址 */
   for(;imgbase<0xbffa0000,procgetadd==0;){
       imgbase+=0x10000;
/*  模块地址是64K为单位,加快速度*/
       if(imgbase==0x78000000) imgbase=0xbff00000;
/*  如果到这还没有搜索到,那可能是WIN9X系统 */
       if(*( WORD *)imgbase==\'ZM\'&& *(WORD *)
       (imgbase+*(int *)(imgbase+0x3c))==\'EP\'){
/* 模块结构的模块头 */
         fnbase=*(int *)(imgbase+*(int *)(imgbase+0x3c)+0x78)+imgbase;
         k=*(int *)(fnbase+0xc)+imgbase;
         if(*(int *)k ==\'NREK\'&&*(int *)(k+4)==\'23LE\'){
/* 模块名 */
             libhandle=imgbase;
/* 得到模块头地址,就是模块句柄 */
             k=imgbase+*(int *)(fnbase+0x20);
             for(l=0;l<*(int *) (fnbase+0x18);++l,k+=4){
                   if(*(int *)(imgbase+*(int *)k)==\'PteG\'&&*(int *)(4+imgbase+*(int *)k)==\'Acor\'){
/* 引出名 */
                   k=*(WORD *)(l+l+imgbase+*(int *)(fnbase+0x24));
                   k+=*(int *)(fnbase+0x10)-1;
                   k=*(int *)(k+k+k+k+imgbase+*(int *)(fnbase+0x1c));
                   procgetadd=k+imgbase;
/* API地址 */
                   break;
             }
          }
        }
    }
}
// 搜索KERNEL32。DLL模块地址和API函数 GetProcAddress地址
// 注意这儿处理了搜索页面不在情况。

   _asm{
       lea edi,except
          mov eax,dword ptr [edi+0x08]
       mov dword ptr fs:[0],eax
   }
/* 恢复异常结构链 */


if(procgetadd==0) goto  die ;
/* 如果没找到GetProcAddress地址死循环 */
  die: goto die  ;

  _asm{

getexceptretadd:   pop  eax
             push eax
             mov  edi,dword ptr [stradd]
             mov dword ptr [edi-0x0e],eax
             ret
/* 得到异常后的返回地址,并填写到异常处理模块 */

/* 异常处理模块 */
errprogram:         mov eax,dword ptr [esp+0x0c]
             add eax,0xb8
             mov dword ptr [eax],0x11223344 //stradd-0xe
/* 修改异常返回EIP指针 */
             xor eax,eax              //2
/* 不提示异常 */
             ret                  //1
/* 异常处理返回 */
execptprogram:     jmp errprogram              //2 bytes stradd-7
nextcall:          call getstradd              //5 bytes
   }
}
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-06-26 13:02
要写病毒就用上面的例子!写程序的话就用API好了!就算解决问题了吧!!
谢谢大家的关心和支持,来者有分!!!
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-06-26 13:15
它的办法是有特殊性的,只需搜部分。


不用API可以搜的非常快,我试了我开始说的4k4k得跳过,非常快,你试试。

另外,NT架构下的病毒可以直接用NativeAPI而无需函数地址。
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-06-27 20:20
它的办法是有特殊性的,只需搜部分。


不用API可以搜的非常快,我试了我开始说的4k4k得跳过,非常快,你试试。

另外,NT架构下的病毒可以直接用NativeAPI而无需函数地址。

我发现4K的条速度还是不快,可是比以前快了!
你是用VC写的吗?我发现如果不用汇编级调试是不可能通过的!用
VC不适合写这东西!它是用寄存器变量的,异常处理修改地址内容是不行的!非得找出变量使用的寄存器,修改掉才行!不然就进入死循环了!
谢谢你的在吃回复!!
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
上一页
游客

返回顶部