|
![]() | 作者: 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号