upx加壳:脱用UPX加壳的EXE及DLL文件的雕虫小技

来源:www.infosecurity.org.cn/

你可以阅读和传播本文章并可对文章内容作任何类型修改甚至可以将心得体会体会重心整理发布更可以直接针对某个特定文件进行理论):

首先让我们要先准备如下几种工具(以下工具均可找到最新免费或破解版本别问我下载地址):
1.Procdump
2.Ultraedit (这个你也可以用别编辑器)
3.Winsoftice
4.Trw
5.MakePE
6.Wdasm

好了!工具都准备齐全了我们就去搞个实验品吧!今次我们选是UPX 在Procdump脱壳文件列表中你可以清楚地看到有 UPX 选项所以我们今天就选它了好了下载完毕我们先用它来为软件Software加个脱吧!
操作:

1. 在 windows 上打开个 Dos 窗口 , 进入 UPX 所在目录;
2. 输入 upx  [ 要加壳文件路径和文件名 ]
3.OK! 加壳成功了!

嘿嘿好了现在可以再试试脱壳了!
操作:

1. 运行 Procdump ;
2. 按 Unpack 按钮这时就出现了 Choose Unpacker 窗口;
3. 在窗口中选择 UPX 这时就会跳出个选择你要脱壳文件选择窗口;
4. 按下打开哦天啊!好痛苦啊!没有脱壳竟然运行了 Procdump提示个错
误发生在 script

以上所有操作是对自动脱壳来说基本上自动脱壳操作都是这样好了难道就这样没有戏唱了吗?作者写文章那会就写这几十行废话呢?请接着看下面吧! 好了看它没有没防住 winsoftice 呢?重新启动机器个有安装 winsoftice windows 平台 吧!再次运行被加脱了还好!没有当掉 winsoftice 这样心中暗喜你有难了啊!看来外国人写东西还是比较友善不象 Ding Boy 幻影系列比小燕子还凶加了两重气死本帅又说 Ding Boy 坏话了其实有时我觉得他比较象 Crack 界小燕子令人又爱又恨好了关闭用 winsoftice 载入去唉刚刚还说好呢!原来它还是对 winsoftice 作了点小动作 winsoftice 不能中断于入口句处没有关系现在有 3种思路方法种思路方法是通过对.exe or .dll 文件作点修改 使其符合标准 PE 文件格式 winsoftice 毕竟不是专为 Crack 设计所以它中断入口 是针对标准 PE 文件格式来写对于那些不符合它就没有能力了具体 PE 文件格式大家可以看看 VC 中 MSDN 中帮助和 WINNT.H 中解释;第 2种思路方法就是不用 winsoftice 而用 TRW 刘涛涛先生 TRW 是专为 Crack 设计所以几乎所有可以在 Windows 上运行它 都可以中断得了;第 3种思路方法就是在原 .exe or .dll 文件中加插 3 语句令 winsoftice 强行中断   好了思路方法说了大罗我们就用最简单思路方法吧!没人会有简单不用去用最繁如果有吧!大家就......

运行 TRW选择菜单中 TRNEWTCB 命令然后运行加脱马上中断于第句了
具体如下:
0137:0043D100  PUSHAD                  会中断于这里
0137:0043D101  MOV       ESI,0042B0D9
0137:0043D106  LEA       EDI,[ESI+FFFD5F27]
0137:0043D10C  PUSH      EDI
0137:0043D10D  OR        EBP,-01
0137:0043D110  JMP       0043D122           跳到解压
137:0043D112  NOP
0137:0043D113  NOP

解压入口:
0137:0043D122  8B1E                MOV       EBX,[ESI]
0137:0043D124  83EEFC            SUB        ESI,-04
0137:0043D127  11DB                ADC        EBX,EBX
0137:0043D129  72ED                JB           0043D118
0137:0043D12B  B801000000      MOV       EAX,00000001
0137:0043D130  01DB                ADD        EBX,EBX
0137:0043D132  7507                 JNZ         0043D13B
0137:0043D134  8B1E                MOV       EBX,[ESI]

好了在解压里面会做无数次循环我没有必要了解它是如何进行加压所以就把光标直向下走直走到这里:

0137:0043D250  EBD6                JMP       0043D228
0137:0043D252  61                    POPAD
0137:0043D253  C3                     RET
0137:0043D254  61                     POPAD
0137:0043D255  E9D6A1FDFF    JMP       00417430         这就是真正入口了
0137:0043D25A  0000                 ADD       [EAX],AL
0137:0043D25C  0000                 ADD       [EAX],AL
0137:0043D25E  0000                 ADD       [EAX],AL

好开心啊!终于找到了入口地址如果你只是针对某个特定而脱壳那么现在就可以 用 TRW pedump 命令直接脱壳了但这不是我们所要我们现在是要研究 UPX0.82 要写个通用脱壳 ini 加入到 Procdump1.50 里面那么这样你以后就可以很方便脱掉 UPX0.82 所 脱了同时也很方便网上传播了让别人也能分享你成果这才是真正 Cracker 精神

操作:
1. 用 Ultraedit6.10 打开 Procdump1.50 目录下 Script.ini 文件;
格式如下:
[INDEX]
P1=Hasiuk/NeoLite
P2=PESHiELD
P3=Standard
P4=Shrinker 3.3
P5=Wwpack32 I
P6=Manolo
P7=Petite<1.3
P8=Wwpack32 II
P9=Vbox Dialog
PA=Vbox Std
PB=Petite 1.x
PC=Shrinker 3.2
PD=PEPack
PE=UPX                          修改为 PE=UPX<0.7X
PF=Aspack<108
P10=SoftSentry
P11=CodeSafe 3.X
P12=Aspack108
P13=Neolite2
P14=Aspack108.2
P15=Petite 2.0
P16=Sentinel
P17=PKLiTE
P18=Petite 2.1
P19=PCShrink
P1A=PCGUARD v2.10
P1B=Aspack108.3
P1C=Shrinker 3.4
P1D=UPX0.7X-0.8X      加入这句


然后找到:
[UPX]                        修改为 [UPX<0.7X]

然后在文件最下面加入:
[UPX0.7X-0.8X]

好了准备功夫我们都做好了现在可以写 UPX 脱壳扩展了首先我们可以见到有两个跳动地方个是:
0137:0043D110  JMP       0043D122           跳到解压
所以我们马上把机器代码抄下来:
EB,10
第 2个是:
0137:0043D255  E9D6A1FDFF    JMP       00417430         这就是真正入口了
机器代码就是:
E9,D6,A1,FD,FF
好了所有要找到东西我们都已经找到了我们就开始编写 UPX 脱壳扩展了

我编写具体如下:
[UPX0.7X-0.8X]
L1=OBJR                                    ; 在扫描开始处设置内存地址
L2=LOOK EB,10            ; 查找第个 EB,10 代码
L3=BP                                        ; 在当前内存位置设置断点
L4=WALK                                    ; 交还控制权到 Procdump 并且执行下个指令
L5=OBJR                                    ; 在扫描开始处设置内存地址
L6=LOOK 61,E9                       ; 查找第个 EB,10 代码
L7=BP                                        ; 在当前内存位置设置断点
L8=STEP                                    ; 步地跟踪分析程式

好了以上解释都很清楚了没有什么不明白了我们把文件保存后再次运行 Procdump 在 Choose Unpacker 中可以见到多了个 UPX0.7X-0.8X 项了选择它进行脱我们加了脱 哈哈叫我们保存了你可以不要高兴得太早了你试试运行 dump 哦不能运行非法操作 不要心急我们好象还有点东西要加上呢!那就是 dump 可选参数了 Procdump 共给我们 提供了 5组可选参数如果你没有特别指出就用默认值好,我们加上去试试吧!
OPTL1=00000000
OPTL2=01010001
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000

  以上这 5参数是最常用你加参数时可要先试试或者加了的后就可以用了好我们加上
以下文章所述可能在有机器上有区别结果请自行修正:

作者机器是:
PIII 667
128M 内存

当我再次运行 Procdump 来脱壳竟然下子就运行了根本不象上次那样提示要我保存 脱壳后文件所以我想可能这些参数有些不合适我机器于是我认真分析了每个参数真正含义的后就把参数作了如下修改:
OPTL1=00000001         这是延迟时间我设为 1ms  
OPTL2=01010101         采用了快速 dump 工作方式
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000

今次再运行 Procdump 进行脱壳哈哈!!!可以脱了然后再双击脱壳后文件可以执行了 再用 Wdasm 反汇编分析下文件发现基本和原文件相同只是文件大小有点区别大了再用了下软件Software各种功能切正常所以应该说脱壳是成功到此文章也该在此结束了不过好象还漏了点事就是用 MakePe 帮助脱壳后文件作进优化这就不描述了 自己看帮助进 行吧! 好了最后整理总结下吧!
完整地加入:
[UPX0.7X-0.8X]
L1=OBJR
L2=LOOK EB,10
L3=BP
L4=WALK
L5=OBJR
L6=LOOK 61,E9
L7=BP
L8=STEP
OPTL1=00000001
OPTL2=01010101
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000

最后说了魔术再高明也看得出门道但看门道就看看热闹也可以看!



  • 篇文章: IP地址隐藏(delphi实现)

  • 篇文章: 命令行下可以解读TCP数据报内容Snfer
  • Tags:  dll加壳 upx加壳脱壳 upx加壳工具 upx加壳

    延伸阅读

    最新评论

    发表评论