首页
社区
课程
招聘
[求助]一个dll,用ida的f5不成功,出现错误,请大家帮助。
发表于: 2013-5-21 11:59 8204

[求助]一个dll,用ida的f5不成功,出现错误,请大家帮助。

2013-5-21 11:59
8204
无壳无花,不知道为何,
可否大家看看

或者直接贴出.c

谢谢

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 3
活跃值: (704)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
 
BOOL __stdcall DllEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
  DWORD v3; // esi@1
  bool v4; // zf@2
  BOOL v6; // eax@10
  BOOL fdwReasona; // [sp+18h] [bp+Ch]@10

  v3 = fdwReason;
  if ( fdwReason )
  {
    if ( fdwReason != 1 && fdwReason != 2 )
      goto LABEL_10;
    if ( dword_10006D4C && !dword_10006D4C(hinstDLL, fdwReason, lpReserved) )
      return 0;
    v4 = _CRT_INIT(hinstDLL, fdwReason, lpReserved) == 0;
  }
  else
  {
    v4 = dword_100067C0 == 0;
  }
  if ( v4 )
    return 0;
LABEL_10:
  v6 = DllMain(hinstDLL, fdwReason, lpReserved);
  fdwReasona = v6;
  if ( v3 != 1 )
  {
LABEL_13:
    if ( !v3 || v3 == 3 )
    {
      if ( !_CRT_INIT(hinstDLL, v3, lpReserved) )
        fdwReasona = 0;
      if ( fdwReasona )
      {
        if ( dword_10006D4C )
          fdwReasona = dword_10006D4C(hinstDLL, v3, lpReserved);
      }
    }
    return fdwReasona;
  }
  if ( !v6 )
  {
    _CRT_INIT(hinstDLL, 0, lpReserved);
    goto LABEL_13;
  }
  return fdwReasona;
}

2013-5-21 12:18
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢朋友,里面有很多函数,不仅是这一个。

后面的函数,都出现了错误了。就是什么sp 分析错误。
2013-5-21 12:45
0
雪    币: 16048
活跃值: (5809)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
IDA官方给了方法解决
b1aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3M7s2u0G2k6s2g2U0N6s2y4Q4x3V1k6V1k6h3y4G2L8i4m8A6L8r3g2J5i4K6u0r3L8h3q4F1N6h3q4D9i4K6u0r3k6X3q4A6L8s2g2J5k6i4y4Q4x3X3g2K6K9s2c8E0L8l9`.`.
ALT+K调整吧.
2013-5-21 15:19
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢,我看看啊
2013-5-25 13:37
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不会,哎。可否高手帮我贴出来?
2013-5-25 13:48
0
雪    币: 70
活跃值: (88)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
  signed int v3; // esi@2
  HMODULE v4; // eax@4
  int v5; // eax@4
  BOOL result; // eax@8
  DWORD *v7; // esi@10
  CHAR LibFileName; // [sp+8h] [bp-30Ch]@4
  CHAR Text; // [sp+10Ch] [bp-208h]@7

  if ( fdwReason == 1 )
  {
    DisableThreadLibraryCalls(hinstDLL);
    v3 = (signed int)&dwTlsIndex;
    do
    {
      *(_DWORD *)v3 = TlsAlloc();
      v3 += 4;
    }
    while ( v3 < (signed int)&dword_100067C0 );
    v4 = GetModuleHandleA("PipJet.dll");
    GetModuleFileNameA(v4, &LibFileName, 0x104u);
    v5 = _mbsrchr(&LibFileName, 92);
    if ( v5 )
      *(_BYTE *)(v5 + 1) = 0;
    lstrcatA(&LibFileName, "PipJet.dat");
    hModule = LoadLibraryA(&LibFileName);
    dword_100065B0 = (int)hModule;
    if ( !hModule )
    {
      wsprintfA(&Text, "无法加载 %s,程?, &LibFileName);
      MessageBoxA(0, &Text, "AheadLib", 0x10u);
    }
    sub_10001140();
    result = hModule != 0;
  }
  else
  {
    if ( !fdwReason )
    {
      v7 = &dwTlsIndex;
      do
      {
        TlsFree(*v7);
        ++v7;
      }
      while ( (signed int)v7 < (signed int)&dword_100067C0 );
      if ( hModule )
        FreeLibrary(hModule);
    }
    result = 1;
  }
  return result;
}

/////////////////////////////////////////////////
BOOL WINAPI TlsSetValue(
  _In_      DWORD dwTlsIndex,
  _In_opt_  LPVOID lpTlsValue
);

/////////////////////////////////////////////////
LPVOID WINAPI TlsGetValue(
  _In_  DWORD dwTlsIndex
);

/////////////////////////////////////////////////
我一下子就看出堆栈不平衡的问题了。
                public Activate
.text:100014A0 Activate        proc near               ; DATA XREF: .rdata:off_10005908o
.text:100014A0                 push    dwTlsIndex      ; dwTlsIndex {esp+4}
.text:100014A6                 call    ds:TlsSetValue  ; this function only has one parameter? NO
.text:100014AC                 push    offset aActivate_0 ; {esp+4}
.text:100014B1                 call    sub_100012E0
.text:100014B6                 call    eax
.text:100014B8                 push    eax             ; {esp+4}
.text:100014B9                 push    dwTlsIndex      ; dwTlsIndex {esp+4}
.text:100014BF                 call    ds:TlsGetValue  ; only one parameter!
.text:100014C5                 xchg    eax, [esp+0]
.text:100014C8                 retn
.text:100014C8 Activate        endp ; sp-analysis failed
.text:100014C8
.text:100014C8 ; ---------------------------------------------------------------------------
.text:100014C9                 align 10h

应该是TlsGetValue与TlsSetValue函数用反了,造成栈无法平衡。

这个跟你的相似:533K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4@1j5h3y4C8L8%4k6W2M7X3k6D9L8%4N6Q4x3X3g2U0L8$3#2Q4x3V1k6I4N6h3g2K6N6r3W2G2L8Y4y4Q4x3V1j5I4x3o6p5$3y4e0f1I4x3g2)9J5c8X3W2V1j5g2)9J5k6s2m8G2M7$3W2@1K9i4k6W2i4K6u0V1M7%4m8Q4x3X3c8$3j5h3I4#2k6g2)9J5k6r3S2S2M7#2)9J5k6r3u0W2k6h3&6Q4x3X3c8X3L8%4g2F1k6q4)9J5k6r3g2J5M7X3!0J5
2013-6-15 03:27
0
游客
登录 | 注册 方可回帖
返回