[菜菜打杂]笨笨菜菜脱壳练手六之UPX200W
【破解作者】 EasyStudy
【作者邮箱】 PhantomNet@163.com
【使用工具】 ODICE,LordPE,ImprotREC16F
【破解平台】 Win9x/NT/2000/XP
【软件名称】 UPX200W加壳的win98记事本程序
【加壳方式】 UPX200W
【破解声明】 我是只菜菜鸟,技术不高给新手和想学脱壳的给个示范,希望共同学习!
声明:我是在大大们的基础资料上学习的,谢谢大大们!
//OD进入在这里:
00481B30 > 60 PUSHAD //知道汇编的朋友们都知道了解出程序是在内存里的。所以是要用这个指令的我们碰到它就找POPAD。。。。基本的心得吧。。。
00481B31 BE 15204500 MOV ESI,upx.00452015
00481B36 8DBE EBEFFAFF LEA EDI,DWORD PTR DS:[ESI+FFFAEFEB]
00481B3C 57 PUSH EDI
00481B3D 83CD FF OR EBP,FFFFFFFF
00481B40 EB 10 JMP SHORT upx.00481B52 //跳到主程序
//F8就跟了。。往往大大们说的找特征代码就可以找到OEP但是我习惯了F8。。因为了我碰到的壳全是变态壳根本就不是,查到的。。
00481C6E 50 PUSH EAX
00481C6F 83C7 08 ADD EDI,8
00481C72 FF96 B0130800 CALL DWORD PTR DS:[ESI+813B0] //这里我看到了一个API
//继续F8
00481C87 FF96 B4130800 CALL DWORD PTR DS:[ESI+813B4] ; kernel32.GetProcAddress
//看到这样的代码表示API正在解压缩中。。。
00481C87 FF96 B4130800 CALL DWORD PTR DS:[ESI+813B4]
00481C8D 09C0 OR EAX,EAX
00481C8F 74 07 JE SHORT upx.00481C98
00481C91 8903 MOV DWORD PTR DS:[EBX],EAX
00481C93 83C3 04 ADD EBX,4
00481C96 ^ EB E1 JMP SHORT upx.00481C79
00481C98 FF96 BC130800 CALL DWORD PTR DS:[ESI+813BC]
也许以前没说清楚。。像这样的循环就可以直接下断在00481C98,结果程序运行结束,下一行做断点。。看到上面代码里有跳下一行的,不是这里。。然后F9就到了跳过了很多麻烦。。老按F8也不是个事。。
00481C9E 8BAE B8130800 MOV EBP,DWORD PTR DS:[ESI+813B8] ; kernel32.VirtualProtect
有人说可以把这个API当做喜欢的。。我也是了
实际可以把下面当作特征代码了
00481CB7 8D87 9F010000 LEA EAX,DWORD PTR DS:[EDI+19F]
00481CBD 8020 7F AND BYTE PTR DS:[EAX],7F
00481CC0 8060 28 7F AND BYTE PTR DS:[EAX+28],7F
00481CC4 58 POP EAX
00481CC5 50 PUSH EAX
00481CC6 54 PUSH ESP
00481CC7 50 PUSH EAX
00481CC8 53 PUSH EBX
00481CC9 57 PUSH EDI
00481CCA FFD5 CALL EBP
00481CCC 58 POP EAX
00481CCD 61 POPAD
00481CCE 8D4424 80 LEA EAX,DWORD PTR SS:[ESP-80]
00481CD2 6A 00 PUSH 0
00481CD4 39C4 CMP ESP,EAX
00481CD6 ^ 75 FA JNZ SHORT upx.00481CD2
00481CD8 83EC 80 SUB ESP,-80
00481CDB - E9 30F5F7FF JMP upx.00401210
//我想这里是OEP了。。可是感觉很不像也。。。但是API函数显示正常了。。那就算是吧。。
00401210 55 PUSH EBP
00401211 89E5 MOV EBP,ESP
00401213 83EC 14 SUB ESP,14
00401216 6A 01 PUSH 1
00401218 FF15 E0E24700 CALL DWORD PTR DS:[47E2E0] ; msvcrt.__set_app_type
0040121E E8 EDFEFFFF CALL upx.00401110
00401223 8DB6 00000000 LEA ESI,DWORD PTR DS:[ESI]
00401229 8DBC27 00000000 LEA EDI,DWORD PTR DS:[EDI]
00401230 55 PUSH EBP
//DUMP程序。。。
脱壳为593KB。。。
估计差不多。。。
我发现这个UPX直接脱了。。不需要修复就很好了。。。修复了一下到是出错了嘿嘿。。。。
[课程]Linux pwn 探索篇!