0137:0043D110 JMP 0043D122 跳到解压程序
所以我们马上把机器代码抄下来:
EB,10
第二个是:
0137:0043D255 E9D6A1FDFF JMP 00417430 这就是程序的真正入口了
机器代码就是:
E9,D6,A1,FD,FF
好了,所有的要找到东西我们都已经找到了,我们就开始编写 UPX0.82 的脱壳扩展了。
我编写的具体如下:
[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 ; 一步一步地跟踪分析程式
好了,以上的解释都很清楚了,没有什么不明白了,我们把文件保存后,再次运行 Procdump1.50 , 在 Choose Unpacker 中可以见到多了一个 UPX0.7X-0.8X 项了,选择 它,进行脱我们加了脱的程序, 哈哈,叫我们保存了,你可以不要高兴得太早了,你试一 试运行 dump 程序,哦不能运行,非法操作。 不要心急,我们好象还有点东西要加上呢! 那就是 dump 的可选参数了, Procdump1.50 一共给我们 提供了五组可选参数,如果你 没有特别指出,就用默认值。好我们加上去试一试吧!OPTL1=00000000
OPTL2=01010001
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000
以上这五参数是最常用的,你加参数时可要先试试,或者加了之后就可以用了,好我们 加上,试一试。以下文章所述,可能在有的机器上有不同的结果,请自行修正:
作者的机器是:
赛扬 300A (超 450 )
PC100-64M 内存
当我再次运行 Procdump1.50 来脱壳程序时,竟然程序一下子就运行了,根本不象上次那 样提示要我保存 脱壳后的文件,所以我想,可能这些参数有些不合适我的机器,于是我认 真分析了每一个参数的真正含义 之后,就把参数作了如下的修改:OPTL1=00000001 这是延迟时间,我设为 1ms
OPTL2=01010101 采用了快速 dump 的工作方式
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000
今次再运行 Procdump1.50 进行脱壳,哈哈!!!可以脱了,然后再双击脱壳后的文件, 咦,可以执行了, 再用 Wdasm8.93 反汇编分析一下文件,发现基本和原文件相同,只是 文件大小有点不同,大了一点,再用 了一下软件的各种功能,一切正常,所以应该说脱壳 是成功的,到此,文章也该在此结束了,不过好象还 漏了点事,就是用 MakePe1.27 帮助脱壳后的文件作进一步的优化,这就不一一描述了 ,自己看帮助进 行吧! 好了,最后总结一下吧!完整地加入:
[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
By The Way !
我发现对于使用 UPX0.7x 到 UPX0.8x 加壳的软件,用我的方法都可以成功脱壳。