ASProtect 1.23 RC4 - 1.3.08.24-[Awicons V9.20 ]脱壳AND破解
【破解作者】 hmimys
【作者邮箱】 [email]hmimys@163.com[/email]
【使用工具】 hmimysOD\PEID\LodePE\import\AsprDbgr
【破解平台】 WinXP
【软件名称】 Awicons V9.20
【保护方式】 ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
【下载地址】 天空软件站 http://www2.skycn.com/soft/12033.html
【软件简介】 说明: Awicons 是一个搜索,创建,编辑,导入/导出,管理图标,光标,和小型图片的强力工具!具体功能如下:
1.全面支持Windows XP的图标!
2.支持包括ico, cur, ani, png, gif, bmp, jpg在内的多种文件格式!
3.支持所有的颜色格式!包括mono, 16, 256, true-color, true-color with alpha!
4.最大可以创建128 x 128 大小的图标!
5.可以自动对硬盘里的图标,光标和图片进行扫描!
6.自带多种画笔,多种强力虑镜,使你的编辑创建更加轻松自如!
7.支持直接从dll,EXE文件中提取图标!
8.支持图标库!
9.等等。
【破解声明】 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【脱壳破解】
一、寻找OEP
==================================================================================================
用IsDebug 1.4插件去掉Ollydbg的调试器标志。
设置Ollydbg忽略除了“内存访问异常”之外的所有其他异常选项。
00401000 > 68 01E05900 push AWicons.0059E001-----------------?进入OD后断在这里
按F9运行程序。程序出现内存访问异常,按Shift+F9跳过,一连按22次,来到下面这个地方:
00F246A5 3100 xor dword ptr ds:[eax], eax
00F246A7 EB 01 jmp short 00F246AA
00F246A9 68 648F0500 push 58F64
00F246AE 0000 add byte ptr ds:[eax], al
00F246B0 00EB add bl, ch
00F246B2 02E8 add ch, al
00F246B4 0158 A1 add dword ptr ds:[eax-5F], ebx
此时堆栈内容:
00AFFF38 00AFFF44 指针到下一个 SEH 记录
00AFFF3C 00F2465C SE 句柄
00AFFF40 00F39ED8 ASCII "+xRgBwCgF/M="
00AFFF44 00AFFFE0 指针到下一个 SEH 记录
00AFFF48 00F24C49 SE 句柄
00AFFF4C 00AFFF90
00AFFF50 00F10000
00AFFF54 003D0000
00AFFF58 00F24138
00AFFF5C 00F39ED8 ASCII "+xRgBwCgF/M="
00AFFF60 00F23616 返回到 00F23616 来自 00F12524
按ALT+M 打开内存镜像选中:
内存镜像,项目 23
地址=00401000
大小=000D9000 (888832.)
Owner=AWicons 00400000
区段=
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE
在这行设置内存访问断点,Shift+F9运行中断:
004088C0 8B4424 04 mov eax, dword ptr ss:[esp+4]
004088C4 A3 00945000 mov dword ptr ds:[509400], eax; ---------?这个地址是指向注册名地址的了
004088C9 C2 0400 retn 4
清除内存断点,然后记下这个[509400],后面要用到!
Shift+F9 3次直接来到下面这个熟悉的地方了!
00F24C22 3100 xor dword ptr ds:[eax], eax-----------?在这里用LoadPE纠正映像大小后
00F24C24 EB 01 jmp short 00F24C27 Dump这个进程
00F24C26 68 648F0500 push 58F64
00F24C2B 0000 add byte ptr ds:[eax], al
00F24C2D 00EB add bl, ch
00F24C2F 02E8 add ch, al
00F24C31 0158 33 add dword ptr ds:[eax+33], ebx
00F24C34 C05A 59 59 rcr byte ptr ds:[edx+59], 59
00F24C38 64:8910 mov dword ptr fs:[eax], edx
00F24C3B 68 504CF200 push 0F24C50
00F24C40 8D45 CC lea eax, dword ptr ss:[ebp-34]
00F24C43 E8 F8E7FEFF call 00F13440
00F24C48 C3 retn
00F24C49 ^ E9 46E2FEFF jmp 00F12E94
00F24C4E ^ EB F0 jmp short 00F24C40
00F24C50 5F pop edi
00F24C51 5E pop esi
00F24C52 5B pop ebx
00F24C53 8BE5 mov esp, ebp
00F24C55 5D pop ebp
00F24C56 C3 retn---------------------------------?F2下断,Shift+F9运行,断在这里.
此时寄存器ESP=00AFFF94,我们直接在命令栏里输入HW 00afffc0 按F9运行,中断3次后我们将断断续续的看到Stolen Code.
00F37761 8BEC mov ebp, esp*** 没有push ebp,到时我们补上!
00F37763 6A FF push -1*** 打***的均为Stolen Code
00F37765 68 48944E00 push 4E9448***
00F3776A 68 ACCE4900 push 49CEAC***
00F3776F 64:A1 00000000 mov eax, dword ptr fs:[0]***
00F37775 66:8135 7E77F30>xor word ptr ds:[F3777E], 0A5EE
此时我们一路F7下来
00F377A2 50 push eax***
00F377A3 66:812D AC77F30>sub word ptr ds:[F377AC], 9A4
00F377AC 8F ??? ; 未知命令
00F377B4 64:8925 0000000>mov dword ptr fs:[0], esp***
00F377BB 83EC 58 sub esp, 58***
00F377EB 53 push ebx***
00F377EC 66:812D F577F30>sub word ptr ds:[F377F5], 9A4
00F377F5 8F ??? ; 未知命令
00F3782A 56 push esi***
00F3782B 66:812D 3478F30>sub word ptr ds:[F37834], 9A4
00F37834 8F ??? ; 未知命令
00F37869 57 push edi***
00F3786A 66:812D 7378F30>sub word ptr ds:[F37873], 9A4
00F37873 8F ??? ; 未知命令
下面还是一路F7
00F37622 BF 5F76F300 mov edi, 0F3765F
00F37627 B9 5E140000 mov ecx, 145E
00F3762C F3:AA rep stos byte ptr es:[edi]-------------------------------?这里F8过
00F3762E 9D popfd
00F3762F 5F pop edi
00F37630 59 pop ecx
00F37631 C3 retn------------------------------------------------?这里返回临时OEP
0049EF43 0000 add byte ptr ds:[eax], al--------------------------?这里就是真OEP了
0049EF45 0000 add byte ptr ds:[eax], al
0049EF47 0000 add byte ptr ds:[eax], al
0049EF49 0000 add byte ptr ds:[eax], al
0049EF4B 0000 add byte ptr ds:[eax], al
0049EF4D 0000 add byte ptr ds:[eax], al
0049EF4F 0000 add byte ptr ds:[eax], al
0049EF51 0000 add byte ptr ds:[eax], al
0049EF53 0000 add byte ptr ds:[eax], al
0049EF55 0000 add byte ptr ds:[eax], al
0049EF57 0000 add byte ptr ds:[eax], al
0049EF59 0000 add byte ptr ds:[eax], al
0049EF5B 0000 add byte ptr ds:[eax], al
0049EF5D 0000 add byte ptr ds:[eax], al
0049EF5F 0000 add byte ptr ds:[eax], al
0049EF61 0000 add byte ptr ds:[eax], al
0049EF63 0000 add byte ptr ds:[eax], al
0049EF65 0000 add byte ptr ds:[eax], al
0049EF67 0000 add byte ptr ds:[eax], al
0049EF69 FF15 24A34D00 call dword ptr ds:[4DA324]----------------?返回到这里,我们向上看!
0049EF6F 33D2 xor edx, edx
我们整理一下Stolen Code:
push ebp
mov ebp, esp
push -1
push 004E9448
push 0049CEAC
mov eax, dword ptr fs:[0]
push eax
mov dword ptr fs:[0], esp
sub esp, 58
push ebx
push esi
push edi
mov dword ptr ss:[ebp-18], esp
二、修复输入表
==================================================================================================
用AsprDbgr载入Awicons 搞定输入表:
AsprDbgr v1.0beta (:P) Made by me... Manko.
iEP=401000 (C:\Program Files\AWicons\AWicons.exe)
IAT Start: 4DA000
End: 4DA770
Length: 770
IATentry 4DA1F8 = F21CD8 resolved as GetCommandLineA
IATentry 4DA294 = F21CB8 resolved as GetCurrentProcess
IATentry 4DA2D0 = F21C64 resolved as GetModuleHandleA
IATentry 4DA324 = F21C8C resolved as GetVersion
IATentry 4DA364 = F21CC8 resolved as LockResource
IATentry 4DA390 = F217A4 resolved as GetProcAddress
12 invalid entries erased.
Dip-Table at adress: F27AB4
0 4088C0 0 4088F0 4088D0 0 0 474F70 408900 409360 0 0 0 0
Last SEH passed. (F239EE) Searching for signatures. Singlestepping to OEP!
Call + OEP-jump-setup at: F37D25 ( Code: E8000000 5D81ED )
Mutated, stolen bytes at: F37D71 ( Code: F3EB02CD 20EB0169 )
Erase of stolen bytes at: F37CD4 ( Code: 9CFCBF13 7DF300B9 )
Repz ... found. Skipping erase of stolen bytes. ;)
possible (temp)OEP: 49EF69 (Reached from preOEP: F37CE5)
现在打开IMPORT设置OEP为9EF69,然后就可以得到全部的iat,得到全部输入表后把oep改回9EF43,当然,如果你喜欢的话
也可以一开始就设OEP 为9EF43。现在DUMP+FIXDUMP后程序还不能运行!
三、破解修复
==================================================================================================
用OD载入脱壳后的文件,找块空地方写入Cracked by hmimys[D.4S]当然你也可以写你的名字,我找的是004F300,然后D 509410
修改其值,使其指向004F300,至此脱壳破解全部完成!
在此特谢:
Fly.Forgot.jwh51.temerata.David.Yock.all of my friends and you!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)