首页
社区
课程
招聘
Hying壳的OEP脚本bugfix
发表于: 2005-8-22 19:59 8921

Hying壳的OEP脚本bugfix

2005-8-22 19:59
8921

修复个bug,似乎还是2对付后门安全些。

///////////////////////////////////////////////////////////////////////////
// Hying's PE-Armor v0.7x Unpacking Script
//
// Author:      forgot
// OS:          Windows XP SP2
// Date:        2005-07-24
// Config:      Ignore all exceptions
// Feature:     Anti Anti Debugging
//              OEP Detection
//              Imports Decryption(unfinished)
//

var                     i
var                     j
var                     k

var                     ldrbase
var                     ldrsize

var                     importflag

var                     apioutputstr
var                     apivalloc
var                     apicfilew
var                     apigmodhw
var                     apigetheap

var                     patch1

var                     setfakeoep

start:

                        // get API address

                        gpa     "VirtualAlloc", "Kernel32.Dll"
                        mov     apivalloc, $RESULT
                        gpa     "CreateFileW", "Kernel32.Dll"
                        mov     apicfilew, $RESULT
                        gpa     "GetModuleHandleW", "Kernel32.Dll"
                        mov     apigmodhw, $RESULT
                        gpa     "OutputDebugStringA", "Kernel32.Dll"
                        mov     apioutputstr, $RESULT
                        gpa     "GetProcessHeap", "Kernel32.Dll"
                        mov     apigetheap, $RESULT

                        // hide debugger

                        dbh
                        mov     i, apioutputstr         // ignore OutputDebugStringA trap
                        asm     i, "pop eax"            // "retn xx" will be detected
                        add     i, $RESULT
                        asm     i, "add esp, 4"
                        add     i, $RESULT
                        asm     i, "jmp eax"

                        // bypass GetProcessHeap

                        sub     esp, 4                  // call stack frame
                        mov     [esp], eip
                        mov     eip, apigetheap
                        rtu

                        mov     i, eax
                        add     i, 0C

                        and     [i], 2           // clear 27-31 bit

                        // get some info

                        bp      apivalloc
                        eob     __get_depack_info
                        run

__get_depack_info:
                        bc      apivalloc               // hijack VirtualAlloc
                        rtu                             // get address of depacked loader
                        mov     ldrbase, eax

                        // game start

                        bp      apicfilew
                        eob     __cfw
                        run

__cfw:
                        bc      apicfilew
                        rtu

                        bp      apigmodhw
                        eob     __gmhw
                        run

__gmhw:
                        bc      apigmodhw
                        rtu

                        // bypass ZwSetInfromationThread

                        find    eip, #6AFE#             // push -2
                        find    $RESULT, #8D85#         // lea  eax, [ebp+xxxxxxxx]
                        mov     i, $RESULT

                        add     i, 2
                        mov     j, [i]
                        add     j, ebp
                        mov     eip, j

                        // pre-get FAKE entrypoint

                        find    eip, #8B4424CC#         // mov  eax, [esp-34]
                        mov     setfakeoep, $RESULT

                        // skip decrypt procedure

                        find    eip, #87E6#             // xchg esi, esp
                        find    $RESULT, #E2??#         // loop xxxxxxxx
                        find    $RESULT, #87E6#         // xchg esi, esp
                                                        // anti junk instructions
                        mov     i, $RESULT
                        bp      i
                        eob     __decrypt_0
                        run

__decrypt_0:
                        bc      i

                        // process imports

                        find    eip, #8985#             // mov  [ebp+xxxxxxxx], eax
                        find    $RESULT, #83A5#         // and  dword ptr [ebp+xxxxxxxx], 0
                        find    $RESULT, #8B85#         // mov  eax, [ebp+xxxxxxxx]
                        mov     i, $RESULT
                        bp      i
                        eob     __test_it_enc
                        run

__test_it_enc:
                        bc      i
                        sto

                        mov     importflag, eax

                        // I don't have a target with no imports protections, sorry.
                        //cmp   eax, 0
                        //jz    __normal_it

                        //deihohoho

                        // bypass ZwQueryInformationProcess detection

                        find    eip, #5A775175#         // "ZwQueryInformationProcess"
                        find    $RESULT, #0BC0#         // or   eax, eax
                        mov     i, $RESULT
                        bp      i
                        eob     __zw_q
                        run

__zw_q:
                        bc      i
                        mov     eax, 0

                        // anti anti dumpping

                        find    eip, #64FF3530000000#   // push dword ptr fs:[0]
                        find    $RESULT, #C74020#       // mov  dword ptr [eax+20], xxxxxxxx
                                                        // length = 7
                        mov     i, $RESULT
                        bp      i
                        eob     __antidump
                        run

__antidump:
                        bc      i
                        add     eip, 7

                        // Go Go Go

                        find    eip, #334104#           // xor  eax, [ecx+4]
                        find    $RESULT, #034108#       // add  eax, [ecx+8]
                        find    $RESULT, #33410C#       // add  eax, [ecx+C]

                        find    $RESULT, #648F01#       // pop  dword ptr fs:[ecx]
                        mov     i, $RESULT
                        bp      i
                        eob     __seh_3
                        run

__seh_3:
                        bc      i

                        // go to OEP

                        eoe     __find_bound
                        run

__find_bound:

                        mov     i, [eip]
                        and     i, 0FFFF
                        cmp     i, 8562                 // bound   eax, [ebp+4148E8]
                        je      __bound
                        esto
                        jmp     __find_bound

__bound:
                        mov     i, setfakeoep
                        bp      i
                        eob     __final
                        esto

__final:

                        sti
                        mov     i, eax
                        bp      i
                        eob     __oep
                        run

__oep:
                        bc      i

                        // game over

                        ret


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 224
活跃值: (75)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
发现好东西了 谢谢版主阿
2005-8-22 20:00
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
3
不会被Hying砍,刚丝?
2005-8-22 20:03
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
最初由 baby2008 发布
不会被Hying砍,刚丝?

2005-8-22 20:10
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
5
2005-8-22 20:24
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
6
真不知那个后门到底要清哪些位才好。
又改成2了
2005-8-22 21:12
0
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7


我的为什么会这样呢
2005-8-22 21:26
0
雪    币: 224
活跃值: (75)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
最初由 闪电狼 发布





........

我也有同样的错误(用修改过的脚本)
2005-8-23 00:40
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
9
是的脚本上还是有问题 !!!
2005-8-23 08:50
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
10
某种程度上,还有几个点有暗桩,脚本没有绕过去,其实,最最难的是校验如何过,你这样到OEP没有用,有东西没有解码.某些程序可以过,有些是肯定过不去了.
呵呵,给Hying留点东西吧,不然都得曝光了.
2005-8-23 16:49
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
11
补丁都恢复了。。。到OEP没问题
2005-8-23 16:54
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
12
可是,这样的脚本是害人了,呵呵,校验没有躲,往下走不多远就得飞.等于白走一趟OEP.

必须重视校验,否则很多人都不知道怎么飞的.不信我给你一个加壳的给你跑,效验不光补补丁的问题可以解决,我现在都头大.

0038020C     C1E9 02                     shr     ecx,2
00380211     AD                          lodsd
00380212     3185 5C0F4100               xor     dword ptr ss:[ebp+410F5C],eax    ;
00380218     49                          dec     ecx
00380219     0BC9                        or      ecx,ecx
0038021B   ^ 75 F4                       jnz     short 00380211

这样不想办法找到真正的计算值,靠补丁回来的会变,我跟的苦极了,当然加壳时候没有用特殊代码加密选项,这节就不理可以过了.
2005-8-23 16:56
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
2005-8-23 17:09
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
14
时机不对吧。。。
要么版本不一样
2005-8-23 17:27
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
15
OEP_adree:
  find eip,#010c38ad#
  bp $RESULT
  esto
  bc $RESULT
  mov tmp,0  
  mov tmp,edi
  add tmp,eax
  mov OEP,[tmp]
  eval "现在已经找到OEP的地址为 {OEP}"
  msg $RESULT
  bp OEP
  esto
  bc OEP
  

原理:
0037FD56     010C38                      add     dword ptr ds:[eax+edi],ecx
0037FD59     AD                          lodsd
0037FD5A     0BC0                        or      eax,eax
0037FD5C   ^ 75 F8                       jnz     short 0037FD56

在37fd56处必然出现OEP,呵呵,这里取出来OEP,一个软断点肯定到.
你的越界常常乱套,刚刚跑了一下,呵呵.接你的SeH

或者堆栈平衡法,现在已经可以使用,过渡到代码抽取处,一个程序段的翻身就可以过去OEP,一举两得的办法.
2005-8-23 17:43
0
游客
登录 | 注册 方可回帖
返回
//