老鸟请绕道哈,这里是新手区,不过,我相信,老鸟都是由我们这些菜鸟慢慢长大而成的,我相信只要我们努力,我们就可以超过你们这些老鸟!!!
我现在是菜鸟,我相信我能,你如果是菜鸟,你呢?
下面进入正文:
最近在 论坛 里逛了逛,看到在【新人交流区】的逛的大都是临时会员,所以我发个新手贴,大家一起学习,因为我也是新手嘛,嘿嘿~
昨天看到,【瞬间oday】发表的一个申请邀请码的贴子
《零基础详细分析脱壳一个UPX外挂壳以及能破解分析出几十上千个注册码! 》,相信有不少的新手都看了吧,有的可能还有不少的疑惑,今天我就把我想到的我知道的,给大家说说,有什么不对,大家多多批评,多多指出。
1.什么是OEP?为什么要找OEP?
答:OPE: original entry point 原始入口点。 软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。
要想了解更新请百度,谢谢!
2.怎么找OEP?
答:常见找OEP的方法有很多,【瞬间oday】在文中也说了,不过,我看了下,有种感觉就是代码太多,因为我是新手,我就用我们菜鸟的语言来简单易懂的方式描述下吧
当我拿到这个程序的时候,我也用PEID查了下,就是UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo 壳.才说了要脱壳就要找OEP,首先,我用PEID自带的查OEP插件查看OEP,结果查到了:
3.怎么手工找OEP?
对于新手来说,我们更想知道的是,怎么手工找OEP,用工具虽然好,但不是万能的,俗话说,还是纯手工打造的好啊!
现在说说另一种脱壳,就是手工。现在我们就用OD脱壳,OD脱壳的关键是让程序中断在OEP,一旦中断在OEP,脱壳就完成。我们知道,当我们调试加了壳的程序时,就是不在停的循环,我们的目标就是跳出循环,因为在跳出循环时,一定会经过程序真正的入口地址,即OEP。循环中,一般代码为pushad、 pushfd等。自己用眼睛向下搜索与pushad 、 pushfd对应的popad、popfd
,再找找。一般找到这个OEP就在附近。
现在就说说我手工找这个程序的OEP的过程:
1.OD载入,提示加壳,是否分析?选 【否】。程序在00457B40 60 pushad 断下。嘿嘿,是不是看到了 pushad 啊,那么popad应该就在附近了,嘿嘿,向下走,果然在这里。我们F8走走,走呀走,走呀走,也,怎么又回到这里了,呵呵,上面说了,它就是不让你跳出去。嘿嘿,这时我们在popad下面一句:
00457C65 - E9 D295FAFF jmp 刷点券外.0040123C
F2下个断,然后F9运行到这里,不难看出,其实 0040123C就是我们要找的了。
那么,0010123C再减去 应用程序基址00400000,就是真正的入口地址OEP了。
4.找到OEP后该怎么办?
对啊,找到OEP怎么办,我是找到OEP了,那接下来呢?
接下来就是脱壳啊,嘿,【瞬间oday】在其文中用 【importREC】来脱壳的,今天我用OD的插件OllyDump来做,相信大家的OD上都有这个插件,没有的话,过会我附上。插件》OllyDump》脱壳在当前调试进程》在入口地址修正为,填上123C》脱壳》保存,OK!
再用PEID查,VBP写的程序,用OD载入,也没有加壳提示了,嘿嘿~
嘿嘿,剩下的破解注册,就不是本文的内容了哈,当然这个程序不难,你们可以下载下来练练手也是不错的,不是说熟练生巧么?
如果大家觉得我写的比较通俗易懂的话,请回个贴,安慰一下我嘛,嘿嘿!有什么问题可以提出来,大家都是菜鸟,大家一起学习!!!
只要努力,You can make it!
我相信,你可以的!!!!
--------------高粱2011-1-26晚
=================华丽分隔线==================
= =
= 以下来自网络 =
= =
==================华丽分隔线=================
附1:
常见查找OEP方法
方法一:
1.用OD载入,不分析代码!
2.单步向下跟踪F8,是向下跳的让它实现
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——运行到所选)
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,这样很快就能到程序的OEP
6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
7.一般有很大的跳转,比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETE的一般很快就会到程序的OEP。
方法二:
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)
1.开始就点F8,注意观察OD右上角的寄存器中ESP有没出现。
2.在命令行下:dd 0012FFA4(指在当前代码中的ESP地址),按回车!
3.选种下断的地址,下硬件访问WORD断点。
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP,脱壳
方法三:
内存跟踪:
1:用OD打开软件!
2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序!
3:按ALT+M,DA 打开内存镜象,找到第一个.rsrc.按F2下断点,
然后按SHIFT+F9运行到断点,接着再按ALT+M,DA 打开内存镜象,找到.RSRC上面的CODE,按
F2下断点!然后按SHIFT+F9,直接到达程序OEP,脱壳!
方法四:
一步到达OEP(前辈们总结的经验)
1.开始按Ctrl+F,输入:popad(只适合少数壳,包括ASPACK壳),然后按下F2,F9运行到此处
2.来到大跳转处,点下F8,脱壳之!
方法五:
1:用OD打开软件!
2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序!
3:一开是程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按F9到程序
运行的次数!
4:CTRL+F2重载程序,按SHIFT+F9(次数为程序运行的次数-1次
5:在OD的右下角我们看见有一个SE 句柄,这时我们按CTRL+G,输入SE 句柄前的地址!
6:按F2下断点!然后按SHIFT+F9来到断点处!
7:去掉断点,按F8慢慢向下走!
8:到达程序的OEP,脱壳!
附2:
Ollydbg手动脱壳得几点小结:
引子:2002.5.5是我有生以来最最黑暗的日子,那段时间我正当高三班主任而且5月份已临近高考,学生很需要我,我正带着高三4个班的课,没人能顶替我的工作,学校也很需要我,而就在那个时候我妻子刚好近四个月的身孕,家庭也很需要我,就在紧要关头,我被查出甲肝住进了医院。住院一个多月,这段最黑暗的时间总算过去了,2002.12.12我为之激动和期待了很久的小生命了来到了这个世界,从此开始了品尝为人父的辛劳与幸福。我是一位crack爱好者,没有别的,在这特殊的日子里谨想以此文纪念那段黑暗的日子,并祝福可爱的小生命永远健康幸福,也祝贺自己正式加入DFCG。
一般认为手动脱壳的关键是找到软件的真正入口OEP,但是用ollydbg脱壳知道软件的真正入口OEP并不能解决问题,因为ollydbg的工作原理和softice、trw2000等的有所不同,在OEP未解压以前是不能在OEP设断上的,因此用ollydbg脱壳的关键是让程序中断在OEP,一旦中断在OEP脱壳就告完成。当然能够用冲击波等软件知道软件的OEP在用ollydbg脱壳中还是有一定帮助的。那么如何让程序中断在OEP呢?这里小结几种方法。
方法一、用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no,程序停在入口处EP(注意不是OEP) ctrl+b Hex中输入壳的入口特征代码(如upx 61 E9),回车
popad
看到入口点jmp xxxxxx
F2在此行设断(或者将光标移动到这一行上按f4),F9,F8走1-2下,来到入口点,用ollydbg的插件dump选中程序进程dump程序。但此法对于有些入口点附近代码被压缩的程序就无能为力了。对于这种程序有方法二。
方法二、用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no,ctrl+b Hex中输入壳的入口特征代码(如upx 61 E9),回车,找不到
popad
jmp xxxxxx
对于这种情况在用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no时程序停在入口处EP(注意不是OEP),先用F9,F8走几下,使特征代码解压缩再用上面的方法搜索壳的特征代码。一般都能解决问题。对于那些不知到壳特征代码的那怎么办呢?于是有了方法三。
方法三、用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no,程序停在入口处EP(注意不是OEP),一般代码为pushad、 pushfd等。自己用眼睛向下搜索与pushad 、 pushfd对应的popad、popfd 。F2在此行设断(或者将光标移动到这一行上按f4),F9,F8走1-2下,来到入口点,用ollydbg的插件dump选中程序进程dump程序。那么怎么知道找到的popad、popfd是与程序EP对应的popad、popfd呢?一般情况,对于保护不是非常强悍的壳向下找十几行或几十行看到的第一个popad、popfd即为对应的popad、popfd。而且入口点附近popad往往在下面几行还有指令ret。有些壳如PECompact它的入口处EP有 xxxxxxx pushad
xxxxxxx pushfd
那么当你看到 xxxxxxx popfd
xxxxxxx popad 就找到了。如果向下找十几行或几十行找不到的popad、popfd那该怎么办呢?于是有了方法四。
对方法三的补充:有些壳如果在ollydbg中找popad是行不通的,因为用ollydbg载入脱壳对象时第1个消息框,点yes,第2个消息框,点no,ollydbg没有中断在pushad上,我曾碰到过用ollydbg载入脱壳对象时第1个消息框,点yes,第2个消息框,点no,ollydbg没有中断在popad上,这样OEP应该在pashad附近,所以应该与之对应pushad。一般这样的壳保护比较弱。很容易脱的。
方法四、用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no,程序停在入口处EP(注意不是OEP),一般代码为pushad、 pushfd等。自己用眼睛向下搜索与pushad 、 pushfd对应的popad、popfd。向下找十几行或几十行找不到的popad、popfd那必须先用F9,F8走几下,使特征代码popad、popfd解压缩再搜索popad、popfd。
方法五、对于大量使用SEH,保护非常强悍的壳,如aspr需采用以下方法。
1、使程序运行到最后一次SHE,最后一次SHE如何确定?记下程序运行的shift+f9次数n,shift+f9 n-1就是。
2、看堆践处SHE handle f2设断,shift+f9查找popad、popfd即可。
3、如果能够知道OEP,此时步骤2也可用ctrl+g OEP按f4而且有些aspr版本必须用此法,否则非常麻烦
附表:壳名称、版本相应的特征代码
壳名称及版本 特征代码
Asprotect 1.0以下 EB 02 EB E8 61 EB 01
Asprotect 1.2 61 FF E0
ASPack 2.0以下 61 75 08 b8
PECompact 1.33 61 9D 50 68
Petite 2.1/2.2 61 66 9D 83 C4
PE-pack all 89 44 24 1c 61 FF E0
Armadillo 2.51 03 F9 E8 A9 EE FF
Armadillo 2.52 03 F9 E8 2D EE FF
VBox 4.6.5 CD 20 FF E3
ASPack 2.12 B8 01 00 00 00 C2
UPX 1.20w 61 E9
Telock0.71 61 FF 64 24 DC
Exe32Pack 1.3x E9 5E FE FF FF
【完】
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课