• 标 题:ASProtect 1.23 RC4 - 1.3.08.24-[Awicons V9.20 ]脱壳AND破解
  • 作 者:hmimys
  • 时 间:004-07-01,17:08
  • 链 接:http://bbs.pediy.com

ASProtect 1.23 RC4 - 1.3.08.24-[Awicons V9.20 ]脱壳AND破解

【破解作者】 hmimys
【作者邮箱】 hmimys@163.com
【使用工具】 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 blch
00F246B2    02E8            add chal
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 eaxdword 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 blch
00F24C2F    02E8            add chal
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 eaxdword 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 espebp
00F24C55    5D              pop ebp
00F24C56    C3              retn---------------------------------?F2下断,Shift+F9运行,断在这里.
此时寄存器ESP=00AFFF94,我们直接在命令栏里输入HW 00afffc0 按F9运行,中断3次后我们将断断续续的看到Stolen Code.
00F37761    8BEC            mov ebpesp***         没有push ebp,到时我们补上!
00F37763    6A FF           push -1***              打***的均为Stolen Code          
00F37765    68 48944E00     push 4E9448***
00F3776A    68 ACCE4900     push 49CEAC***
00F3776F    64:A1 00000000  mov eaxdword 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 edxedx
我们整理一下Stolen Code:
push ebp
mov ebpesp
push -1
push 004E9448
push 0049CEAC                
mov eaxdword 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!