吾爱专题脱壳练习----压缩壳练习之一
本次主题是压缩壳,fly说,脱尽压缩壳,再去学加密壳,因此,先放压缩壳练习这次的压缩壳比较生僻,是kkrunchy
kkrunchy 是一个 64K Demo 专用的压缩工具,压缩率非常高
最好都加点简单的分析,不然,用查OEP的插件一查,下个硬件断点都搞定了,这样就没什么意思了,呵呵
替超兄补充几点:
1.脱壳后的文件大家以千脑形式上传,目的是为了便于隐藏文件和节约论坛空间
2.脱壳后的文件,请大家以脱文附带脱壳后程序打包压缩传于千脑网盘
3.对于回帖过程中千万不要出现灌水,否则BAN了ID
4.对于有优秀脱文或优秀脱壳方法的朋友,给于适当威望奖励
5.鉴于此练习是针对论坛的所有人,请大家踊跃参加,如果不是脱了壳教作业的,请不要顶帖子,方便管理查阅,及时给出评分
6.以下为需要设置威望的格式
7.脱壳一以周期计算,(周期=等于三天)
8.脱壳周期一结束,就开始公布答案让大家能有更充分的学习环境,让不懂脱的朋友去寻找你失误的地方争取早日赶上论坛的积极份子 我在来说下单步的脱壳方法吧,其实只要一直打断向上跳转很快就可到
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F157B >/$BD 082A3F00 mov ebp,UnPackMe.003F2A08//OD载入
003F1580|.C745 00 2C013>mov dword ptr ss:,UnPackMe.003F012C //一路谩长的F8
003F1587|.FF4D 08 dec
003F158A|.C645 0C 05mov byte ptr ss:,5
003F158E|.8D7D 14 lea edi,
003F1591|.31C0xor eax,eax
003F1593|.B4 04 mov ah,4
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F15AA|>8D9C8D A00000>/lea ebx,dword ptr ss:
003F15B1|. |FFD6|call esi
003F15B3|. |10C9|adc cl,cl
003F15B5|.^\73 F3 \jnb short UnPackMe.003F15AA
003F15B7|.FF45 0C inc //F4运行到所选
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F15BF|> /8D5C8D 18 /lea ebx,dword ptr ss:
003F15C3|. |FFD6|call esi
003F15C5|.^|74 DD |je short UnPackMe.003F15A4
003F15C7|. |E3 17 |jecxz short UnPackMe.003F15E0//F4运行到所选
003F15C9|.8D5D 1C |lea ebx,//继续F8走起
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F15AA|>8D9C8D A00000>/lea ebx,dword ptr ss:
003F15B1|. |FFD6|call esi
003F15B3|. |10C9|adc cl,cl
003F15B5|.^\73 F3 \jnb short UnPackMe.003F15AA
003F15B7|.FF45 0C inc //F4运行到所选
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F15BF8D5C8D 18 lea ebx,dword ptr ss:
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:
003F164A84C0test al,al
003F164C^ 75 FB jnz short UnPackMe.003F1649
003F164E3806cmp byte ptr ds:,al //F4运行到所选
003F1650^ 74 E8 je short UnPackMe.003F163A
003F165278 0E js short UnPackMe.003F1662
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F166566:AD lods word ptr ds:
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:,ebx
003FFCF431C0xor eax,eax
003FFCF68945 5C mov dword ptr ss:,eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
003FFD1080F9 16 cmp cl,16
003FFD13^ 75 F3 jnz short UnPackMe.003FFD08
003FFD158B75 04 mov esi,dword ptr ss://F4运行到所选
━━━━━━━━━━━━━━━━━━━━━━━━━━
003FFD4A^\E2 DF loopd short UnPackMe.003FFD2B
003FFD4C5Fpop edi //F4运行到所选
003FFD4D31C0xor eax,eax
003FFD4F3945 64 cmp dword ptr ss:,eax
003FFD5274 04 je short UnPackMe.003FFD58
003FFD548745 64 xchg dword ptr ss:,eax
003FFD5796xchg eax,esi
003FFD583B75 00 cmp esi,dword ptr ss:
003FFD5B0F84 9F190000 je UnPackMe.00401700 //这里直接右键跟随或者Enter
━━━━━━━━━━━━━━━━━━━━━━━━━━
004017000000add byte ptr ds:,al //通过跟随来到这里,直接右键--断点--硬件访问断点
004017020000add byte ptr ds:,al //从新加载程序后直接运行
004017040000add byte ptr ds:,al
004017060000add byte ptr ds:,al
004017080000add byte ptr ds:,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:
0040171550push eax ,已经脱鸟……
UnPacked.rar
载入OD
003F165F|.5Bpop ebx
003F1660|.59pop ecx
003F1661|.C3retn
003F1662|>46inc esi
003F1663|.31C0xor eax, eax
003F1665|.66:AD lodsword ptr
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 , ebx
003FFCF431C0xor eax, eax
003FFCF68945 5C mov dword ptr , eax
003FFCF98945 64 mov dword ptr , eax
003FFCFC40inc eax
003FFCFD8945 60 mov dword ptr , eax
003FFD008945 68 mov dword ptr , eax
003FFD038D5E 58 lea ebx, dword ptr
003FFD0631C9xor ecx, ecx
003FFD08ADlodsdword ptr
003FFD09895C8D 00 mov dword ptr , ebx
003FFD0D01C3add ebx, eax
003FFD0F41inc ecx
003FFD1080F9 16 cmp cl, 16
003FFD13^ 75 F3 jnz short 003FFD08
003FFD158B75 04 mov esi, dword ptr
003FFD188775 00 xchgdword ptr , esi
003FFD1B57pushedi
003FFD1C8DBD 68040000 lea edi, dword ptr
003FFD22AClodsbyte ptr
003FFD230FB6C8movzx ecx, al
003FFD26BB 3DFF3F00 mov ebx, 003FFF3D
003FFD2B89F0mov eax, esi
003FFD2DABstosdword ptr es:
003FFD2E31C0xor eax, eax
003FFD30AClodsbyte ptr
003FFD313C 66 cmp al, 66
003FFD3375 01 jnz short 003FFD36
003FFD35AClodsbyte ptr
003FFD363C 0F cmp al, 0F
003FFD3875 03 jnz short 003FFD3D
003FFD3AAClodsbyte ptr
003FFD3BB4 01 mov ah, 1
003FFD3DD1E8shr eax, 1
003FFD3FD7xlatbyte ptr
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 , eax
003FFD5274 04 jeshort 003FFD58
003FFD548745 64 xchgdword ptr , eax
003FFD5796xchgeax, esi
003FFD583B75 00 cmp esi, dword ptr
003FFD5B0F84 9F190000 je00401700大跳转
003FFD61AClodsbyte ptr
………………
003FFF27A5movsdword ptr es:, dword ptr [e>
003FFF288775 30 xchgdword ptr , esi
003FFF2B^ E9 1DFEFFFF jmp 003FFD4D
003FFF308775 2C xchgdword ptr , esi
003FFF3366:A5 movsword ptr es:, word ptr [esi>
003FFF358775 2C xchgdword ptr , 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:
0040171550pusheax
dump 、fix 收工! 说实话,我脱不好,我等脱文学习! 脱壳文件
UnPackMe.rar
首先OD载入
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F157B >/$BD 082A3F00 mov ebp,UnPackMe.003F2A08//OD载入程序停在这里
003F1580|.C745 00 2C013>mov dword ptr ss:,UnPackMe.003F012C //开始慢长的F8
003F1587|.FF4D 08 dec
003F158A|.C645 0C 05mov byte ptr ss:,5
003F158E|.8D7D 14 lea edi,
003F1591|.31C0xor eax,eax
003F1593|.B4 04 mov ah,4
003F1595|.89C1mov ecx,eax
003F1597|.F3:AB rep stos dword ptr es:
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:,ebx
003FFCF431C0xor eax,eax
003FFCF68945 5C mov dword ptr ss:,eax
003FFCF98945 64 mov dword ptr ss:,eax
003FFCFC40inc eax
003FFCFD8945 60 mov dword ptr ss:,eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
003FFD4C5Fpop edi; UnPackMe.00401000
003FFD4D31C0xor eax,eax
003FFD4F3945 64 cmp dword ptr ss:,eax
003FFD5274 04 je short UnPackMe.003FFD58
003FFD548745 64 xchg dword ptr ss:,eax
003FFD5796xchg eax,esi
003FFD583B75 00 cmp esi,dword ptr ss: //下面即跳向OEP,但是不跳转
003FFD5B0F84 9F190000 je UnPackMe.00401700 //此处即跳向我们的OEP
003FFD61AClods byte ptr ds: //在上面的je右键,跟随过去,也可以按Enter
003FFD623C FF cmp al,0FF
003FFD6474 0D je short UnPackMe.003FFD73
━━━━━━━━━━━━━━━━━━━━━━━━━━
004017000000add byte ptr ds:,al //我们停在了这里,但是一段空代码
004017020000add byte ptr ds:,al //我们在上面的00401700右键设置硬件访问断点,然后重新加载
004017040000add byte ptr ds:,al
004017060000add byte ptr ds:,al
004017080000add byte ptr ds:,al
0040170A0000add byte ptr ds:,al
0040170C0000add byte ptr ds:,al
0040170E0000add byte ptr ds:,al
004017100000add byte ptr ds:,al
004017120000add byte ptr ds:,al
━━━━━━━━━━━━━━━━━━━━━━━━━━
003F157B >/$BD 082A3F00 mov ebp,UnPackMe.003F2A08//重新加载程序后
003F1580|.C745 00 2C013>mov dword ptr ss:,UnPackMe.003F012C //直接F9运行程序
003F1587|.FF4D 08 dec
003F158A|.C645 0C 05mov byte ptr ss:,5
003F158E|.8D7D 14 lea edi,
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:
0040171550push eax
0040171664:8925 0000000>mov dword ptr fs:,esp 用esp定律然后单步
003F157B >/$BD 082A3F00 mov ebp,UnPackMe.003F2A08
003F1580|.C745 00 2C013>mov dword ptr ss:,UnPackMe.00>
003F1587|.FF4D 08 dec dword ptr ss:
003F158A|.C645 0C 05mov byte ptr ss:,5
003F158E|.8D7D 14 lea edi,dword ptr ss:
003F1591|.31C0xor eax,eax
003F1593|.B4 04 mov ah,4
003F1595|.89C1mov ecx,eax
003F1597|.F3:AB rep stos dword ptr es:
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:,ebx
003FFCF431C0xor eax,eax
003FFCF68945 5C mov dword ptr ss:,eax
003FFCF98945 64 mov dword ptr ss:,eax
003FFCFC40inc eax
003FFCFD8945 60 mov dword ptr ss:,eax
003FFD008945 68 mov dword ptr ss:,eax
003FFD038D5E 58 lea ebx,dword ptr ds:
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://这里F4
003FFD188775 00 xchg dword ptr ss:,esi
003FFD1B57push edi
003FFD1C8DBD 68040000 lea edi,dword ptr ss:
003FFD22AClods byte ptr ds:
003FFD230FB6C8movzx ecx,al
003FFD26BB 3DFF3F00 mov ebx,UnPackMe.003FFF3D
003FFD2B89F0mov eax,esi
003FFD2DABstos dword ptr es:
003FFD2E31C0xor eax,eax
003FFD30AClods byte ptr ds:
003FFD313C 66 cmp al,66
003FFD3375 01 jnz short UnPackMe.003FFD36
003FFD35AClods byte ptr ds:
003FFD363C 0F cmp al,0F
003FFD3875 03 jnz short UnPackMe.003FFD3D
003FFD3AAClods byte ptr ds:
003FFD3BB4 01 mov ah,1
003FFD3DD1E8shr eax,1
003FFD3FD7xlat byte ptr ds:
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:,eax
003FFD5274 04 je short UnPackMe.003FFD58
003FFD548745 64 xchg dword ptr ss:,eax
003FFD5796xchg eax,esi
003FFD583B75 00 cmp esi,dword ptr ss:
003FFD5B0F84 9F190000 je UnPackMe.00401700//看到这里是大的跳转,跨区段的。当跳转实现的时候,就跳向OEP了。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
跳不跳关键在于esi与dword ptr ss: 的值是不是相等,相等的话就跳,所以我们下条件断点:shift+f4
esi== 为条件,断下后,调单步,就到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:
0040171550push eax
0040171664:8925 0000000>mov dword ptr fs:,esp 0040170055PUSH EBP ; UnPackMe.003F2A08
超哥,对不??
脱了脱了脱了~ 先单步运行到此处
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:,EBX
003FFCF431C0XOR EAX,EAX
003FFCF68945 5C MOV DWORD PTR SS:,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:
0040171550PUSH EAX
0040171664:8925 0000000>MOV DWORD PTR FS:,ESP
0040171D83EC 68 SUB ESP,68
0040172053PUSH EBX
0040172156PUSH ESI
0040172257PUSH EDI
貌似OEP 向上翻一行到00401700右键 “在此新建EIP”就可以DUMP 了修复正常
不对之处还请指正谢谢 http://www.禁止使用网挣网盘/space/show/qiannao/%C9%CF%B4%AB%B7%D6%CF%ED/2008/9/18/1.rar/.page
不知道是不是这样...........
页:
[1]
2