吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9000|回复: 11
收起左侧

[原创] ORiEN V1.X-V2.X两种思路

  [复制链接]
小生我怕怕 发表于 2009-2-7 22:37
00417000 > /E9 5D010000     jmp ORiEN_V1.00417162           //程序载入OD
00417005   |CE              into                            //单步一步F8
00417006   |D1CE            ror esi,1
00417008   |CE              into
00417009   |0D 0A2D2D2D     or eax,2D2D2D0A
━━━━━━━━━━━━━━━━━━━━━━━━━━
00417162    60              pushad                      //我们继续单步一步F8
00417163    E8 783B0000     call ORiEN_V1.0041ACE0      //我们在这里执行ESP定律
00417168    BF A420AE05     mov edi,5AE20A4             //设置好断点F9运行
0041716D    F2:             prefix repne:
━━━━━━━━━━━━━━━━━━━━━━━━━━
00418ADB    B8 CC100000     mov eax,10CC                //停在了这里,可以发现此时是把OEP的地址赋值EAX
00418AE0    83F8 00         cmp eax,0
00418AE3    74 13           je short ORiEN_V1.00418AF8
00418AE5    05 00004000     add eax,ORiEN_V1.00400000    //这里把我们的基址和当前EAX里的值相加
00418AEA    EB 08           jmp short ORiEN_V1.00418AF4  //上面计算出来的即是我们的OEP
━━━━━━━━━━━━━━━━━━━━━━━━━━
00418AF1  - FFE0            jmp eax      ; ORiEN_V1.004010CC  //一路单步来到这里004010CC这里即我们的OEP
00418AF3    CD EB           int 0EB                           //单步一步F8跟进去
00418AF5    FB              sti
00418AF6    EB 10           jmp short ORiEN_V1.00418B08
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC    55              push ebp                      //我们的OEP
004010CD    8BEC            mov ebp,esp                   //运行LordPE把程序DUMP
004010CF    83EC 44         sub esp,44                    //在运行importRCE修复我们的IAT指针
004010D2    56              push esi                      //发现我们的指针有两个指针是无效的,如下图
004010D3    FF15 E4634000   call dword ptr ds:[4063E4]    //纪录下我们的两个无效指针
004010D9    8BF0            mov esi,eax
004010DB    8A00            mov al,byte ptr ds:[eax]
图1.jpg
━━━━━━━━━数据窗口━━━━━━━━━━━━━
000063A0+我们的基址00400000等于我们指针被加密的地址004063A0
在命令提示行输入D 004063A0,如下
004063A0  00418F21  ORiEN_V1.00418F21          //指针被加密,我们在这里右键下硬件访问断点
004063A4  7C80BDD6  kernel32.lstrlenA          //在我们的OEP:004010CC处同样下上硬件访问断点
004063A8  7C810131  kernel32.lstrcpynA         //Ctrl+F2从新载入程序
004063AC  7C923151  ntdll.RtlMoveMemory
━━━━━━━━━━━━━━━━━━━━━━━━━━
00417000 > /E9 5D010000     jmp ORiEN_V1.00417162       //程序从新载入后
00417005   |CE              into                        //由于全部已经下上了硬件断点,我们shift+f9直接运行
00417006   |D1CE            ror esi,1
00417008   |CE              into
00417009   |0D 0A2D2D2D     or eax,2D2D2D0A
━━━━━━━━━━━━━━━━━━━━━━━━━━
00419B65   /EB 06           jmp short ORiEN_V1.00419B6D          //shift+f9第6次时发现我们的加密指针已经出现
00419B67   |43              inc ebx                              //我们F8单步向下走吧
00419B68   |66:B8 83C7      mov ax,0C783                         //由于太多的花指令,这里我直接就复制关键代码部分啦
00419B6C   |0083 EFFF83C7   add byte ptr ds:[ebx+C783FFEF],al
00419B72    0183 C50083EF   add dword ptr ds:[ebx+EF8300C5],eax
━━━━━━━━━数据窗口━━━━━━━━━━━━
004063A0  7C81CA82  kernel32.ExitProcess            //第6次时发现我们被加密的指针已经出现
004063A4  BFF77429                                 
004063A8  BFF773B2
━━━━━━━━━━━━━━━━━━━━━━━━━━
004187D1    50              push eax        ; kernel32.ExitProcess       //当我们走到这里时发现取出了我们加密地址IAT
004187D2    E8 E9FFFFFF     call ORiEN_V1.004187C0           //很容易可以联想到上面既然把我们的IAT压入EAX,这里的CALL一定跟进
004187D7    FF25 83C404EB   jmp dword ptr ds:[EB04C483]
004187DD    01A8 8D83211F   add dword ptr ds:[eax+1F21838D],ebp
004187E3    0000            add byte ptr ds:[eax],al
004187E5    EB 64           jmp short ORiEN_V1.0041884B
━━━━━━━━━━━━━━━━━━━━━━━━━━
004187C0   /EB 02           jmp short ORiEN_V1.004187C4          //继续向下走,太多花指令
004187C2   |6996 83C700EB 0>imul edx,dword ptr ds:[esi+EB00C783],C48>
004187CC    04 EB           add al,0EB
004187CE    0ACD            or cl,ch
004187D0    2050 E8         and byte ptr ds:[eax-18],dl
━━━━━━━━━━━━━━━━━━━━━━━━━━
0041884F    8907            mov dword ptr ds:[edi],eax         //到了这里后我们可以发现要把我们的IAT加密啦
00418851    EB 06           jmp short ORiEN_V1.00418859        //留意我们的信息窗口和寄存器窗口
00418853    43              inc ebx                     
00418854    66:B8 83C7      mov ax,0C783
━━━━━━━━━信息窗口━━━━━━━━━━━━
eax=00418F21 (ORiEN_V1.00418F21)                              //EAX已经显示出我们的加密地址00418F21
ds:[004063A0]=7C81CA82 (kernel32.ExitProcess)
━━━━━━━━━━━━━━━━━━━━━━━━━━
上面的指令已经告诉我们把EAX的加密指令传送给我们EDI里的地址。而EDI的地址即为我们当前的IAT的地址
EAX 00418F21 ORiEN_V1.00418F21                      //EAX的值是加密后的值
ECX 000008F0
EDX 00406014 ORiEN_V1.00406014
EBX 00417000 offset ORiEN_V1.<ModuleEntryPoint>
ESP 0012FFA4
EBP 0012FFF0
ESI 004063A4 ORiEN_V1.004063A4
EDI 004063A0 ORiEN_V1.004063A0                      //EDI的值就是我们当前IAT地址
EIP 0041884F ORiEN_V1.0041884F
━━━━━━━━━━━━━━━━━━━━━━━━━━
0041884F    8907            mov dword ptr ds:[edi],eax       //直接把这里NOP掉即可解决掉我们的加密
00418851    EB 06           jmp short ORiEN_V1.00418859      //NOP完后,打开硬件断点,看看我们的OEP断点还在
00418853    43              inc ebx
00418854    66:B8 83C7      mov ax,0C783
00418858    0083 EFFF83C7   add byte ptr ds:[ebx+C783FFEF],al
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC    55              push ebp                     //这里就是我们的OEP
004010CD    8BEC            mov ebp,esp                  //DUMP吧,在运行我们的importRCE修复下
004010CF    83EC 44         sub esp,44                   //修复时发现我们的IAT全部是正常的啦
004010D2    56              push esi                     
004010D3    FF15 E4634000   call dword ptr ds:[4063E4]               ; kernel32.GetCommandLineA
━━━━━━━━━━━━━━━━━━━━━━━━━━
我们运行下程序发现出错啦,我们PEID查下,如下图
图2.jpg
够卑鄙吧,这个壳精彩之处开始,在运行我们的LORDPE---PE编辑器---区段
可以发现我们的物理大小和物理偏移都是0,这样我们的文件是可执行文件才怪,当然是无效PE文件
右键选择我们出错的PE头区段,PE编辑器,把我们的物理大小改为和虚拟大小一样,物理偏移改成和虚拟偏移一样,如下图
图3.jpg
图4.jpg
切忌修改后一定要点保存不然程序无效,保存后发现程序可以运行啦,下面我们来做下简单的优化吧!
这个程序我今天试过脱下来后我给朋友测试啦,牵涉到跨平台问题,所以我们要优化下文件大小,顺便解决下跨平台问题
━━━━━━━━━━━━━━━━━━━━━━━━━━
首先把我们脱壳后的程序在次载入OD,ait+M打开内存镜像,依次在这几段分别F2下上断点,如图
接着shift+f9运行程序,发现直到程序运行后我们有两个区段未被调用,原则上就可以说这两个区段是多余的,如下图
图5.jpg
图6.jpg
━━━━━━━━━━━━━━━━━━━━━━━━━━
运行我们的FFI把这两个多余的区段删除,在运行我们的Resource Binder 2.6 CN Fixed删除一下其他垃圾
虽然文件多了10几KB,但是我们程序的资源回来啦,好我们在来解决下我们的跨平台问题
图7.jpg
━━━━━━━━━━━━━━━━━━━━━━━━━━
程序载入OD后选择我们的附加窗口,察看下我们的当前程序进程的PID,下图突显的就是我们的程序的进程
那么我们程序当前进程为A74,这里修复跨平台用到我们的UIF1.2如下图,如果进程ID直接点开始,然后在打
开我们的importRCE修复下
图8.jpg
图9.jpg
━━━━━━━━━━━━━━━━━━━━━━━━━━
打开我们的importRCE进行下设置,准备修复我们的跨平台函数,运行importRCE,选项
具体钩选如下图,输入我们的UIF里纪录的IAT和大小,填上我们的OEP10CC,修复下即可解决跨平台问题
图10.jpg
问题解决完啦,谢谢大家看完,这壳没有这么难的,只是感觉我自己都打得好复杂,大家别介意

UnpackED__.rar

19.13 KB, 下载次数: 14, 下载积分: 吾爱币 -1 CB

ORiEN V1.X-V2.X.rar

35.26 KB, 下载次数: 24, 下载积分: 吾爱币 -1 CB

试练品

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
开始的复活节 + 1 + 1 这壳折腾我一宿,多谢了

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 小生我怕怕 发表于 2009-2-7 22:37
图1
0.JPG
首先我们取我们的镜象基址+镜象大小,结果0041D000
准备好我们的断点,开始脱壳BP GetProcAddress [ESP]<0041D000&[ESP+0C]<0041D000
这样使用条件断点就可以保证GetProcAddress中断时是目标程序调用的
━━━━━━━━━━━━━━━━━━━━━━━━━━
00417000 > /E9 5D010000     jmp ORiEN_V1.00417162         //程序载入OD
00417005   |CE              into         //在命令行下断BP GetProcAddress [ESP]<0041D000&[ESP+0C]<0041D000
00417006   |D1CE            ror esi,1           //shift+f9运行
00417008   |CE              into
00417009   |0D 0A2D2D2D     or eax,2D2D2D0A
━━━━━━━堆栈窗口━━━━━━━━━━━━━
0012FF5C   00419ADD  /CALL 到 GetProcAddress 来自 ORiEN_V1.00419AD8      //第一次中断后
0012FF60   7D590000  |hModule = 7D590000 (SHELL32)           //取消断点,ait+f9返回用户代码
0012FF64   00406538  \ProcNameOrOrdinal = "DragFinish"
0012FF68   00406000  ORiEN_V1.00406000                    //这里即为我们的RVA大小
这里的6000就是我们的RVA的大小,公式等于如下:
00406000-00400000=6000
━━━━━━━━━━━━━━━━━━━━━━━━━━
00419ADD   /EB 07           jmp short ORiEN_V1.00419AE6        //我们返回到了这里, 运行LORDPE把程序DUMP
00419ADF   |88FC            mov ah,bh                          //程序DUMP之后Ctrl+S查找命令序列
00419AE1   |B6 FF           mov dh,0FF
00419AE3   |65:18CD         sbb ch,cl
00419AE6   \EB 02           jmp short ORiEN_V1.00419AEA
━━━━━━━━━━━━━━━━━━━━━━━━━━
jmp eax              //这里是我们需要查找的命令序列,至于怎么获得大家可以ESP定律先去一下OEP观察
int 0EB
sti
━━━━━━━━━━━━━━━━━━━━━━━━━━
00418AF1    FFE0            jmp eax                      //查找到,F2下断,shift+f9运行程序
00418AF3    CD EB           int 0EB                      //程序停下后F8单步一步跟进OEP
00418AF5    FB              sti
00418AF6    EB 10           jmp short ORiEN_V1.00418B08
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC    55              push ebp                     //纪录当前OEP为10CC
004010CD    8BEC            mov ebp,esp                  //在次打开我们的LordPE修改
004010CF    83EC 44         sub esp,44                   //lordPE的PE编辑器
004010D2    56              push esi
004010D3    FF15 E4634000   call dword ptr ds:[4063E4]               ; ORiEN_V1.00418F8A
━━━━━━━━━━━━━━━━━━━━━━━━━━
图2
2.jpg
━━━━━━━━━━━━━━━━━━━━━━━━━━
将我们的入口点改为10CC,在单击目录,将我们的输入表地址修改为6000
图3
3.jpg
做好以上的修改后,记住单击保存在点确定,便可以发现程序可以运行啦

Unpack.rar

17.42 KB, 下载次数: 5, 下载积分: 吾爱币 -1 CB

zeger 发表于 2009-2-8 03:49
yuyong8301 发表于 2009-2-8 09:21
a2213572 发表于 2009-2-8 10:16
感謝版主分享 ORiEN V1.X-V2 脫殼教學.
qq227479645 发表于 2009-2-8 13:16
精彩的教程  小生牛人
小糊涂虫 发表于 2009-2-8 15:17
我越看越糊涂。。。。。。。:L
下载回去仔细研究去。。。。。。。
iawen 发表于 2009-2-8 15:39
太强大,下载试了一下,OK,又学习了,谢谢小生哥!
419611868 发表于 2009-2-8 16:52
来看看了啊
zckey09 发表于 2009-3-21 19:40
谢谢分享 学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 17:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表