首页
社区
课程
招聘
[讨论]贴段代码 ,大家评评看,还未测试
发表于: 2009-6-6 01:05 4703

[讨论]贴段代码 ,大家评评看,还未测试

2009-6-6 01:05
4703



.data
hInstance dd 0	;Dll's module handle


 jmpurl  db 0B8H,090h,090h,090h,090h,0FFH,0E0H,090h,090h,090h,090h,090h,090h,090h,090h,090h,090h,090h,090h,090h
         
.data?  ;This is Share , Link.exe Add "/SECTION:.bss,S" (RadASM  is  "/SECTION:.bss|S")
	
 hHook                           dd ?    ;hookid is Share
.code

SetProcLong  proc  uses edx edi ,lpLong:DWORD,lpNewLong:DWORD,lpNewPro:DWORD
LOCAL Lenth,hMainHeap,lpMainHeap,hProcess,lpApi
LOCAL szBuf[20]:BYTE
push lpLong
pop lpApi
  invoke GetCurrentProcessId
  invoke OpenProcess,PROCESS_VM_OPERATION or PROCESS_VM_WRITE,FALSE,eax  
   mov hProcess ,eax
    ;jmp  wirte
   Get_instr_len:
    .while  TRUE
      invoke  Getinstrlen ,lpApi   
      add Lenth,eax
      add lpApi,eax
      .break  .if (Lenth>7)	               
    .endw
  .if  lpNewPro!=NULL

      invoke GetProcessHeap
      mov hMainHeap,eax
      invoke HeapAlloc,hMainHeap,0,Lenth+6
      mov lpMainHeap,eax
     push  edi 
         
 ;lpNewPro_out
                
     lea edi,lpNewPro      
     mov [edi],eax
;write_api_bak:
    xor edi,edi
    .while  TRUE
      mov al, BYTE ptr [lpLong+edi]
      add edi,1
      mov BYTE ptr szBuf[edi], al
     .break  .if (edi>Lenth)
   .endw

  ;set  jmp xxx
 
    lea edx,szBuf 
    mov BYTE ptr [edx+Lenth],0e9h   ;jmp
    mov eax,lpLong
    add eax,Lenth
    mov DWORD ptr [edx+Lenth+1],eax
  ;write NewPro     
   xor edi,edi
   mov eax,lpLong
   mov edi,Lenth
   add edi,eax
   invoke  WriteProcessMemory,hProcess, edi ,addr szBuf ,7 ,NULL         
   .endif
 wirte:
  
   lea edx,jmpurl
   mov eax,lpNewLong 
   mov DWORD ptr [edx+1],eax ;xxx
   pop edx
  invoke  WriteProcessMemory,hProcess, lpLong ,addr jmpurl ,Lenth ,NULL
   invoke CloseHandle,hProcess
 mov eax,TRUE
      ret 
SetProcLong endp


这个函数的作用是HOOK API
程序首先OpenProcess打开虚拟页面写权限
然后 用反汇编引擎LED32里的Getinstrlen循环判断首地址开始的完整指令长度,addr,直到大于7个字节,这样获得一超过7个字节的几条完整指令的长度,为 Lenth
然后申请一段空间,并输出地址到参数,把原函数(API)开始的  Lenth 长度代码循环写入申请的空间,在写入 jmp,  lpLong  + Lenth ,实现模拟原函数执行的功能
然后修改函数的开始为
mov eax,XXXX
jmp eax
nop
....
其中 XXXX 为hook处理函数地址,我们的API

这段代码肯定还可以优化,也可能存在错误,欢迎大家指正,谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不是吧 现在的HOOK都流水化了啊

我都直接看代码写的,不用那么高级的东西
2009-6-6 01:07
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
3
呵呵 ,流水化方便点
2009-6-6 01:14
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
4
xor edi,edi
   
    .while  TRUE
        
      mov al, BYTE ptr [lpLong+edi]
      add edi,1
      mov BYTE ptr szBuf[edi], al
            
      .break  .if (edi>Lenth)
                             
    .endw

这段代码我想达到的作用是从lpLong处拷贝Lenth个字节到变量szBuf ,不知道代码有错吗?还有更简洁的代码吗?
2009-6-6 01:25
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
5
;set  jmp xxx

    lea edx,szBuf   
    mov BYTE ptr [edx+Lenth],0e9h   ;jmp
   
    mov eax,lpLong
    add eax,Lenth
    mov DWORD ptr [edx+Lenth+1],eax

   
这段接上段 把 jmp XXX 拷贝到变量szBuf 的lpLong处,这里代码有错不?可以更简洁的吗?
2009-6-6 01:39
0
雪    币: 2307
活跃值: (983)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=非安全;637272]xor edi,edi
   
    .while  TRUE
        
      mov al, BYTE ptr [lpLong+edi]
      add edi,1
      mov BYTE ptr szBuf[edi], al
            
...[/QUOTE]

MOV ESI,offset lpLong
mov edi,offset szBuf
mov ecx,Lenght
rep movsb
这样行吗?
2009-6-6 02:09
0
雪    币: 357
活跃值: (3118)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
7
如果开头有是jxx或者call,你的hook就没有了,用LED32得到指令长度不是第一次见到

以前有人在这里发过代码,你的复制,修改jmp这些东西太初级了吧,有什么好问的。。
2009-6-6 03:32
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
8
嗯 ,可行 ,谢谢回复

不过

mov edi,offset szBuf

这句会报错啊

改成这样行不?

   mov esi, lpLong
    lea edi,szBuf
    mov ecx,Lenth
    rep movsb

搬移指令 movsb  

http://blog.sina.com.cn/s/blog_4ed7378b01000asl.html
2009-6-6 07:18
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
9
呵呵,这个代码是很初级,但初级的东西我才会问问的

以前有人在这里发过代码,估计也是我吧,也收到过同样的jm*或者call情况下hook无效的评论

对于jmp call这类使用相对地址的,复制完指令同时修正相对地址即可,代码还没完善
2009-6-6 07:22
0
雪    币: 357
活跃值: (3118)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
10
确实是你。。怪人
2009-6-6 17:30
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
做什么用?论坛有HOOK API的库~蛮好用的
2009-6-6 17:57
0
游客
登录 | 注册 方可回帖
返回
//