论坛: 编程破解 标题: [转帖]ORiEN2.11-2.12脱壳 复制本贴地址    
作者: yongmin [yongmin]    论坛用户   登录
作者:jz838
转贴自:一蓑烟雨
【文章标题】: ORiEN 2.11 - 2.12脱壳
【文章作者】: jz838
【软件名称】: NS2008最新版
【下载地址】: 不提供
【加壳方式】: ORiEN
【保护方式】: 加密壳
【编写语言】: DELPHI
【使用工具】: OD,LORDPE,ImportREC
【操作平台】: WINDOWS
【软件介绍】: 由于涉及到商业软件就不介绍了。
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  Exeinfo PE 检测为 “ORiEN 2.11 - 2.12  ( 1994-2003 http://zalexf.narod.ru )”
  本人壳盲,没见过这个壳只好生动来脱了。呵呵
  用OD载入,停在入口
 
  00946000 > /E9 5D010000    jmp    00946162          //壳入口
  00946005  |CE              into
  00946006  |D1CE            ror    esi, 1
  00946008  |CD 0D          int    0D
  0094600A  |0A2D 2D2D2D2D  or      ch, byte ptr [2D2D2D2D]
  00946010  |2D 2D2D2D2D    sub    eax, 2D2D2D2D
  00946015  |2D 2D2D2D2D    sub    eax, 2D2D2D2D
  0094601A  |2D 2D2D2D2D    sub    eax, 2D2D2D2D
  0094601F  |2D 2D2D2D2D    sub    eax, 2D2D2D2D
  00946024  |2D 2D2D2D2D    sub    eax, 2D2D2D2D
  00946029  |2D 2D2D2D2D    sub    eax, 2D2D2D2D
  0094602E  |2D 2D2D2D2D    sub    eax, 2D2D2D2D
  00946033  |2D 2D2D2D0D    sub    eax, 0D2D2D2D
  00946038  |0A2D 204F5269  or      ch, byte ptr [69524F20]
  0094603E  |45              inc    ebp
 
  先单步F7一次
  00946162    60              pushad
  00946163    E8 783B0000    call    00949CE0                        ; 此处开始使用OEP定律
  00946168    AB              stos    dword ptr es:[edi]
  00946169    3A18            cmp    bl, byte ptr [eax]
 
 
 
  呵呵,熟悉的pushad。利用OEP定律来试试
 
  HR 0012FFA4
  F9运行
  停在这里
  00947ADB    B8 10371E00    mov    eax, 1E3710
  00947AE0    83F8 00        cmp    eax, 0
  00947AE3    74 13          je      short 00947AF8
  00947AE5    05 00004000    add    eax, 00400000                    ; ASCII "MZP"
 
  取消硬件断点
 
  tc eip < 00900000
  停在这里
  005E3710      55            db      55                              ;  CHAR 'U'
  005E3711      8B            db      8B
  005E3712      EC            db      EC
  005E3713      83            db      83
  005E3714      C4            db      C4
  005E3715      F0            db      F0
  005E3716      53            db      53                              ;  CHAR 'S'
  005E3717      B8            db      B8
  005E3718      98            db      98
  005E3719      2E            db      2E                              ;  CHAR '.'
  005E371A      5E            db      5E                              ;  CHAR '^'
  005E371B      00            db      00
  005E371C      E8            db      E8
  005E371D      3B            db      3B                              ;  CHAR ';'
 
 
  感觉有点象OEP,分析一下得出如下代码
 
  005E3710  .  55            push    ebp     //我亲爱的OEP  呵呵
  005E3711  .  8BEC          mov    ebp, esp
  005E3713  .  83C4 F0      add    esp, -10
  005E3716  .  53            push    ebx
  005E3717  .  B8 982E5E00  mov    eax, 005E2E98
  005E371C  .  E8 3B39E2FF  call    0040705C
  005E3721  .  8B1D 2CFC5E00 mov    ebx, dword ptr [5EFC2C]          ;  Ns.005F0BF4
  005E3727  .  8B03          mov    eax, dword ptr [ebx]
  005E3729  .  E8 02A9EAFF  call    0048E030
  005E372E  .  6A 00        push    0                                ; /ShowState = SW_HIDE
  005E3730  .  8B03          mov    eax, dword ptr [ebx]            ; |
  005E3732  .  8B40 30      mov    eax, dword ptr [eax+30]          ; |
  005E3735  .  50            push    eax                              ; |hWnd
  005E3736  .  E8 5548E2FF  call    00407F90                        ; \ShowWindow
  005E373B  .  8B03          mov    eax, dword ptr [ebx]
  005E373D  .  BA 80385E00  mov    edx, 005E3880
 
  用LORDPE脱壳
  ImportREC修复IAT
 
  OEP==1E3710
  自动搜索一下IAT得出
  RAV==001F61F0 大小==00000998
  获取输入表 显示无效函数3个
  001F626C+0040000=5F626C
  001F6280+0040000=5F628C
  001F64C8+0040000=5F64C8
 
  插件修复无效,手动查找。
  重新载入加壳程序
  在数据区定位到5F626C,下内存写入断点F9运行
  009480B3    8807            mov    byte ptr [edi], al
  009480B5    EB 04          jmp    short 009480BB
  009480B7    0BEB            or      ebp, ebx
  009480B9    F9              stc
  看来不是这里 继续F9 真到CPU区显示如下代码
  00948B63    8907            mov    dword ptr [edi], eax            ; kernel32.GetCommandLineA
  00948B65    EB 06          jmp    short 00948B6D
  00948B67    43              inc    ebx
  00948B68    66:B8 83C7      mov    ax, 0C783
  00948B6C    0083 EFFF83C7  add    byte ptr [ebx+C783FFEF], al
 
  此处可以得出001F626C的函数为kernel32.GetCommandLineA
  ImportREC 手动写入函数
  另外两个查找方法同上
 
  最后修复DUMP文件,正常运行。
 
 
 
 
--------------------------------------------------------------------------------
【版权声明】: 本文原创于UNPACK.CN论坛, 转载请注明作者并保持文章的完整, 谢谢!


地主 发表时间: 08-02-17 10:20

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号