首页
社区
课程
招聘
[求助]求一个vc2005编写的例程(Themida脱壳)
发表于: 2011-1-14 15:57 5145

[求助]求一个vc2005编写的例程(Themida脱壳)

2011-1-14 15:57
5145
最近在研究themida的加壳程序,现在就差修复oep了,由于目标程序可能是vc2005写的(主要是有msvcp80.dll和msvcr80.dll两个文件,也可能是2008写的),我自己一直用vc6,要自己弄又要下载又要配置,而且怕影响我原来vc6的工作环境,请各位大虾提供一个不加壳的例程给参照一下,在壳里跟代码不是人干的,谢谢了

以下是oep的代码

01138A12   8138 50450000    CMP DWORD PTR DS:[EAX],4550
01138A18  ^75 E9            JNZ SHORT TERA.01138A03
01138A1A   0FB748 18        MOVZX ECX,WORD PTR DS:[EAX+18]
01138A1E   81F9 0B010000    CMP ECX,10B
01138A24   74 1B            JE SHORT TERA.01138A41
01138A26   81F9 0B020000    CMP ECX,20B
01138A2C  ^75 D5            JNZ SHORT TERA.01138A03
01138A2E   83B8 84000000 0E CMP DWORD PTR DS:[EAX+84],0E
01138A35  ^76 CC            JBE SHORT TERA.01138A03
01138A37   33C9             XOR ECX,ECX
01138A39   3988 F8000000    CMP DWORD PTR DS:[EAX+F8],ECX
01138A3F   EB 0E            JMP SHORT TERA.01138A4F
01138A41   8378 74 0E       CMP DWORD PTR DS:[EAX+74],0E
01138A45  ^76 BC            JBE SHORT TERA.01138A03
01138A47   33C9             XOR ECX,ECX
01138A49   3988 E8000000    CMP DWORD PTR DS:[EAX+E8],ECX
01138A4F   0F95C1           SETNE CL
01138A52   8BC1             MOV EAX,ECX
01138A54   6A 02            PUSH 2 ;估计以上的代码被偷了
01138A56   A3 CC85A801      MOV DWORD PTR DS:[1A885CC],EAX
01138A5B   FF15 38B75301    CALL DWORD PTR DS:[153B738]              ; msvcr80.__set_app_type ;我就是通过这个API找到OEP的
01138A61   6A FF            PUSH -1
01138A63   FF15 ECB65301    CALL DWORD PTR DS:[153B6EC]              ; msvcr80._encode_pointer
01138A69   59               POP ECX
01138A6A   59               POP ECX
01138A6B   A3 84ABD101      MOV DWORD PTR DS:[1D1AB84],EAX
01138A70   A3 88ABD101      MOV DWORD PTR DS:[1D1AB88],EAX
01138A75   FF15 34B75301    CALL DWORD PTR DS:[153B734]              ; msvcr80.__p__fmode
01138A7B   8B0D 1C89A801    MOV ECX,DWORD PTR DS:[1A8891C]
01138A81   8908             MOV DWORD PTR DS:[EAX],ECX
01138A83   FF15 30B75301    CALL DWORD PTR DS:[153B730]              ; msvcr80.__p__commode
01138A89   8B0D 1889A801    MOV ECX,DWORD PTR DS:[1A88918]
01138A8F   8908             MOV DWORD PTR DS:[EAX],ECX
01138A91   A1 2CB75301      MOV EAX,DWORD PTR DS:[153B72C]
01138A96   8B00             MOV EAX,DWORD PTR DS:[EAX]
01138A98   A3 74ABD101      MOV DWORD PTR DS:[1D1AB74],EAX
01138A9D   E8 AC080000      CALL A.0113934E
01138AA2   E8 AC0A0000      CALL A.01139553

可以的话发到 xiaohang99@gmail.com

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
下断 kernel32.GetSystemTimeAsFileTime,  那个是VC8程序调用的首个API, 离OEP才最近。

ps:  随便找个VC8的程序看下:
00402212 t>/$  E8 AD030000   CALL tg3.004025C4   //OEP
00402217   \.^ E9 35FDFFFF   JMP tg3.00401F51
0040221C   />  55            PUSH EBP
0040221D   |.  8BEC          MOV EBP,ESP
0040221F   |.  81EC 28030000 SUB ESP,328
00402225   |.  A3 78614000   MOV DWORD PTR DS:[406178],EAX
0040222A   |.  890D 74614000 MOV DWORD PTR DS:[406174],ECX
00402230   |.  8915 70614000 MOV DWORD PTR DS:[406170],EDX
00402236   |.  891D 6C614000 MOV DWORD PTR DS:[40616C],EBX
0040223C   |.  8935 68614000 MOV DWORD PTR DS:[406168],ESI
00402242   |.  893D 64614000 MOV DWORD PTR DS:[406164],EDI
00402248   |.  66:8C15 90614>MOV WORD PTR DS:[406190],SS


OEP下面那个JMP跳到这儿了:
00401F51   /> /6A 58         PUSH 58
00401F53   |. |68 B0494000   PUSH tg3.004049B0
00401F58   |. |E8 BF050000   CALL tg3.0040251C
00401F5D   |. |33DB          XOR EBX,EBX
00401F5F   |. |895D E4       MOV [LOCAL.7],EBX
00401F62   |. |895D FC       MOV [LOCAL.1],EBX
00401F65   |. |8D45 98       LEA EAX,[LOCAL.26]
00401F68   |. |50            PUSH EAX                                                           ; /pStartupinfo
00401F69   |. |FF15 28404000 CALL DWORD PTR DS:[<&KERNEL32.GetStartupInfoA>]                    ; \GetStartupInfoA
00401F6F   |. |C745 FC FEFFF>MOV [LOCAL.1],-2
00401F76   |. |C745 FC 01000>MOV [LOCAL.1],1
00401F7D   |. |64:A1 1800000>MOV EAX,DWORD PTR FS:[18]
00401F83   |. |8B70 04       MOV ESI,DWORD PTR DS:[EAX+4]
00401F86   |. |BF 10BC5D00   MOV EDI,tg3.005DBC10
00401F8B   |> |6A 00         /PUSH 0
00401F8D   |. |56            |PUSH ESI
00401F8E   |. |57            |PUSH EDI
00401F8F   |. |FF15 24404000 |CALL DWORD PTR DS:[<&KERNEL32.InterlockedCompareExchange>]        ;  kernel32.InterlockedCompareExchange
00401F95   |. |85C0          |TEST EAX,EAX
00401F97   |. |74 18         |JE SHORT tg3.00401FB1
00401F99   |. |3BC6          |CMP EAX,ESI
00401F9B   |. |75 07         |JNZ SHORT tg3.00401FA4
00401F9D   |. |33F6          |XOR ESI,ESI
00401F9F   |. |46            |INC ESI
00401FA0   |. |8BDE          |MOV EBX,ESI
00401FA2   |. |EB 10         |JMP SHORT tg3.00401FB4
00401FA4   |> |68 E8030000   |PUSH 3E8                                                          ; /Timeout = 1000. ms
00401FA9   |. |FF15 14404000 |CALL DWORD PTR DS:[<&KERNEL32.Sleep>]                             ; \Sleep
00401FAF   |.^|EB DA         \JMP SHORT tg3.00401F8B
00401FB1   |> |33F6          XOR ESI,ESI
00401FB3   |. |46            INC ESI
00401FB4   |> |A1 0CBC5D00   MOV EAX,DWORD PTR DS:[5DBC0C]
00401FB9   |. |3BC6          CMP EAX,ESI
00401FBB   |. |75 0A         JNZ SHORT tg3.00401FC7
00401FBD   |. |6A 1F         PUSH 1F
00401FBF   |. |E8 5C030000   CALL <JMP.&MSVCR80._amsg_exit>
00401FC4   |. |59            POP ECX
00401FC5   |. |EB 2F         JMP SHORT tg3.00401FF6
00401FC7   |> |A1 0CBC5D00   MOV EAX,DWORD PTR DS:[5DBC0C]
00401FCC   |. |85C0          TEST EAX,EAX
00401FCE   |. |75 20         JNZ SHORT tg3.00401FF0
00401FD0   |. |8935 0CBC5D00 MOV DWORD PTR DS:[5DBC0C],ESI
00401FD6   |. |68 60414000   PUSH tg3.00404160
00401FDB   |. |68 58414000   PUSH tg3.00404158
00401FE0   |. |E8 2F050000   CALL <JMP.&MSVCR80._initterm_e>
00401FE5   |. |59            POP ECX                                                            ; 楼主你的程序返回大概到这里。
00401FE6   |. |59            POP ECX




楼主你那个函数返回后, 应该会到 MSVCR80._initterm的下面那里,  
总之离OEP有点远...
2011-1-14 17:04
0
雪    币: 2089
活跃值: (3111)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上的,可是可以看到,我标注的代码位置以上全是无意义且不执行的代码,问题是到底themida偷掉了多少代码????!!!!!
这个themida版本好像是最新的2.1.6.0
2011-1-14 20:36
0
雪    币: 2089
活跃值: (3111)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
以下是论坛里以前的vc6的oep:
0040xxxx >/$  55                       push    ebp
  0040xxxx  |.  8BEC                     mov     ebp, esp
  0040xxxx  |.  6A FF                    push    -1
  0040xxxx  |.  68 70684100              push    00416870
  0040xxxx  |.  68 F8304000              push    <jmp.&MSVCRTD._except_handler3>           
  0040xxxx  |.  64:A1 00000000           mov     eax, dword ptr fs:[0]
  0040xxxx  |.  50                       push    eax
  0040xxxx  |.  64:8925 00000000         mov     dword ptr fs:[0], esp
  0040xxxx  |.  83C4 94                  add     esp, -6C
  0040xxxx  |.  53                       push    ebx
  0040xxxx  |.  56                       push    esi
  0040xxxx  |.  57                       push    edi
  0040xxxx  |.  8965 E8                  mov     dword ptr [ebp-18], esp
  0040xxxx  |.  C745 FC 00000000         mov     dword ptr [ebp-4], 0
  0040xxxx  |.  6A 02                    push    2
     以上部分被破坏,下面随不同程序稍有不同,脚本能正确将它还原.
  0040xxxx  |.  FF15 708A4100            call    dword ptr [<&MSVCRTD.__set_app_type>]     
  0040xxxx  |.  83C4 04                  add     esp, 4
  0040xxxx  |.  C705 20794100 FFFFFFFF   mov     dword ptr [417920], -1
  0040xxxx  |.  A1 20794100              mov     eax, dword ptr [417920]
  0040xxxx  |.  A3 30794100              mov     dword ptr [417930], eax
  0040xxxx  |.  FF15 8C8A4100            call    dword ptr [<&MSVCRTD.__p__fmode>]    ;相对不变可供搜索        
  0040xxxx  |.  8B0D 0C794100            mov     ecx, dword ptr [41790C]              ;相对不变可供搜索
  0040xxxx  |.  8908                     mov     dword ptr [eax], ecx                 ;相对不变可供搜索
  0040xxxx  |.  FF15 688A4100            call    dword ptr [<&MSVCRTD.__p__commode>]  ;相对不变可供搜索      
  0040xxxx  |.  8B15 08794100            mov     edx, dword ptr [417908]
  0040xxxx  |.  8910                     mov     dword ptr [eax], edx
  0040xxxx  |.  A1 648A4100              mov     eax, dword ptr [<&MSVCRTD._adjust_fdiv>]
  0040xxxx  |.  8B08                     mov     ecx, dword ptr [eax]
  0040xxxx  |.  890D 14794100            mov     dword ptr [417914], ecx
  0040xxxx  |.  E8 D6010000              call    004030E0
  0040xxxx  |.  833D D0764100 00         cmp     dword ptr [4176D0], 0
  0040xxxx  |.  75 0E                    jnz     short 00402F21
  0040xxxx  |.  68 D0304000              push    004030D0
  0040xxxx  |.  FF15 608A4100            call    dword ptr [<&MSVCRTD.__setusermatherr>]   
  0040xxxx  |.  83C4 04                  add     esp, 4
  0040xxxx  |>  E8 8A010000              call    004030B0
  0040xxxx  |.  68 14754100              push    00417514
  0040xxxx  |.  68 10744100              push    00417410
  0040xxxx  |.  E8 73010000              call    <jmp.&MSVCRTD._initterm>

不知道现在2008的差别会那么大啊~~~
2011-1-14 20:39
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
你弄错了, 你顶楼贴的是个函数的正常代码, 没有乱码的。
2011-1-14 20:50
0
雪    币: 2089
活跃值: (3111)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
6
好的,我想我找到了,谢谢楼上的,接下去看看怎么重建。
由于themida把kernel32的很多函数给模拟了,下断根本没用,而且它还老侦测断点。最后还是通过静态搜代码搜到的。
现在的问题是,怎么把那些模拟了的函数给恢复出来,IAT表的位置我已经找到了,但很多api函数都指向了themida创建的内存空间。有什么思路可以还原??~~~
2011-1-14 21:32
0
游客
登录 | 注册 方可回帖
返回
//