| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1336 人关注过本帖
标题:急求东海一鱼兄进来看看
只看楼主 加入收藏
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
歪歪有保护。HooK倒是成功挂上去,但是函数钩不出来

而且我用stud_PE 输入表怎么找不到CreateMutexW这个函数 不是在KERNEL32.dll里么?

CreateMutexW里下断确实可以进去

所以我钩了下CreateFileW

惭愧!钩不出东西来!

2010-09-18 10:18
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
我觉得是不是应该Run跟踪
直接向上一级找出调用CreateMutexW的函数?
然后观察CreateMutexW的调用函数
肯定有关于互斥对象之类的计数变量或者算法
逆向出那个 然后直接跳进那函数 修改堆栈的内容?
2010-09-18 10:24
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 20楼 hahayezhe
hahayezhe兄能放上vc6.0的工程上来不?我机子上没装有.net

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-09-18 11:21
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
你看下就知道了,这又不是.net 一个dll而已
2010-09-18 11:25
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
其实我的想法就是采用这种方式将自己的代码直接挂到歪歪的进程上

然后逆向到调用互斥对象的函数

然后当调用函数启动前 每次都将寄存器和堆栈修改为一个固定的状态

或者能逆向出判断计数的算法更好了
2010-09-18 11:35
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 25楼 hahayezhe
我把那段创建和打开互斥对象的汇编代码转换为pascal假代码, 我汇编学得不乍地,帮个眼看看有错不
程序代码:
0043245A  /$  807C24 04 00  cmp     byte ptr [esp+4], 0
0043245F  |.  53            push    ebx
00432460  |.  55            push    ebp
00432461  |.  56            push    esi
00432462  |.  57            push    edi
00432463  |.  8BF1          mov     esi, ecx
00432465  |.  BD 88835100   mov     ebp, 00518388
0043246A  |.  BB 94835100   mov     ebx, 00518394
0043246F  |.  74 1E         je      short 0043248F
00432471  |.  8BFD          mov     edi, ebp
00432473  |>  FF37          /push    dword ptr [edi]                 ; /MutexName
00432475  |.  6A 00         |push    0                               ; |Inheritable = FALSE
00432477  |.  68 01001F00   |push    1F0001                          ; |Access = 1F0001
0043247C  |.  FF15 50514D00 |call    dword ptr [<&KERNEL32.OpenMutex>; \OpenMutexW
00432482  |.  85C0          |test    eax, eax
00432484  |.  8906          |mov     dword ptr [esi], eax
00432486  |.  75 3F         |jnz     short 004324C7
00432488  |.  83C7 04       |add     edi, 4
0043248B  |.  3BFB          |cmp     edi, ebx
0043248D  |.^ 7C E4         \jl      short 00432473
0043248F  |>  8BFD          mov     edi, ebp
00432491  |>  FF37          /push    dword ptr [edi]                 ; /MutexName
00432493  |.  6A 00         |push    0                               ; |InitialOwner = FALSE
00432495  |.  6A 00         |push    0                               ; |pSecurity = NULL
00432497  |.  FF15 4C514D00 |call    dword ptr [<&KERNEL32.CreateMut>; \CreateMutexW
0043249D  |.  85C0          |test    eax, eax
0043249F  |.  8906          |mov     dword ptr [esi], eax
004324A1  |.  74 14         |je      short 004324B7
004324A3  |.  FF15 48514D00 |call    dword ptr [<&KERNEL32.GetLastEr>; [GetLastError
004324A9 >|.  3D B7000000   |cmp     eax, 0B7                        ;  0B7错误号:当文件已存在时,无法创建该文件。
004324AE >|.  75 20         |jnz     short 004324D0                  ;  创建互斥对象成功,跳转
004324B0  |.  8BCE          |mov     ecx, esi
004324B2  |.  E8 A4010500   |call    0048265B
004324B7  |>  83C7 04       |add     edi, 4
004324BA  |.  3BFB          |cmp     edi, ebx
004324BC  |.^ 7C D3         \jl      short 00432491                  ;  继续创建互斥对象
004324BE  |>  32C0          xor     al, al
004324C0  |>  5F            pop     edi
004324C1  |.  5E            pop     esi
004324C2  |.  5D            pop     ebp
004324C3  |.  5B            pop     ebx
004324C4  |.  C2 0400       retn    4
004324C7  |>  8BCE          mov     ecx, esi
004324C9  |.  E8 8D010500   call    0048265B
004324CE  |.^ EB EE         jmp     short 004324BE
004324D0  |>  B0 01         mov     al, 1
004324D2  \.^ EB EC         jmp     short 004324C0



程序代码:
function CreateOrOpenMutex(i:Integer):Integer;
begin
    esi:=ecx;
    ebp:=$00518388;
    ebx:=$00518394;
    if i<>0 then begin
        edi:=ebp;
    L2:
        eax:=OpenMutex($1F0001,0,dword ptr[edi]);
        if eax<>0 then begin
               ecx:=esi;
               call $0048265B;
               al:=0;
          end else begin
               edi:=edi+4;
               if edi<ebx then goto L2;
               goto L1;
          end;
    end else begin
    L1:
        edi:=ebp;
        eax:=CreateMutex(0,false,dword ptr[edi]);
        dword ptr [esi]:=eax;
        if eax<>0 then begin
           eax:=GetLastError();
           if eax<>$0B7 then begin  //0B7错误号:当文件已存在时,无法创建该文件。
              al:=1;
           end else begin
              ecx:=esi;
              call $0048265B;
              edi:=edi+4;
              if edi<ebx then goto L1;
              al:=0;
           end;
        end;
    end;
    result:=al;
end;




/images/2011/147787/2011051411021524.jpg" border="0" />
2010-09-18 13:43
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
程序代码:
    //ecx作为寄存器传参?
    push ebx//保存寄存器
    push ebp
    push esi
    push edi
    mov esi,ecx
    mov ebp,00518388
    mov ebx,00518394

    cmp   byte ptr [esp+4], 0
    je    short 0043248F{
       mov edi,ebp
           //1F0001值为什么属性?
           //可将0设为1 我们的外挂能否利用这个新句柄
    00432473: OpenMutexW( 1F0001,0,dword ptr [edi])
       dword ptr [esi], eax//ecx应该是个地址,将句柄保存起来了
       test   eax, eax
       jnz   short 004324C7{
           add edi,4 //加后edi 00518392
           cmp edi,ebx //ebx 00518394
           jl      short 00432473
       }
    }
    0043248F: mov edi,ebp //edi 00518388
    00432491: CreateMutexW(0,0,dword ptr [edi])
    mov     dword ptr [esi], eax
    test    eax, eax
    je   short 004324B7{
          GetLastError()
          cmp eax,0B7
          jnz short 004324D0{
              mov ecx,esi
              call 0048265B
              004324B7:edi,4
              cmp edi,ebx
              jl short 00432491
          }
    }
    xor     al, al
    pop     edi//还原
    pop     esi
    pop     ebp
    pop     ebx
这是我的理解
pascal虽然不会,但是大概感觉没错,
我觉得你没必要逆向整个函数,只需要找出规律来就可以
至于汇编我并不擅长,我也只能看懂个大概(鄙视我是搞C++的)
我短消息的群号昨天就给你了
那么留的一个汇编群你都不会加进去问,还问我这菜鸟
2010-09-18 15:09
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
还有 你那地址是怎么得到的?
莫非还有版本关系?
我用OD和IDA直接跳到你那地址
汇编码明显不一样
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-09-18 15:12
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 28楼 hahayezhe
可能是版本的问题,或者你在od试下Ctrl+A(相当于右键-分析-代码分析)
我现在把
0043246A  |.  BB 94835100   mov     ebx, 00518394
改为
0043246A      BB AA835100   mov     ebx, 005183AA                    ;  ASCII "@@"

也可以多开了。
这个常量从代码的作用来看是互斥对象创建和打开个数的上限。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-09-18 15:37
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
还在一处有createmutex
程序代码:
0048268F  |. /75 65         jnz     short 004826F6
00482691  |. |8B7D 08       mov     edi, dword ptr [ebp+8]
00482694  |. |395F 14       cmp     dword ptr [edi+14], ebx
00482697  |. |74 5D         je      short 004826F6
00482699  |. |68 E0B14E00   push    004EB1E0                         ;  UNICODE "Global\{F573DBE6-4456-46fc-8DAE-C13360CB46C8}"
0048269E  |. |8D4D D4       lea     ecx, dword ptr [ebp-2C]
004826A1  |. |FF15 E45C4D00 call    dword ptr [<&MSVCP71.std::basic_>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >
004826A7  |. |57            push    edi
004826A8  |. |8D4D D4       lea     ecx, dword ptr [ebp-2C]
004826AB  |. |895D FC       mov     dword ptr [ebp-4], ebx
004826AE  |. |FF15 EC5C4D00 call    dword ptr [<&MSVCP71.std::basic_>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::append
004826B4  |. |8D4D D4       lea     ecx, dword ptr [ebp-2C]
004826B7  |. |FF15 F45C4D00 call    dword ptr [<&MSVCP71.std::basic_>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::data
004826BD  |. |50            push    eax                              ; /MutexName
004826BE  |. |53            push    ebx                              ; |InitialOwner
004826BF  |. |53            push    ebx                              ; |pSecurity
004826C0  |. |FF15 4C514D00 call    dword ptr [<&KERNEL32.CreateMute>; \CreateMutexW
004826C6  |. |3BC3          cmp     eax, ebx
004826C8  |. |8906          mov     dword ptr [esi], eax
004826CA  |. |74 19         je      short 004826E5
004826CC  |. |FF15 48514D00 call    dword ptr [<&KERNEL32.GetLastErr>; [GetLastError
004826D2  |. |3D B7000000   cmp     eax, 0B7
004826D7  |. |75 0A         jnz     short 004826E3
004826D9  |. |FF36          push    dword ptr [esi]                  ; /hObject
004826DB  |. |FF15 44514D00 call    dword ptr [<&KERNEL32.CloseHandl>; \CloseHandle
004826E1  |. |891E          mov     dword ptr [esi], ebx


/images/2011/147787/2011051411021524.jpg" border="0" />
2010-09-18 17:18
快速回复:急求东海一鱼兄进来看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037360 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved