首页 电脑 电脑学堂 查看内容

两分种搞定UPX壳

2004-9-29 20:05 738 0

摘要: 我从没有搞过破解,只是在前段时间学习PE文件格式在看雪学院Down了一些资料,明天就要放假了闲来无事用一个小时把看雪学院的<Crack Tutorial 2001>通览了一遍,为了练习搞定...
关键词: Resource String ID 加壳 脱壳 参考 扫雷 Crack DialogID W32Dasm

我从没有搞过破解,只是在前段时间学习PE文件格式在看雪学院Down了一些资料,明天就要放假了闲来无事用一个小时把看雪学院的<Crack Tutorial 2001>通览了一遍,为了练习搞定了几个CrackMe,觉得也怪好玩的,觉得!Crack技术里的脱壳技术是非常有意思,我不想解释脱壳的概念什么的,这方面的资料非常多,好了不废话,下面让开始讲解如何在两分种内脱掉UPX的壳,以前没有搞过Crack,有什么Error的地方高手误笑!呵呵! 相关工具: UPX 1.23W(用于压缩和加壳)W32Dasm 10.0黄金汉化版(Cracker们和Hacker们都经常要用的)OllyDbg 1.09c聆风听雨汉化版(这个汉化Bug很少,很好用)OllyDump(OllyDbg脱壳插件) "开始"-->"程序"-->"附件"-->"游戏"-->"扫雷"-->"右击"-->"属性"-->"查找目标" 复制到工作目录下(我的是D:\temp\Crack\),使用UPX对扫雷程序加壳命令如下:d:\temp\crack>upx -9 winmine.exe -o swinmine.exe目录下生成了一个名为swinmine.exe的已加壳程序 使用W32Dasm打开反汇编,已经看不到引入和引出函数参考,对话框和菜单参考,字串参考全变成了 String Resource ID=00001: "哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌"String Resource ID=00002: "哌哌哌哌哌哌哌哌哌哌哌哌哌哌?哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌?quot;String Resource ID=0!0003: &quot;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌"String Resource ID=00004: "哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌"String Resource ID=00005: "哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌"String Resource ID=00007: "哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌"String Resource ID=00009: "哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌"String Resource ID=00011: "哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌"String Resource ID=00014: "哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌"String Resource ID=00014: "哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌" 先按Ctrl+End光标走到了最后一行,再选择W32Dasm的"查找/查找文本"菜单,输入"popad",选中查找方向为向上,找到这样的语句: :0101BC28 FF96E8BC0100 !call dword ptr [esi+0001BCE8] * Referenced by a (U)nconditional or (C)onditional Jump at Address:│:0101BBF0(C)│:0101BC2E 61 popad:0101BC2F E99C81FEFF jmp 01003DD0;<==--- 光标移到:0101BC2F E99C81FEFF jmp 01003DD0这句上,选择"编辑/快速编辑"菜单项,将E99C81FEFF000000000000000000000000000000改为CCE99C81FEFF0000000000000000000000000000(后面去掉两个一字节,前面添加一字节的十六进制数的CC,即汇编语句int 3,User Break Point中断调用),保存成Pswinmine.exe运行一下,弹出一个MessageBox"Software Exception...位置0101bc2f"出现一个未处理异常?出错了?没有!没有!是我们写入的int 3发出的,!看清楚它的位置0101bc2f,再反汇编Pswinmine.exe看一下0x01!01bc2f地址的指令就明白了: :0101BC28 FF96E8BC0100 call dword ptr [esi+0001BCE8] * Referenced by a (U)nconditional or (C)onditional Jump at Address:│:0101BBF0(C)│:0101BC2E 61 popad:0101BC2F CC int 03;<==---:0101BC30 E99C81FEFF jmp 01003DD1<==--- 退出W32Dasm,打开OllyDbg,打开刚才打过用户中断调用补丁的Pswinmine.exe,程序显示"模块"Pwinmine"的快速统计测试报告说明,它的代码总发也许是经过了压缩,加密,或者包含很大数目的嵌入式数据.代码分析结果将会是非常不可靠的或者是简单而且错误的.您确定要继续进行分析吗?"当然!点"是"了,再按F9程序会中断在0101bc2f因为我们int 3调用了User Break Point中断,控制权转到了OllyDbg,其实加壳(加密)后程序需要在执行时由一小段程序来解密程序然后再跳转到解密后的代码执行,这和Overflow攻击中使用的ShellCode编解码技术惊人的相似,ShellCode在解码以前只有一小段代码(通常是解码子程序)是可执行的,其它未经解码的代码(其实在未解码前它们同加壳过的软件代码一样是一系列毫无规则的错误的指令,甚至是根本不存在的指令代码)如果执行就会出现错误.右击选"Dump Debuged Process",在Entry Point框输入3dd1,注意是3dd1而不是3dd0,输入保存文件名123.exe点确定保存,运行一下,一切正常(这时程序已从内存中被脱壳出来). 退出OllyDbg,打开W32Dasm再次反汇编123.exe(已脱UPX壳的扫雷程序) 菜单参考:Menu: MenuID_01F4 Menu: MenuID_01F4, Item: ""Menu: MenuID_01F4, Item: "??)(M)"Menu: MenuID_01F4, Item: "?B)"Menu: MenuID_01F4, Item: "-?I)"Menu: MenuID_01F4, Item: "痼(S)"Menu: MenuID_01F4, !Item: "丕(E)"Menu: MenuID_01F4, Item: "渞(L!)"<br>Menu: MenuID_01F4, Item: "隁I(C)..."Menu: MenuID_01F4, Item: "頤(C) F1"对话框参考:Dialog: DialogID_0050 Dialog: DialogID_0258 Dialog: DialogID_02BC 字符参考:String Resource ID=00001: "k?String Resource ID=00003: "k??String Resource ID=00004: "嗾Mn■h鱯?String Resource ID=00005: "匵?String Resource ID=00006: "? %d"String Resource ID=00007: "%d ?String Resource ID=00008: "Z"String Resource ID=00009: "?ОU鱕?"String Resource ID=00010: "?-ОU鱕?"String Resource ID=00011: "?丕癠鱕?"String Resource ID=00012: "k?String Resource ID=00013: "by Robert Donner and Curt Johnson"".chm""?"?""CLSID\{ADB880A6-D8FF-11CF-9377-00AA003B7A11}\I""entpack.ini""Failed t!o create Bitmap""FLoad failed to create compatible ""hhctrl.ocx""NTHelp.chm""Software\Microsoft\winmine""U嬱婨SV冭SW勬""winmine.hlp""
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部