吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 60568|回复: 10
收起左侧

[原创] 吾爱专题脱壳练习----压缩壳练习之一

   关闭 [复制链接]
ximo 发表于 2008-9-18 12:37
本次主题是压缩壳,fly说,脱尽压缩壳,再去学加密壳,因此,先放压缩壳练习
这次的压缩壳比较生僻,是kkrunchy
kkrunchy 是一个 64K Demo 专用的压缩工具,压缩率非常高
最好都加点简单的分析,不然,用查OEP的插件一查,下个硬件断点都搞定了,这样就没什么意思了,呵呵

替超兄补充几点:
1.脱壳后的文件大家以千脑形式上传,目的是为了便于隐藏文件和节约论坛空间
2.脱壳后的文件,请大家以脱文附带脱壳后程序打包压缩传于千脑网盘
3.对于回帖过程中千万不要出现灌水,否则BAN了ID
4.对于有优秀脱文或优秀脱壳方法的朋友,给于适当威望奖励
5.鉴于此练习是针对论坛的所有人,请大家踊跃参加,如果不是脱了壳教作业的,请不要顶帖子,方便管理查阅,及时给出评分
6.以下为需要设置威望的格式
7.脱壳一以周期计算,(周期=等于三天)
8.脱壳周期一结束,就开始公布答案让大家能有更充分的学习环境,让不懂脱的朋友去寻找你失误的地方争取早日赶上论坛的积极份子

UnPackMe.rar

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

免费评分

参与人数 5吾爱币 +2 热心值 +5 收起 理由
飞一般的尖尖 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
开始的复活节 + 1 + 1 谢谢@Thanks!
yeluosuif + 1 谢谢@Thanks!
时凉97 + 1 谢谢@Thanks!
min-gong + 1 谢谢@Thanks!

查看全部评分

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

小生我怕怕 发表于 2008-9-18 21:28
我在来说下单步的脱壳方法吧,其实只要一直打断向上跳转很快就可到
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F157B >/$BD 082A3F00 mov ebp,UnPackMe.003F2A08//OD载入
003F1580|.C745 00 2C013>mov dword ptr ss:[ebp],UnPackMe.003F012C //一路谩长的F8
003F1587|.FF4D 08 dec [arg.1]
003F158A|.C645 0C 05mov byte ptr ss:[ebp+C],5
003F158E|.8D7D 14 lea edi,[arg.4]
003F1591|.31C0xor eax,eax
003F1593|.B4 04 mov ah,4
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F15AA|>8D9C8D A00000>/lea ebx,dword ptr ss:[ebp+ecx*4+A0]
003F15B1|. |FFD6|call esi
003F15B3|. |10C9|adc cl,cl
003F15B5|.^\73 F3 \jnb short UnPackMe.003F15AA
003F15B7|.FF45 0C inc [arg.2] //F4运行到所选
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F15BF|> /8D5C8D 18 /lea ebx,dword ptr ss:[ebp+ecx*4+18]
003F15C3|. |FFD6|call esi
003F15C5|.^|74 DD |je short UnPackMe.003F15A4
003F15C7|. |E3 17 |jecxz short UnPackMe.003F15E0//F4运行到所选
003F15C9|.8D5D 1C |lea ebx,[arg.6]//继续F8走起
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F15AA|>8D9C8D A00000>/lea ebx,dword ptr ss:[ebp+ecx*4+A0]
003F15B1|. |FFD6|call esi
003F15B3|. |10C9|adc cl,cl
003F15B5|.^\73 F3 \jnb short UnPackMe.003F15AA
003F15B7|.FF45 0C inc [arg.2]//F4运行到所选
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F15BF8D5C8D 18 lea ebx,dword ptr ss:[ebp+ecx*4+18]
003F15C3FFD6call esi
003F15C5^ 74 DD je short UnPackMe.003F15A4
003F15C7E3 17 jecxz short UnPackMe.003F15E0//F4运行到所选
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F1602F6C2 10 test dl,10
003F1605^ 74 F3 je short UnPackMe.003F15FA
003F160741inc ecx//F4运行到所选
003F160891xchg eax,ecx
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F162D^\EB 90 jmp short UnPackMe.003F15BF
003F162FBE 3D004000 mov esi,UnPackMe.0040003D//F4运行到所选
003F1634BB 20293F00 mov ebx,<&KERNEL32.LoadLibraryA>
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F1649AClods byte ptr ds:[esi]
003F164A84C0test al,al
003F164C^ 75 FB jnz short UnPackMe.003F1649
003F164E3806cmp byte ptr ds:[esi],al //F4运行到所选
003F1650^ 74 E8 je short UnPackMe.003F163A
003F165278 0E js short UnPackMe.003F1662
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F166566:AD lods word ptr ds:[esi]
003F166750push eax
003F1668^ EB EB jmp short UnPackMe.003F1655//F4运行到所选
003F166A5Dpop ebp//继续F8单步走起
003F166BC3retn
━━━━━━━━━━━━━━━━━━━━━━━━━━
003FFCE4BF 00104000 mov edi,UnPackMe.00401000//通过上面的retn来到这里
003FFCE989FBmov ebx,edi//继续F8单步走起
003FFCEB81EB 04000000 sub ebx,4
003FFCF1895D 58 mov dword ptr ss:[ebp+58],ebx
003FFCF431C0xor eax,eax
003FFCF68945 5C mov dword ptr ss:[ebp+5C],eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
003FFD1080F9 16 cmp cl,16
003FFD13^ 75 F3 jnz short UnPackMe.003FFD08
003FFD158B75 04 mov esi,dword ptr ss:[ebp+4]//F4运行到所选
━━━━━━━━━━━━━━━━━━━━━━━━━━
003FFD4A^\E2 DF loopd short UnPackMe.003FFD2B
003FFD4C5Fpop edi //F4运行到所选
003FFD4D31C0xor eax,eax
003FFD4F3945 64 cmp dword ptr ss:[ebp+64],eax
003FFD5274 04 je short UnPackMe.003FFD58
003FFD548745 64 xchg dword ptr ss:[ebp+64],eax
003FFD5796xchg eax,esi
003FFD583B75 00 cmp esi,dword ptr ss:[ebp]
003FFD5B0F84 9F190000 je UnPackMe.00401700 //这里直接右键跟随或者Enter
━━━━━━━━━━━━━━━━━━━━━━━━━━
004017000000add byte ptr ds:[eax],al //通过跟随来到这里,直接右键--断点--硬件访问断点
004017020000add byte ptr ds:[eax],al //从新加载程序后直接运行
004017040000add byte ptr ds:[eax],al
004017060000add byte ptr ds:[eax],al
004017080000add byte ptr ds:[eax],al
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170055push ebp //这里是OEP啦
004017018BECmov ebp,esp//删除硬件断点,直接dump程序啦
004017036A FF push -1
0040170568 00254000 push UnPackMe.00402500
0040170A68 86184000 push UnPackMe.00401886
0040170F64:A1 00000000mov eax,dword ptr fs:[0]
0040171550push eax

免费评分

参与人数 1热心值 +1 收起 理由
可乐丶薄荷糖 + 1 我很赞同!

查看全部评分

A-new 发表于 2008-9-18 12:55
[s:40] ,已经脱鸟……
UnPacked.rar

载入OD
003F165F|.5Bpop ebx
003F1660|.59pop ecx
003F1661|.C3retn
003F1662|>46inc esi
003F1663|.31C0xor eax, eax
003F1665|.66:AD lodsword ptr [esi]
003F1667|.50pusheax
003F1668|.^ EB EB jmp short 003F1655
003F166A|>5Dpop ebp
003F166B\.C3retn 这里下断

F9 运行 接着 F8 到这里 003FFCE4删除分析

003FFCE4BF 00104000 mov edi, 00401000
003FFCE989FBmov ebx, edi
003FFCEB81EB 04000000 sub ebx, 4
003FFCF1895D 58 mov dword ptr [ebp+58], ebx
003FFCF431C0xor eax, eax
003FFCF68945 5C mov dword ptr [ebp+5C], eax
003FFCF98945 64 mov dword ptr [ebp+64], eax
003FFCFC40inc eax
003FFCFD8945 60 mov dword ptr [ebp+60], eax
003FFD008945 68 mov dword ptr [ebp+68], eax
003FFD038D5E 58 lea ebx, dword ptr [esi+58]
003FFD0631C9xor ecx, ecx
003FFD08ADlodsdword ptr [esi]
003FFD09895C8D 00 mov dword ptr [ebp+ecx*4], ebx
003FFD0D01C3add ebx, eax
003FFD0F41inc ecx
003FFD1080F9 16 cmp cl, 16
003FFD13^ 75 F3 jnz short 003FFD08
003FFD158B75 04 mov esi, dword ptr [ebp+4]
003FFD188775 00 xchgdword ptr [ebp], esi
003FFD1B57pushedi
003FFD1C8DBD 68040000 lea edi, dword ptr [ebp+468]
003FFD22AClodsbyte ptr [esi]
003FFD230FB6C8movzx ecx, al
003FFD26BB 3DFF3F00 mov ebx, 003FFF3D
003FFD2B89F0mov eax, esi
003FFD2DABstosdword ptr es:[edi]
003FFD2E31C0xor eax, eax
003FFD30AClodsbyte ptr [esi]
003FFD313C 66 cmp al, 66
003FFD3375 01 jnz short 003FFD36
003FFD35AClodsbyte ptr [esi]
003FFD363C 0F cmp al, 0F
003FFD3875 03 jnz short 003FFD3D
003FFD3AAClodsbyte ptr [esi]
003FFD3BB4 01 mov ah, 1
003FFD3DD1E8shr eax, 1
003FFD3FD7xlatbyte ptr [ebx+al]
003FFD4073 03 jnb short 003FFD45
003FFD42C0E8 04 shr al, 4
003FFD45A8 02 testal, 2
003FFD4774 01 jeshort 003FFD4A
003FFD4946inc esi
003FFD4A^ E2 DF loopd short 003FFD2B
003FFD4C5Fpop edi
003FFD4D31C0xor eax, eax
003FFD4F3945 64 cmp dword ptr [ebp+64], eax
003FFD5274 04 jeshort 003FFD58
003FFD548745 64 xchgdword ptr [ebp+64], eax
003FFD5796xchgeax, esi
003FFD583B75 00 cmp esi, dword ptr [ebp]
003FFD5B0F84 9F190000 je00401700大跳转
003FFD61AClodsbyte ptr [esi]
………………
003FFF27A5movsdword ptr es:[edi], dword ptr [e>
003FFF288775 30 xchgdword ptr [ebp+30], esi
003FFF2B^ E9 1DFEFFFF jmp 003FFD4D
003FFF308775 2C xchgdword ptr [ebp+2C], esi
003FFF3366:A5 movsword ptr es:[edi], word ptr [esi>
003FFF358775 2C xchgdword ptr [ebp+2C], esi
003FFF38^ E9 10FEFFFF jmp 003FFD4D

观察上面代码,一直在循环,跟随那个大跳转,下断点(偶下硬件执行),F9,哈哈就到OEP了

0040170055pushebp; UnPackMe.003F2A08
004017018BECmov ebp, esp
004017036A FF push-1
0040170568 00254000 push00402500
0040170A68 86184000 push00401886 ; jmp 到 msvcrt._except_handler3
0040170F64:A1 00000000mov eax, dword ptr fs:[0]
0040171550pusheax

dump 、fix 收工!

免费评分

参与人数 1热心值 +1 收起 理由
r19990511 + 1 怎么大跳转啊 大神

查看全部评分

Hmily 发表于 2008-9-18 15:20
小生我怕怕 发表于 2008-9-18 13:27
脱壳文件
UnPackMe.rar

首先OD载入
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F157B >/$BD 082A3F00 mov ebp,UnPackMe.003F2A08//OD载入程序停在这里
003F1580|.C745 00 2C013>mov dword ptr ss:[ebp],UnPackMe.003F012C //开始慢长的F8
003F1587|.FF4D 08 dec [arg.1]
003F158A|.C645 0C 05mov byte ptr ss:[ebp+C],5
003F158E|.8D7D 14 lea edi,[arg.4]
003F1591|.31C0xor eax,eax
003F1593|.B4 04 mov ah,4
003F1595|.89C1mov ecx,eax
003F1597|.F3:AB rep stos dword ptr es:[edi]
003F1599|.BF E4FC3F00 mov edi,UnPackMe.003FFCE4
003F159E|.57push edi
003F159F|.BE 6C163F00 mov esi,UnPackMe.003F166C//此处执行ESP定律
003F15A4|>31C9xor ecx,ecx
━━━━━━━━━━━━━━━━━━━━━━━━━━
003FFCE4BF 00104000 mov edi,UnPackMe.00401000//执行完ESP定律后程序停在此处
003FFCE989FBmov ebx,edi//继续F8单步
003FFCEB81EB 04000000 sub ebx,4
003FFCF1895D 58 mov dword ptr ss:[ebp+58],ebx
003FFCF431C0xor eax,eax
003FFCF68945 5C mov dword ptr ss:[ebp+5C],eax
003FFCF98945 64 mov dword ptr ss:[ebp+64],eax
003FFCFC40inc eax
003FFCFD8945 60 mov dword ptr ss:[ebp+60],eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
003FFD4C5Fpop edi; UnPackMe.00401000
003FFD4D31C0xor eax,eax
003FFD4F3945 64 cmp dword ptr ss:[ebp+64],eax
003FFD5274 04 je short UnPackMe.003FFD58
003FFD548745 64 xchg dword ptr ss:[ebp+64],eax
003FFD5796xchg eax,esi
003FFD583B75 00 cmp esi,dword ptr ss:[ebp] //下面即跳向OEP,但是不跳转
003FFD5B0F84 9F190000 je UnPackMe.00401700 //此处即跳向我们的OEP
003FFD61AClods byte ptr ds:[esi] //在上面的je右键,跟随过去,也可以按Enter
003FFD623C FF cmp al,0FF
003FFD6474 0D je short UnPackMe.003FFD73
━━━━━━━━━━━━━━━━━━━━━━━━━━
004017000000add byte ptr ds:[eax],al //我们停在了这里,但是一段空代码
004017020000add byte ptr ds:[eax],al //我们在上面的00401700右键设置硬件访问断点,然后重新加载
004017040000add byte ptr ds:[eax],al
004017060000add byte ptr ds:[eax],al
004017080000add byte ptr ds:[eax],al
0040170A0000add byte ptr ds:[eax],al
0040170C0000add byte ptr ds:[eax],al
0040170E0000add byte ptr ds:[eax],al
004017100000add byte ptr ds:[eax],al
004017120000add byte ptr ds:[eax],al
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F157B >/$BD 082A3F00 mov ebp,UnPackMe.003F2A08//重新加载程序后
003F1580|.C745 00 2C013>mov dword ptr ss:[ebp],UnPackMe.003F012C //直接F9运行程序
003F1587|.FF4D 08 dec [arg.1]
003F158A|.C645 0C 05mov byte ptr ss:[ebp+C],5
003F158E|.8D7D 14 lea edi,[arg.4]
003F1591|.31C0xor eax,eax
003F1593|.B4 04 mov ah,4
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170055push ebp//这里即是OEP,dump程序修复即可
004017018BECmov ebp,esp
004017036A FF push -1
0040170568 00254000 push UnPackMe.00402500
0040170A68 86184000 push UnPackMe.00401886 ; jmp to msvcrt._except_handler3
0040170F64:A1 00000000mov eax,dword ptr fs:[0]
0040171550push eax
0040171664:8925 0000000>mov dword ptr fs:[0],esp
lqiulu 发表于 2008-9-19 16:24
用esp定律然后单步
003F157B >/$BD 082A3F00 mov ebp,UnPackMe.003F2A08
003F1580|.C745 00 2C013>mov dword ptr ss:[ebp],UnPackMe.00>
003F1587|.FF4D 08 dec dword ptr ss:[ebp+8]
003F158A|.C645 0C 05mov byte ptr ss:[ebp+C],5
003F158E|.8D7D 14 lea edi,dword ptr ss:[ebp+14]
003F1591|.31C0xor eax,eax
003F1593|.B4 04 mov ah,4
003F1595|.89C1mov ecx,eax
003F1597|.F3:AB rep stos dword ptr es:[edi]
003F1599|.BF E4FC3F00 mov edi,UnPackMe.003FFCE4
003F159E|.57push edi
003F159F|.BE 6C163F00 mov esi,UnPackMe.003F166C//这里用一次esp定律
003F15A4|>31C9xor ecx,ecx
003F15A6|.41inc ecx
来到这里:
003FFCE4BF 00104000 mov edi,UnPackMe.00401000//来到这里。F8单步向下。
003FFCE989FBmov ebx,edi
003FFCEB81EB 04000000 sub ebx,4
003FFCF1895D 58 mov dword ptr ss:[ebp+58],ebx
003FFCF431C0xor eax,eax
003FFCF68945 5C mov dword ptr ss:[ebp+5C],eax
003FFCF98945 64 mov dword ptr ss:[ebp+64],eax
003FFCFC40inc eax
003FFCFD8945 60 mov dword ptr ss:[ebp+60],eax
003FFD008945 68 mov dword ptr ss:[ebp+68],eax
003FFD038D5E 58 lea ebx,dword ptr ds:[esi+58]
003FFD0631C9xor ecx,ecx
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
003FFD0F41inc ecx
003FFD1080F9 16 cmp cl,16
003FFD13^ 75 F3 jnz short UnPackMe.003FFD08 //这里向回跳,在下面的代码处F4
003FFD158B75 04 mov esi,dword ptr ss:[ebp+4]//这里F4
003FFD188775 00 xchg dword ptr ss:[ebp],esi
003FFD1B57push edi
003FFD1C8DBD 68040000 lea edi,dword ptr ss:[ebp+468]
003FFD22AClods byte ptr ds:[esi]
003FFD230FB6C8movzx ecx,al
003FFD26BB 3DFF3F00 mov ebx,UnPackMe.003FFF3D
003FFD2B89F0mov eax,esi
003FFD2DABstos dword ptr es:[edi]
003FFD2E31C0xor eax,eax
003FFD30AClods byte ptr ds:[esi]
003FFD313C 66 cmp al,66
003FFD3375 01 jnz short UnPackMe.003FFD36
003FFD35AClods byte ptr ds:[esi]
003FFD363C 0F cmp al,0F
003FFD3875 03 jnz short UnPackMe.003FFD3D
003FFD3AAClods byte ptr ds:[esi]
003FFD3BB4 01 mov ah,1
003FFD3DD1E8shr eax,1
003FFD3FD7xlat byte ptr ds:[ebx+al]
003FFD4073 03 jnb short UnPackMe.003FFD45
003FFD42C0E8 04 shr al,4
003FFD45A8 02 test al,2
003FFD4774 01 je short UnPackMe.003FFD4A
003FFD4946inc esi
003FFD4A^ E2 DF loopd short UnPackMe.003FFD2B//这里向上循环,在下面的代码F4
003FFD4C5Fpop edi//F4
003FFD4D31C0xor eax,eax
003FFD4F3945 64 cmp dword ptr ss:[ebp+64],eax
003FFD5274 04 je short UnPackMe.003FFD58
003FFD548745 64 xchg dword ptr ss:[ebp+64],eax
003FFD5796xchg eax,esi
003FFD583B75 00 cmp esi,dword ptr ss:[ebp]
003FFD5B0F84 9F190000 je UnPackMe.00401700//看到这里是大的跳转,跨区段的。当跳转实现的时候,就跳向OEP了。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

跳不跳关键在于esi与dword ptr ss:[ebp] 的值是不是相等,相等的话就跳,所以我们下条件断点:shift+f4
esi==[ebp] 为条件,断下后,调单步,就到oep了。

。。。。。。。。。。。。。。。。。。。。。

0040170055push ebp ; UnPackMe.003F2A08 //这里就是OEP
004017018BECmov ebp,esp
004017036A FF push -1
0040170568 00254000 push UnPackMe.00402500
0040170A68 86184000 push UnPackMe.00401886 ; jmp to msvcrt._except_handler3
0040170F64:A1 00000000mov eax,dword ptr fs:[0]
0040171550push eax
0040171664:8925 0000000>mov dword ptr fs:[0],esp

unp_.rar

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

tianxj 发表于 2008-9-18 12:57
0040170055PUSH EBP ; UnPackMe.003F2A08

超哥,对不??
维护世界和平 发表于 2008-9-18 13:07
[s:40][s:40][s:40]
脱了脱了脱了~
wgz001 发表于 2008-9-18 15:20
先单步运行到此处
003F159F|.BE 6C163F00 MOV ESI,UnPackMe.003F166C跟随到数据框ESP
F9停在这里删除分析
003FFCE4BF 00104000 MOV EDI,UnPackMe.00401000
003FFCE989FBMOV EBX,EDI
003FFCEB81EB 04000000 SUB EBX,4
003FFCF1895D 58 MOV DWORD PTR SS:[EBP+58],EBX
003FFCF431C0XOR EAX,EAX
003FFCF68945 5C MOV DWORD PTR SS:[EBP+5C],EAX

继续三次F9后到这里

004017018BECMOV EBP,ESP
004017036A FF PUSH -1
0040170568 00254000 PUSH UnPackMe.00402500
0040170A68 86184000 PUSH UnPackMe.00401886 ; JMP to msvcrt._except_handler3
0040170F64:A1 00000000MOV EAX,DWORD PTR FS:[0]
0040171550PUSH EAX
0040171664:8925 0000000>MOV DWORD PTR FS:[0],ESP
0040171D83EC 68 SUB ESP,68
0040172053PUSH EBX
0040172156PUSH ESI
0040172257PUSH EDI

貌似OEP 向上翻一行到00401700右键 “在此新建EIP”就可以DUMP 了修复正常

不对之处还请指正谢谢
小糊涂虫 发表于 2008-9-18 16:19
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-26 00:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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