【破文标题】ASPack 2.12 变形壳之BadCopy Pro v3.73 Build 0106脱壳分析
【破文作者】lchhome
【作者邮箱】lchhome@163.com
【作者主页】http://lchhome.ys168.com
【破解工具】OD、Imp、LordPE
【破解平台】WinXP
【软件名称】BadCopy Pro v3.73 Build 0106
【软件大小】512KB
【原版下载】
【保护方式】ASPack 2.12 -> Alexey Solodovnikov
【软件简介】 BadCopy Pro 是一个软盘、CD-ROM、CD-R/CD-RW/DVD、ZIP/JAZ/MO 磁盘、数码媒介及其它存储器的数据恢复工具。它可以从已损坏或有缺陷的磁盘中恢复数据。
【破解声明】仅供学习
------------------------------------------------------------------------
一、用Peid侦得它为ASPack 2.12 -> Alexey Solodovnikov壳,
二、用OD载入程序
<ModuleEn> 60 PUSHAD 停在这里
00BFA002 E8 03000000 CALL BadCopy.00BFA00A
00BFA007 - E9 EB045D45 JMP 461CA4F7
用最简单的办法,就是按Ctrl+F,输入Popad,按Ctrl+L搜索几下,就会到达
00BFA3AF 61 POPAD 停在这里,按F4,然后F8往下走
00BFA3B0 75 08 JNZ SHORT BadCopy.00BFA3BA
00BFA3B2 B8 01000000 MOV EAX,1
00BFA3B7 C2 0C00 RETN 0C
00BFA3BA 68 00000000 PUSH 0
00BFA3BF C3 RETN 返回到00BF8000
在这里按Alt+M,在00401000 CODE段下断,按Shift+F9运行,会到00406EE0句,用LordPE脱壳
00406EE0 - FF25 78B2B700 JMP DWORD PTR DS:[B7B278] ; kernel32.GetModuleHandleA
00406EE6 8BC0 MOV EAX,EAX
00406EE8 - FF25 74B2B700 JMP DWORD PTR DS:[B7B274] ; kernel32.LocalAlloc
00406EEE 8BC0 MOV EAX,EAX
00406EF0 - FF25 70B2B700 JMP DWORD PTR DS:[B7B270] ; kernel32.TlsGetValue
00406EF6 8BC0 MOV EAX,EAX
00406EF8 - FF25 6CB2B700 JMP DWORD PTR DS:[B7B26C] ; kernel32.TlsSetValue
00406EFE 8BC0 MOV EAX,EAX
00406F00 50 PUSH EAX
00406F01 6A 40 PUSH 40
00406F03 E8 E0FFFFFF CALL BadCopy.00406EE8 ; JMP to kernel32.LocalAlloc
00406F08 C3 RETN
这里按F8继续走,会到
00406FB5 A3 14775000 MOV DWORD PTR DS:[507714],EAX ; BadCopy.00400000
00406FBA A1 14775000 MOV EAX,DWORD PTR DS:[507714]
00406FBF A3 B4105000 MOV DWORD PTR DS:[5010B4],EAX
00406FC4 33C0 XOR EAX,EAX
00406FC6 A3 B8105000 MOV DWORD PTR DS:[5010B8],EAX
00406FCB 33C0 XOR EAX,EAX
00406FCD A3 BC105000 MOV DWORD PTR DS:[5010BC],EAX
00406FD2 E8 C1FFFFFF CALL BadCopy.00406F98
00406FD7 BA B0105000 MOV EDX,BadCopy.005010B0
00406FDC 8BC3 MOV EAX,EBX EBX=00500638,记住仿OEP有用
00406FDE E8 65D7FFFF CALL BadCopy.00404748
00406FE3 5B POP EBX
00406FE4 C3 RETN 返回到005009A8一般抽11字节的Dephi头部特征码
PUSH EBP
MOV EBP,ESP
ADD ESP,-10
MOV EAX,xxxxxxxx 这里xxxxxxxx=00500638
这个程序一共抽掉11字节。
00500997 0000 ADD BYTE PTR DS:[EAX],AL 00500998这才是真正的OEP
00500999 0000 ADD BYTE PTR DS:[EAX],AL
0050099B 0000 ADD BYTE PTR DS:[EAX],AL
0050099D 0000 ADD BYTE PTR DS:[EAX],AL
0050099F 0000 ADD BYTE PTR DS:[EAX],AL
005009A1 0000 ADD BYTE PTR DS:[EAX],AL
005009A3 E8 FC65F0FF CALL BadCopy.00406FA4
005009A8 B0 01 MOV AL,1 到这里,这是临时OEP,往上走
005009AA 84C0 TEST AL,AL
005009AC 74 59 JE SHORT BadCopy.00500A07
Imp载入程序,OEP填入1000,点IAT自动搜索,在大小填入1000,点获得输入信息,发现很多无效指针,经过观查,发现
只有以下几处为未发现的指针:
rva:0077BC28 ptr:0041656C 它为oleaut32.dll/VariantInit
rva:0077BC70 ptr:0041786F 它为oleaut32.dll/SafeArrayCreate
rva:0077BC7C ptr:00417478 它为oleaut32.dll/SafeArrayCreate
rva;0077BD94 ptr:00417845 它为oleaut32.dll/SafeArrayCreate
rva:0077BDB4 ptr:00417845 它为oleaut32.dll/SafeArrayCreate
其余的都是垃圾指针,全部剪切,最后把OEP修正为00500998,修复文件。
用OD载入修复后的程序,把以下内容补上,
PUSH EBP
MOV EBP,ESP
ADD ESP,-10
MOV EAX,00500638
保存文件,OK!程序能正常运行。
------------------------------------------------------------------------
------------------------------------------------------------------------
【版权声明】属于lchhome所有,支持正版!
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法