吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20553|回复: 20
收起左侧

[原创] 吾爱破解脱壳练习六------TElock V0.99

 关闭 [复制链接]
小生我怕怕 发表于 2008-10-2 00:12
一转眼我们的脱壳练习已经第6期啦,在这其中我相信许多的朋友也学习到了东西
必能脱掉此壳
本期考核主题为:TElock 0.99
1.脱壳后的文件大家以千脑形式上传,目的是为了便于隐藏文件和节约论坛空间
2.脱壳后的文件,请大家以脱文附带脱壳后程序打包压缩传于千脑网盘
3.对于回帖过程中千万不要出现灌水,否则BAN了ID
4.对于有优秀脱文或优秀脱壳方法的朋友,给于适当威望奖励
5.鉴于此练习是针对论坛的所有人,请大家踊跃参加,如果不是脱了壳教作业的,请不要顶帖子,方便管理查阅,及时给出评分
6.以下为需要设置威望的格式
7.脱壳一以周期计算,(周期=等于二天)
8.脱壳周期一结束,就开始公布答案让大家能有更充分的学习环境,让不懂脱的朋友去寻找你失误的地方争取早日赶上论坛的积极份子
9.我们要的是脱文,并不是脱壳机去脱的,如果用脱机脱了别拿来,请一定附带上脱文
10.对本次参加加密壳脱壳练习的,给出脱文全部给予5CB奖励,能分析出IAT加密所在,不使用importRCE等修复工具的给10CB

鉴于脱壳练习发展的趋势良好,观察了下载量,的确有明显的增长,证明很多的坛友
是怀着对脱壳破解的热爱的,所以经过管理组商议,由3天进行一次的脱壳练习,改成每两天一次的脱壳练习,有助于大家对
技巧的熟练,脱壳练习是经过了我们多翻难度测试,才发布出来,所以希望大家好好珍惜如此好好时机学习,不怕你不懂,就怕你不学

在一次申明:对于不是交作业顶帖的人,一律扣处10CB,严重的扣处威望处理,请大家自觉,保持良好的学习环境


练习一:(结果已经公布)
http://www.52pojie.cn/thread-10496-1-1.html

练习二:(结果已经公布)
http://www.52pojie.cn/thread-10607-1-1.html

练习三:(结果已经公布)
http://www.52pojie.cn/thread-10688-1-1.html

练习四:(结果已经公布)
http://www.52pojie.cn/thread-10850-1-1.html

练习五:(结果已经公布)
http://www.52pojie.cn/thread-10990-1-1.html

UnPackMe.rar

193 KB, 下载次数: 1144, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 1热心值 +1 收起 理由
min-gong + 1 谢谢@Thanks!

查看全部评分

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

ximo 发表于 2008-10-2 13:17
telock是个简单的加密壳,在CUG的招人中,也仅仅定位为初级的加密壳。这个脱壳不难,还可以说是相当简单,但是,看了大家交的情况来看,真正能够完美脱的人,还真是不多。因此,我就做个简单的分析。说来惭愧,这个壳早在4年前就被forgot等人玩的团团转了,还出了修改版的telock,呵呵,感叹一下,技术竟落后别人有4年之多。

一、寻找OEP

其实寻找OEP是相当的简单,只要学过脱壳的人,我相信,基本上每个人都能顺利到达OEP。最后一次异常法,二次内存镜象等等,都可以顺利到达OEP!本文的重点不是在于如果到达OEP,因此,就用最方便的方法去OEP吧。
ALT+M,在.data段,下内存写入断点,SHIFT+F9
0046914EAA stos byte ptr es:[edi]//中断在这
0046914F69D2 A5B0CD4Bimul edx,edx,4BCDB0A5
00469155F9 stc
0046915672 02jb short UnPackMe.0046915A
00469158CD20 D1C269DBvxdjump DB69C2D1
0046915E70 1Fjo short UnPackMe.0046917F
00469160EE out dx,al
004691616A 03push 3
00469163DA49 0Ffimul dword ptr ds:[ecx+F]

取消内存断点,再次ALT+M,在.code(00401000)段,F2下断,SHIFT+F9

0045159C55 push ebp //顺利到达OEP
0045159D8BEC mov ebp,esp
0045159F83C4 F0add esp,-10
004515A2B8 BC134500mov eax,UnPackMe.004513BC
004515A7E8 8846FBFFcall UnPackMe.00405C34
004515ACA1 E02F4500mov eax,dword ptr ds:[452FE0]
004515B18B00 mov eax,dword ptr ds:[eax]
004515B3E8 F8E5FFFFcall UnPackMe.0044FBB0
004515B8A1 E02F4500mov eax,dword ptr ds:[452FE0]
004515BD8B00 mov eax,dword ptr ds:[eax]

就这样,很容易的就到了OEP!
但是,可别高兴的太早,脱壳多的人都知道,脱壳的难点不在于寻找OEP,而是难在修复!现在的保护手段也是层出不穷,什么IAT加密,什么代码变形,什么VM保护,什么CC保护,等等。不过,由于初级的加密壳,因此修复的难度也相对来说小的多。

打开Import-REC,填上OEP后,你会发现,有好多指针都是无效的,但是,把他剪掉后,是无法正常运行的。很明显,IAT被加密了。不过,有个简单的处理方法,只要用REC的等级3来跟踪,就能找回所有的被加密的指针!
下面的重点就是讲述如何完美处理这个壳的IAT加密。别着急关闭REC,记下被被加密的指针的地址:
FThunk: 0005512CNbFunc: 00000022
00005512C?000000980000
000055130?000000980036
000055134?00000098006E
000055138?000000980090
00005513C?0000009800C6
000055140?0000009800FE
000055144?000000980120
000055148?000000980156
00005514C?00000098018E
000055150?0000009801B0
000055154?0000009801E6
000055158?00000098021E
00005515C?000000980240
000055160?000000980276
000055164?0000009802AE
000055168?0000009802D0
00005516C?000000980306
000055170?00000098033E
000055174?000000980360
000055178?000000980396
00005517C?0000009803CE
000055180?0000009803F0
000055184?000000980426
000055188?00000098045E
00005518C?000000980480
000055190?0000009804B6
000055194?0000009804EE
000055198?000000980510
00005519C?000000980546
0000551A0?00000098057E
0000551A4?0000009805A0
0000551A8?0000009805D6
0000551AC?00000098060E
0000551B0?000000980630

FThunk: 000551B8NbFunc: 00000004
0000551B8?000000990000
0000551BC?000000990036
0000551C0?00000099006E
0000551C4?000000990090

FThunk: 000551CCNbFunc: 00000003
1000551CCadvapi32.dll01EERegQueryValueExA
1000551D0advapi32.dll01E4RegOpenKeyExA
1000551D4advapi32.dll01CBRegCloseKey

很明显,前面的一些指针都被加密了!我就随便找个,以第一个指针
00005512C?000000980000
为例,其地址为00400000+0005512C=0045512C

二、处理CRC校验

很奇怪吧,明明是处理IAT加密的,为什么要讲处理CRC校验。呵呵,这当然也是有原因的。看下面吧。

跟踪IAT加密指针的一般方法就是,在这个指针处下硬件断点,然后看寄存器窗口,寻找可用的信息。
于是,重新载入,然后dd 0045512C,接着,就下硬件访问断点吧,SHIFT+F9运行,就会出现下面的提示框:
1.GIF

很明显了吧,提示CRC校验错误了。因此,在处理IAT加密前,必须要处理掉这个。跟这个CRC的方法很多,有兴趣的可以试试F12法,我就用一种常规的方法来进行跟踪吧。

删除所有的断点,包括硬件断点和内存断点。接着,ALT+M,在.data段下内存写入断点。

0046914EAA stos byte ptr es:[edi]//中断在这
0046914F69D2 A5B0CD4Bimul edx,edx,4BCDB0A5
00469155F9 stc
0046915672 02jb short UnPackMe.0046915A
00469158CD20 D1C269DBvxdjump DB69C2D1
0046915E70 1Fjo short UnPackMe.0046917F
00469160EE out dx,al
004691616A 03push 3
00469163DA49 0Ffimul dword ptr ds:[ecx+F]

下面就单步F8跟下去,会发现代码很乱,不用怕,接着往下走,当然向上的跳必须打断。

004695EB8985 53384000mov dword ptr ss:[ebp+403853],eax//从这开始,代码开始清晰
004695F18746 0Cxchg dword ptr ds:[esi+C],eax
004695F40BC0 or eax,eax
004695F60F84 1A040000je UnPackMe.00469A16
004695FC35 78563412xor eax,12345678
00469601E8 CD000000call UnPackMe.004696D3
0046960603C2 add eax,edx
004696088BD8 mov ebx,eax
0046960A50 push eax
0046960BFF95 D1364000call dword ptr ss:[ebp+4036D1]
0046961185C0 test eax,eax
004696130F85 D7000000jnz UnPackMe.004696F0
0046961953 push ebx
0046961AFF95 721C4000call dword ptr ss:[ebp+401C72]
0046962085C0 test eax,eax
004696220F85 C8000000jnz UnPackMe.004696F0//改jmp!跳过CRC校验
004696288B95 63374000mov edx,dword ptr ss:[ebp+403763]
0046962E0195 2B374000add dword ptr ss:[ebp+40372B],edx
004696340195 37374000add dword ptr ss:[ebp+403737],edx
0046963A6A 30push 30
0046963C53 push ebx
0046963DFFB5 37374000push dword ptr ss:[ebp+403737]
00469643EB 53jmp short UnPackMe.00469698
004696458B95 63374000mov edx,dword ptr ss:[ebp+403763]
0046964B0195 2B374000add dword ptr ss:[ebp+40372B],edx
004696510195 2F374000add dword ptr ss:[ebp+40372F],edx
004696570195 3F374000add dword ptr ss:[ebp+40373F],edx
0046965D0195 43374000add dword ptr ss:[ebp+403743],edx
004696630195 47374000add dword ptr ss:[ebp+403747],edx
004696696A 30push 30
0046966BFFB5 2B374000push dword ptr ss:[ebp+40372B]
0046967148 dec eax //★★注意一下从这里开始的代码!
0046967275 08jnz short UnPackMe.0046967C
00469674FFB5 47374000push dword ptr ss:[ebp+403747]
0046967AEB 1Cjmp short UnPackMe.00469698
0046967C40 inc eax
0046967D75 08jnz short UnPackMe.00469687
0046967FFFB5 2F374000push dword ptr ss:[ebp+40372F]
00469685EB 11jmp short UnPackMe.00469698
0046968740 inc eax
0046968875 08jnz short UnPackMe.00469692//★★到这里的为止的一系列跳!
0046968AFFB5 3F374000push dword ptr ss:[ebp+40373F]
00469690EB 06jmp short UnPackMe.00469698
00469692FFB5 43374000push dword ptr ss:[ebp+403743]
004696986A 00push 0
0046969AFF95 D9364000call dword ptr ss:[ebp+4036D9]
004696A08B85 761C4000mov eax,dword ptr ss:[ebp+401C76]


注意一下我用★标注的地方。你会发现,这些跳无论实现与否,OD都会提示错误!(这个自己改跳跟踪一下,应该很快就能发现,虽然各个提示都不相同,但有一点是相同的,就是OD提示错误信息,然后,你无法继续调试下去!)

既然,这里的一系列跳无论实现与否,都会出现错误提示,那么,现在的关键就是如何才能跳过这个地方!
那就向上找吧!

发现了吧!
004696220F85 C8000000jnz UnPackMe.004696F0//改jmp!跳过CRC校验

这个跳,就能跳过这些检测!因此,只要把这个跳改为jmp,就能kill掉CRC校验了!

三、处理IAT的加密

既然找到了这个CRC校验的地址,下面,就可以正常跟踪加密的IAT了。

再次ctrl+F2,重新载入,然后在.data段内存写入断点,断下后取消内存断点,然后CTRL+G,定位到00469622这个地址,改jmp,kill掉CRC校验后,然后再次在0045512C处下硬件断点,SHIFT+F9运行吧,下面就可以正常跟踪了!

多次SHIFT+F9后,观看寄存器信息


004698E78B85 53384000mov eax,dword ptr ss:[ebp+403853] //来到这后,看寄存器
004698ED40 inc eax
004698EE0F84 A8000000je UnPackMe.0046999C
004698F480A5 FC2F4000 FF and byte ptr ss:[ebp+402FFC],0FF
004698FB0F84 9B000000je UnPackMe.0046999C
0046990180A5 FD2F4000 FF and byte ptr ss:[ebp+402FFD],0FF
004699080F84 8E000000je UnPackMe.0046999C
0046990E8B85 57384000mov eax,dword ptr ss:[ebp+403857]
004699148907 mov dword ptr ds:[edi],eax
004699168BF8 mov edi,eax
0046991883E0 0Fand eax,0F
0046991B50 push eax
0046991CB0 B8mov al,0B8

------------------------------------------------------------------------------------------------------------

看寄存器
EAX 7C93188A ntdll.RtlDeleteCriticalSection
ECX 7C939AEB ntdll.7C939AEB
EDX 7C99C0D8 ntdll.7C99C0D8
EBX 00455736 ASCII "DeleteCriticalSection"
ESP 0012FF80
EBP 00066A24
ESI 00455000 UnPackMe.00455000
EDI 0045512C UnPackMe.0045512C
EIP 004698E7 UnPackMe.004698E7


你会发现,这个被加密的指针出来了吧!

因此0045512C处的指针就是ntdll.RtlDeleteCriticalSection

不过,由于被加密的指针太多,一个个都这么找实在太过费力(当然,如果其他的壳被机密的指针只有个位数,那完全可以用这种方法加以寻找)
那么,我们就寻找,是否有跳能跳过这个加密!

接着F8单步走下去


004699C5^\E9 1FFCFFFFjmp UnPackMe.004695E9//循环处理输入表
004699CA61 popad
004699CBC3 retn
004699CC8B9D 761C4000mov ebx,dword ptr ss:[ebp+401C76]
004699D233C0 xor eax,eax
004699D4B9 44000000mov ecx,44
004699D98DBD A82F4000lea edi,dword ptr ss:[ebp+402FA8]
004699DFF685 74364000 FF test byte ptr ss:[ebp+403674],0FF


这个jmp,就让他跳吧,从刚开始处理的地方寻找突破口!

可以发现,在这个时刻,在内存中的IAT是完整的!

0046970B0AD2 or dl,dl//跟到这里
0046970D74 1Eje short UnPackMe.0046972D
0046970F43 inc ebx
00469710FEC6 inc dh
0046971241 inc ecx
004697133A5408 FFcmp dl,byte ptr ds:[eax+ecx-1]
00469717^ 74 E8je short UnPackMe.00469701
004697193A5408 08cmp dl,byte ptr ds:[eax+ecx+8]
0046971D^ 74 E2je short UnPackMe.00469701
0046971F3A5408 12cmp dl,byte ptr ds:[eax+ecx+12]
00469723^ 74 DCje short UnPackMe.00469701
004697253A5408 1Dcmp dl,byte ptr ds:[eax+ecx+1D]
00469729^ 74 D6je short UnPackMe.00469701
0046972B^ EB D0jmp short UnPackMe.004696FD
0046972D0AF6 or dh,dh
0046972F895424 1Cmov dword ptr ss:[esp+1C],edx
0046973361 popad
00469734C685 FD2F4000 00 mov byte ptr ss:[ebp+402FFD],0
0046973B74 24je short UnPackMe.00469761//magic jmp!
0046973D80EC 08sub ah,8
00469740B0 01mov al,1
00469742FECC dec ah
0046974474 04je short UnPackMe.0046974A
00469746D0E0 shl al,1
00469748^ EB F8jmp short UnPackMe.00469742
0046974A8AA5 BE2E4000mov ah,byte ptr ss:[ebp+402EBE]
004697500885 BE2E4000or byte ptr ss:[ebp+402EBE],al



跟到这后,你就很明显的发现了,下面的的IAT处理都是完整的,而只有这段代码,不段的在向那些IAT的地址里输入垃圾信息!因此必须跳过这段!

至此,magic jump就这么出现在我们眼前了!

0046973B74 24je short UnPackMe.00469761//magic jmp!

把这个跳改jmp,得到的IAT就是完整和正确的!

下面就是完美的脱壳过程:

在.data段内存写入断点,断下后,取消断点,然后CTRL+B,0A F6(这就是上面总结出的特征码),把下面的跳改jmp,然后在00401000处F2,SHIFT+F9后就可以到达OEP,这时候,用REC看,IAT都是有效的!

下面的工作应该很清楚了!


感谢大家认真看完,希望对你有所帮助!
小糊涂虫 发表于 2008-10-2 11:58
设置OD异常选项......内存异常不选..........
shift+f9四次后......来到....
00469C72FE03 inc byte ptr ds:[ebx]
00469C74^ EB E8jmp short UnPackMe.00469C5E
00469C7623C4 and eax,esp
00469C782BC9 sub ecx,ecx
00469C7A64:8F01pop dword ptr fs:[ecx]
00469C7D59 pop ecx
00469C7EE8 00000000call UnPackMe.00469C83
00469C833D 954BD949cmp eax,49D94B95
00469C888B1C24 mov ebx,dword ptr ss:[esp]
00469C8B58 pop eax

在堆栈里有个SE句柄..00469C6C下断,,SHRFT+F9..然后F8一直.......
00469CF759 pop ecx
00469CF8^ EB C8jmp short UnPackMe.00469CC2
00469CFA59 pop ecxF4到这里......
00469CFB33C5 xor eax,ebp

然后F8到这里
00469C5566:ABstos word ptr es:[edi]
00469C5759 pop ecx
00469C585F pop edi
00469C59C3 retn 好像是这里........
00469C5AB3 CDmov bl,0CD
00469C5C43 inc ebx
00469C5D98 cwde

0045159C55 push ebp
0045159D8BEC mov ebp,esp
0045159F83C4 F0add esp,-10
004515A2B8 BC134500mov eax,UnPackMe.004513BC
004515A7E8 8846FBFFcall UnPackMe.00405C34
004515ACA1 E02F4500mov eax,dword ptr ds:[452FE0]
004515B18B00 mov eax,dword ptr ds:[eax]
004515B3E8 F8E5FFFFcall UnPackMe.0044FBB0
004515B8A1 E02F4500mov eax,dword ptr ds:[452FE0]
004515BD8B00 mov eax,dword ptr ds:[eax]
004515BFBA FC154500mov edx,UnPackMe.004515FC ; ASCII ".52pojie.cn"
004515C4E8 F7E1FFFFcall UnPackMe.0044F7C0

脱壳后,修复,,,发现有好多无效指针........(重新打开原程序在修复,不然修复时会死在那里,不知道怎么回事,.)然后用等级3修复......全部有效,OK..
dumped_.rar (159 KB, 下载次数: 8)
最后请教一下小生师傅,,,,,上一期的脱壳,,,我用别人的方法为什么就是不能到OEP.....,怎么都断不下来,换了好几个OD都一样...最后彻底晕了........ [s:17]
zapline 发表于 2008-10-2 00:16
脱不了
但是能找到OEP
两次内存断点法

ALT+M

内存映射,项目 28
地址=00460000
大小=00008000 (32768.)
物主=UnPackMe 00400000
区段=.rsrc
包含=resources
类型=Imag 01001002
访问=R
初始访问=RWE

第一次 F2 SHIFT+F9

ALT+M

内存映射,项目 22
地址=00401000
大小=00051000 (331776.)
物主=UnPackMe 00400000
区段=CODE
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE

第二次 F2SHIFT+F9

到达OEP

后面不知道怎么搞[s:38]
 楼主| 小生我怕怕 发表于 2008-10-2 00:28
老规矩我的内存法
━━━━━━━━━━━━━━━━━━━━━━━━━━
0046A09D >^\E9 5EDFFFFF jmp UnPackMe.00468000 //OD载入
0046A0A20000add byte ptr ds:[eax],al//ait+m打开内存镜像
0046A0A40093 A958AEE5 add byte ptr ds:[ebx+E5AE58A9],dl
0046A0AAA0 06000000 mov al,byte ptr ds:[6]
0046A0AF0000add byte ptr ds:[eax],al
━━━━━━━━━━━━━━━━━━━━━━━━━━
内存映射,项目 26 //在此F2设置访问中断
地址=00455000//shift+f9运行程序
大小=00003000 (12288.)
物主=UnPackMe 00400000
区段=.idata
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
004690C6AClods byte ptr ds:[esi]//程序停在这里
004690C734 45 xor al,45 //ctrl+b搜索二进制字符 0A F6
004690C98D1Blea ebx,dword ptr ds:[ebx]//这样的目的是为了闭开我们的加密指针
004690CB02C1add al,cl
004690CD02C2add al,dl
004690CF04 49 add al,49
004690D10AD2or dl,dl
004690D3D2C8ror al,cl
━━━━━━━━━━━━━━━━━━━━━━━━━━
0046972D0AF6or dh,dh
0046972F895424 1C mov dword ptr ss:[esp+1C],edx
0046973361popad//个人判断是在mzp的下面一点即是magic jump
00469734C685 FD2F4000 0>mov byte ptr ss:[ebp+402FFD],0//此处判断是根据看fly脱文得来
0046973B74 24 je short UnPackMe.00469761//此处的je改jmp也就是我们长说的magic jump
0046973D80EC 08 sub ah,8//在度打开内存镜像ait+m
━━━━━━━━━━━━━━━━━━━━━━━━━━
内存映射,项目 23 //在此F2设置访问中断
地址=00401000//shift+f9运行程序
大小=00051000 (331776.)
物主=UnPackMe 00400000
区段=CODE
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
0045159C55push ebp //标准的delphi入口
0045159D8BECmov ebp,esp//运行OD插件脱壳,即可避免开用importRCE之类的工具修复
0045159F83C4 F0 add esp,-10
004515A2B8 BC134500 mov eax,UnPackMe.004513BC
004515A7E8 8846FBFF call UnPackMe.00405C34
004515ACA1 E02F4500 mov eax,dword ptr ds:[452FE0]
004515B18B00mov eax,dword ptr ds:[eax]
004515B3E8 F8E5FFFF call UnPackMe.0044FBB0

unpack.rar

159 KB, 下载次数: 13, 下载积分: 吾爱币 -1 CB

 楼主| 小生我怕怕 发表于 2008-10-2 00:41
最后一次异常法
设置OD不忽略任何异常(即把所有的钩全部取消)
━━━━━━━━━━━━━━━━━━━━━━━━━━
0046A09D >^\E9 5EDFFFFF jmp UnPackMe.00468000//OD载入
0046A0A20000add byte ptr ds:[eax],al //打开我们的OD插件--选择异常记数器---选择开始计数
0046A0A40093 A958AEE5 add byte ptr ds:[ebx+E5AE58A9],dl//第一次程序跑飞后,从新加载程序,在次选择异常记数器--带我到OEP,此时停在最后一次异常
0046A0AAA0 06000000 mov al,byte ptr ds:[6]//以上为个人嗜好,大家可用shift+f9自己数
0046A0AF0000add byte ptr ds:[eax],al //ait+m在次打开内存镜像
0046A0B10000add byte ptr ds:[eax],al
━━━━━━━━━━━━━━━━━━━━━━━━━━
内存映射,项目 23 //在此F2设置访问中断
地址=00401000//shift+f9运行程序
大小=00051000 (331776.)
物主=UnPackMe 00400000
区段=CODE
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
0045159C55push ebp //标准的delphi入口
0045159D8BECmov ebp,esp//运行lordPE脱壳,在运行importRCE修复
0045159F83C4 F0 add esp,-10
004515A2B8 BC134500 mov eax,UnPackMe.004513BC
004515A7E8 8846FBFF call UnPackMe.00405C34
004515ACA1 E02F4500 mov eax,dword ptr ds:[452FE0]
004515B18B00mov eax,dword ptr ds:[eax]
004515B3E8 F8E5FFFF call UnPackMe.0044FBB0
━━━━━━━━━━━━━━━━━━━━━━━━━━
修复时会发现有N个无效,具体我没有去看,大家在次打开我们的原加壳程序
在次运行我们的importRCE选择第一个进程,也就是我们打开的进程非OD的进程
填入OEP:5159C 自动查找IAT,然后获取输入表,会出现N个无效,此时我们点 显示无效函数
然后点在信息窗口,任何一指针处,右键等级三跟踪,大家就会发现我们的指针都出来啦
还有一方法是天草教程里说到的,在这里我就不一一去说,大家有时间自己看看天草教程
修复后全部有效,抓取文件即可!

unpack.rar

159 KB, 下载次数: 2, 下载积分: 吾爱币 -1 CB

pcfans 发表于 2008-10-2 01:07
不好意思,第一次玩这个,我的脱壳过程刚才打包在那压缩文件里了,我的脱壳过程是这样的

脱壳过程:
采用两次断点法
alt+m在.rsrc段下F2断点shift+f9运行
再次
alt+m在00401000段下f2断点shift+f9运行
直接来到OEP
0045159C55pushebp
0045159D8BECmov ebp, esp
0045159F83C4 F0 add esp, -10
004515A2B8 BC134500 mov eax, 004513BC
004515A7E8 8846FBFF call00405C34
004515ACA1 E02F4500 mov eax, dword ptr [452FE0]
004515B18B00mov eax, dword ptr [eax]
004515B3E8 F8E5FFFF call0044FBB0

下面LoadPE脱壳,ImportREC修复,出现大量无效函数,用等级3可以完全修复,修复后抓取脱壳文件,ok可以运行,peid查壳,为delphi6.0-7.0的程序,到此脱壳完毕。

脱壳文件:
http://www.禁止使用网挣网盘/space/show/qiannao/上传分享/2008/10/2/UnPackMe1002.rar/.page
lqiulu 发表于 2008-10-2 01:24
内存镜像法
第一次:ALT + M
在00460000F2下断 shift + F9运行到这里:

00469468F3:A5 rep movs dword ptr es:[edi],dword ptr ds>
0046946A8BCBmov ecx,ebx
0046946CF3:A4 rep movs byte ptr es:[edi],byte ptr ds:[>
0046946E8BF2mov esi,edx
004694708B7C24 28 mov edi,dword ptr ss:[esp+28]
0046947452push edx
0046947555push ebp
00469476FCcld

第二次:ALT + M
在00401000F2下断 shift + F9运行到这里:


0045159C55push ebp //这里说是OEP了
0045159D8BECmov ebp,esp
0045159F83C4 F0 add esp,-10
004515A2B8 BC134500 mov eax,UnPackMe.004513BC
004515A7E8 8846FBFF call UnPackMe.00405C34
004515ACA1 E02F4500 mov eax,dword ptr ds:[452FE0]
004515B18B00mov eax,dword ptr ds:[eax]
004515B3E8 F8E5FFFF call UnPackMe.0044FBB0
004515B8A1 E02F4500 mov eax,dword ptr ds:[452FE0]
004515BD8B00mov eax,dword ptr ds:[eax]
004515BFBA FC154500 mov edx,UnPackMe.004515FC; ASCII ".52pojie.cn"
004515C4E8 F7E1FFFF call UnPackMe.0044F7C0
004515C98B0D C0304500 mov ecx,dword ptr ds:[4530C0]; UnPackMe.00454BD0
004515CFA1 E02F4500 mov eax,dword ptr ds:[452FE0]


用lordPE进行dump,修正镜像大小。
这个壳关键还是修复:关掉od,重新运行加壳文件(不是用OD载入),用ImportREC进行修复,
填入oep:5159C,点自动查找,获取输入表,有103个无效,用等级三进行修复,修复后完全有效。
再对dump下来的程序进行修复后正常运行。

dumped_.rar

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

维护世界和平 发表于 2008-10-2 01:36

0046A09D >^\E9 5EDFFFFF JMP UnPackMe.00468000
0046A0A20000ADD BYTE PTR DS:[EAX],AL
0046A0A40093 A958AEE5 ADD BYTE PTR DS:[EBX+E5AE58A9],DL
0046A0AAA0 06000000 MOV AL,BYTE PTR DS:[6]
0046A0AF0000ADD BYTE PTR DS:[EAX],AL
0046A0B10000ADD BYTE PTR DS:[EAX],AL


Memory map, 项目 28//F2断点 运行
地址=00460000
大小=00008000 (32768.)
属主=UnPackMe 00400000
区段=.rsrc
包含=资源
类型=映像 01001002
访问=R
初始访问=RWE


00469468F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>//来到这里
0046946A8BCBMOV ECX,EBX
0046946CF3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
0046946E8BF2MOV ESI,EDX
004694708B7C24 28 MOV EDI,DWORD PTR SS:[ESP+28]
0046947452PUSH EDX


Memory map, 项目 22
地址=00401000//F2 运行
大小=00051000 (331776.)
属主=UnPackMe 00400000
区段=CODE
包含=代码
类型=映像 01001002
访问=R
初始访问=RWE


0045159C55PUSH EBP//到OEP。。。
0045159D8BECMOV EBP,ESP
0045159F83C4 F0 ADD ESP,-10
004515A2B8 BC134500 MOV EAX,UnPackMe.004513BC
004515A7E8 8846FBFF CALL UnPackMe.00405C34
004515ACA1 E02F4500 MOV EAX,DWORD PTR DS:[452FE0]
004515B18B00MOV EAX,DWORD PTR DS:[EAX]
004515B3E8 F8E5FFFF CALL UnPackMe.0044FBB0
004515B8A1 E02F4500 MOV EAX,DWORD PTR DS:[452FE0]
004515BD8B00MOV EAX,DWORD PTR DS:[EAX]
004515BFBA FC154500 MOV EDX,UnPackMe.004515FC; ASCII

".52pojie.cn"
004515C4E8 F7E1FFFF CALL UnPackMe.0044F7C0

dump下来。然后修复,一些IAT无效,用三级修复就行了。修复完成,可以运行~

脱壳文件+脱文.rar

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

liky 发表于 2008-10-2 01:45
两次内存境像法
ALT+M打开内存境像 设置访问中断SHIT+F9运行
Memory map, 项目 29
地址=00460000
大小=00008000 (32768.)
属主=UnPackMe 00400000
区段=.rsrc
包含=资源
类型=映像 01001002
访问=R
初始访问=RWE
00469468F3:A5 rep movs dword ptr es:[edi],dword ptr ds>到这
0046946A8BCBmov ecx,ebx
0046946CF3:A4 rep movs byte ptr es:[edi],byte ptr ds:[>
0046946E8BF2mov esi,edx
004694708B7C24 28 mov edi,dword ptr ss:[esp+28]
0046947452push edx
0046947555push ebp
00469476FCcld
00469477B2 80 mov dl,80
0046947933DBxor ebx,ebx

ALT+M打开内存境像 设置访问中断SHIFT +F9运行
Memory map, 项目 23
地址=00401000
大小=00051000 (331776.)
属主=UnPackMe 00400000
区段=CODE
包含=代码
类型=映像 01001002
访问=R
初始访问=RWE
0045159C55push ebp
0045159D8BECmov ebp,esp
0045159F83C4 F0 add esp,-10
004515A2B8 BC134500 mov eax,UnPackMe.004513BC
004515A7E8 8846FBFF call UnPackMe.00405C34
004515ACA1 E02F4500 mov eax,dword ptr ds:[452FE0]
004515B18B00mov eax,dword ptr ds:[eax]
004515B3E8 F8E5FFFF call UnPackMe.0044FBB0




程序直接到OEPOD直接脱壳
脱壳之后无法运行
打开 IMPORT发现103个无效指针
然后打开UNPACK..EXEIMPORT 加载新打开的程序
跟踪等级三进行修复
修复以后程序可正常运行~!!

UNPACK.rar

160 KB, 下载次数: 0, 下载积分: 吾爱币 -1 CB

fox2006 发表于 2008-10-2 02:19
吾爱专题脱壳练习
--------------------------------------------------------------------------------
【编写程序】:Borland Delphi 6.0 - 7.0
【调试环境】:WinXP、OllyDbg、PEiD、LordPE、ImportREC
【程序查壳】:tElock 1.0 (private) -> tE!
【脱壳方法】:内存镜像法
————————————————————————————————————————————————————————

0046A09D >^\E9 5EDFFFFF jmp UnPackMe.00468000; OD载入到这,ALT+M,00460000在下内存断点,Shift+F9
0046A0A20000add byte ptr ds:[eax],al
0046A0A40093 A958AEE5 add byte ptr ds:[ebx+E5AE58A9],dl
0046A0AAA0 06000000 mov al,byte ptr ds:[6]
0046A0AF0000add byte ptr ds:[eax],al
0046A0B10000add byte ptr ds:[eax],al
---------------------------------------------------------------------------------
00469468F3:A5 rep movs dword ptr es:[edi],dword ptr ds>; 断在这里,再次ALT+M,在00401000下内存断点,Shift+F9
0046946A8BCBmov ecx,ebx
0046946CF3:A4 rep movs byte ptr es:[edi],byte ptr ds:[>
0046946E8BF2mov esi,edx
004694708B7C24 28 mov edi,dword ptr ss:[esp+28]
----------------------------------------------------------------------------------
0045159C55push ebp ; 到达OEP,DUMP+修复
0045159D8BECmov ebp,esp
0045159F83C4 F0 add esp,-10
004515A2B8 BC134500 mov eax,UnPackMe.004513BC
004515A7E8 8846FBFF call UnPackMe.00405C34
004515ACA1 E02F4500 mov eax,dword ptr ds:[452FE0]
004515B18B00mov eax,dword ptr ds:[eax]



吾爱破解脱壳练习6
维护世界和平 发表于 2008-10-2 02:22

bp GetModuleHandleA 下这个断点 F9运行,取消断点 然后alt+F9返回

0046A09D >^\E9 5EDFFFFF JMP UnPackMe.00468000
0046A0A20000ADD BYTE PTR DS:[EAX],AL
0046A0A40093 A958AEE5 ADD BYTE PTR DS:[EBX+E5AE58A9],DL
0046A0AAA0 06000000 MOV AL,BYTE PTR DS:[6]
0046A0AF0000ADD BYTE PTR DS:[EAX],AL
0046A0B10000ADD BYTE PTR DS:[EAX],AL
0046A0B30000ADD BYTE PTR DS:[EAX],AL
0046A0B505 A10600F5 ADD EAX,F50006A1


然后F8,看call就F7
004685BA33D8XOR EBX,EAX; user32.77D10000
004685BC33C3XOR EAX,EBX
004685BE33D8XOR EBX,EAX
004685C0E8 0C000000 CALL UnPackMe.004685D1
004685C545INC EBP
004685C66EOUTS DX,BYTE PTR ES:[EDI]; I/O 命令
004685C775 6D JNZ SHORT UnPackMe.00468636
004685C957PUSH EDI
004685CA696E 64 6F77730>IMUL EBP,DWORD PTR DS:[ESI+64],73776F
004685D153PUSH EBX

来到这里。然后ESP定律
004688D860PUSHAD
004688D9E8 09000000 CALL UnPackMe.004688E7//在这里下ESP,然后就一直F9运行N次
004688DE8B6424 08 MOV ESP,DWORD PTR SS:[ESP+8]
004688E2EB 01 JMP SHORT UnPackMe.004688E5
004688E4^ EB EB JMP SHORT UnPackMe.004688D1
004688E61B2BSBB EBP,DWORD PTR DS:[EBX]
004688E8C9LEAVE
004688E974 02 JE SHORT UnPackMe.004688ED
004688EBCD 20 INT 20
004688ED64:FF31 PUSH DWORD PTR FS:[ECX]


直到运行到了这里!就alt+m 在CODE段下断点!运行,就到了OEP
004696FD33C9XOR ECX,ECX
004696FF2AF6SUB DH,DH
004697018A13MOV DL,BYTE PTR DS:[EBX]
00469703F6C2 40 TEST DL,40
0046970674 03 JE SHORT UnPackMe.0046970B
0046970880E2 5F AND DL,5F
0046970B0AD2OR DL,DL
0046970D74 1E JE SHORT UnPackMe.0046972D
0046970F43INC EBX
00469710FEC6INC DH
0046971241INC ECX
004697133A5408 FF CMP DL,BYTE PTR DS:[EAX+ECX-1]
00469717^ 74 E8 JE SHORT UnPackMe.00469701

0045159C55PUSH EBP//到OEP。。。
0045159D8BECMOV EBP,ESP
0045159F83C4 F0 ADD ESP,-10
004515A2B8 BC134500 MOV EAX,UnPackMe.004513BC
004515A7E8 8846FBFF CALL UnPackMe.00405C34
004515ACA1 E02F4500 MOV EAX,DWORD PTR DS:[452FE0]
004515B18B00MOV EAX,DWORD PTR DS:[EAX]
004515B3E8 F8E5FFFF CALL UnPackMe.0044FBB0
004515B8A1 E02F4500 MOV EAX,DWORD PTR DS:[452FE0]
004515BD8B00MOV EAX,DWORD PTR DS:[EAX]
004515BFBA FC154500 MOV EDX,UnPackMe.004515FC; ASCII ".52pojie.cn"
004515C4E8 F7E1FFFF CALL UnPackMe.0044F7C0

dump下来。然后修复,一些IAT无效,用三级修复就行了。修复完成,可以运行~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

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

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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