东海浪子 发表于 2016-5-9 12:29

Any to Icon图像转换器爆破及通用补丁制作

软件简介:Any to Icon 是一款强大的 ICO 图像转换器,能将常见的图片格式转换为 Windows ICO 图标,转换过程中可以改变颜色和尺寸,支持256色及真彩色图标,功能上比 SimplyIcon 要好。 Any to Icon 方便之处在于支持批量转换,比如可以批量转换文件夹内的所有图片,并能灵活的自定义图片大小
【破文标题】Any to Icon爆破及通用补丁制作
【破文作者】东海浪子
【作者邮箱】
【作者主页】
【破解工具】OD
【破解平台】虚拟机WINXP SP3
【软件名称】Any to Icon 3.54
【软件大小】3.1M
【原版下载】 http://www.aha-soft.com/downloads/any2icon.zip   网盘下载链接:http://pan.baidu.com/s/1qW81iXm 密码:h6ib 中文版自己百度下载【补丁工具】通用特征码查找替换补丁工具v0.8
【阅读对象】爱好破解的初学者,大牛大神们飘过勿视
【破解声明】本文仅做研究所用,供破解技术爱好者学习研究讨论。如喜欢该软件,建议购买正版。
------------------------------------------------------------------------
【破解过程】
1、安装好Any to Icon,用peid查了一下。。无壳,delphi写的程序
2、收集信息:
   a、运行程序出现2个窗口,,在第一个窗口中左上角显示“unregistered copy”字样
   b、关掉改窗口后弹出about界面。。看到licensed未注册信息,注册按钮。。。
   c、主界面上有about、注册按钮。。。右上角显示试用次数信息。。。。
   d、尝试注册:在注册窗口,随便输入一些信息,点击注册,,显示错误提示:please reenter key. xxxx。尝试了几次,,xxxx显示了不同信息
3、首先想到从字符入手,,通过字符搜索“please reenter”,双击进入。。在代码窗口中从上往下。。查找是否有可用信息,,看到“Please enter email used in your order”、“Wrong key for this application”等字符,,初步判断是注册函数代码。。。在段首下断,重新注册。程序断下来。。。再一步一步往下走。。。

005013A4/$55            push ebp
005013A5|.8BEC          mov ebp,esp
005013A7|.B9 06000000   mov ecx,0x6
005013AC|>6A 00         /push 0x0
005013AE|.6A 00         |push 0x0
005013B0|.49            |dec ecx
005013B1|.^ 75 F9         \jnz short Any2Icon.005013AC
005013B3|.53            push ebx
005013B4|.8BD8          mov ebx,eax
005013B6|.33C0          xor eax,eax
005013B8|.55            push ebp
005013B9|.68 2A165000   push Any2Icon.0050162A
005013BE|.64:FF30       push dword ptr fs:
005013C1|.64:8920       mov dword ptr fs:,esp
005013C4|.8D55 E8       lea edx,
005013C7|.8B83 F8020000 mov eax,dword ptr ds:
005013CD|.E8 4E49F3FF   call Any2Icon.00435D20
005013D2|.8B45 E8       mov eax,                        ;放入假码
005013D5|.8D55 F8       lea edx,
005013D8|.E8 6B7DF0FF   call Any2Icon.00409148
005013DD|.8D55 E4       lea edx,
005013E0|.8B83 00030000 mov eax,dword ptr ds:
005013E6|.E8 3549F3FF   call Any2Icon.00435D20
005013EB|.8B45 E4       mov eax,                        ;放入邮箱
005013EE|.8D55 F4       lea edx,
005013F1|.E8 527DF0FF   call Any2Icon.00409148
005013F6|.837D F8 00    cmp ,0x0                        ;注册码和0比较
005013FA|.75 0C         jnz short Any2Icon.00501408
005013FC|.A1 CCA86900   mov eax,dword ptr ds:          ;l贻
00501401|.8B00          mov eax,dword ptr ds:
00501403|.E8 20FFFFFF   call Any2Icon.00501328
00501408|>837D F4 00    cmp ,0x0                        ;邮箱和0比较
0050140C|.75 16         jnz short Any2Icon.00501424
0050140E|.B9 44165000   mov ecx,Any2Icon.00501644                ;Please enter email used in your order
00501413|.B2 01         mov dl,0x1
00501415|.A1 BC824000   mov eax,dword ptr ds:
0050141A|.E8 89B2F0FF   call Any2Icon.0040C6A8
0050141F|.E8 6024F0FF   call Any2Icon.00403884
00501424|>8B45 F8       mov eax,
00501427|.E8 8C2CF0FF   call Any2Icon.004040B8
0050142C      83F8 0A       cmp eax,0xA                              ;注册码位数和A比较
0050142F      7D 0C         jge short Any2Icon.0050143D
00501431|.A1 CCA86900   mov eax,dword ptr ds:          ;l贻
00501436|.8B00          mov eax,dword ptr ds:
00501438|.E8 EBFEFFFF   call Any2Icon.00501328
0050143D|>8D55 E0       lea edx,
00501440|.8B83 F8020000 mov eax,dword ptr ds:
00501446|.E8 D548F3FF   call Any2Icon.00435D20
0050144B|.8B45 E0       mov eax,
0050144E|.E8 25F5FFFF   call Any2Icon.00500978                   ;注册码初步验证
00501453|.85C0          test eax,eax
00501455      74 0A         je short Any2Icon.00501461               ;eax为0跳过错误key
00501457|.B8 74165000   mov eax,Any2Icon.00501674                ;Wrong key.
0050145C|.E8 C7FEFFFF   call Any2Icon.00501328
00501461|>8B45 F8       mov eax,
00501464|.E8 6FF5FFFF   call Any2Icon.005009D8
00501469|.8B93 08030000 mov edx,dword ptr ds:
0050146F|.8B45 F8       mov eax,
00501472|.E8 8DF3FFFF   call Any2Icon.00500804                   ;核心算法验证
00501477|.85C0          test eax,eax
00501479|.74 0A         je short Any2Icon.00501485               ;eax为0,跳过错误key
0050147B|.B8 88165000   mov eax,Any2Icon.00501688                ;Wrong key for this application.
00501480|.E8 A3FEFFFF   call Any2Icon.00501328
00501485|>B2 01         mov dl,0x1                               ;下面这段是在注册表写入注册信息
00501487|.A1 D0834700   mov eax,dword ptr ds:
0050148C|.E8 3F70F7FF   call Any2Icon.004784D0
00501491|.8945 F0       mov ,eax
00501494|.33C0          xor eax,eax
00501496|.55            push ebp
00501497|.68 AB155000   push Any2Icon.005015AB
0050149C|.64:FF30       push dword ptr fs:
0050149F|.64:8920       mov dword ptr fs:,esp
005014A2|.BA 01000080   mov edx,0x80000001
005014A7|.8B45 F0       mov eax,
005014AA|.E8 FD70F7FF   call Any2Icon.004785AC
005014AF|.68 B0165000   push Any2Icon.005016B0                   ;Software\
005014B4|.FFB3 0C030000 push dword ptr ds:
005014BA|.68 C4165000   push Any2Icon.005016C4                   ;\
005014BF|.FFB3 10030000 push dword ptr ds:
005014C5|.68 C4165000   push Any2Icon.005016C4                   ;\
005014CA|.8D45 D8       lea eax,
005014CD|.E8 BEF7FFFF   call Any2Icon.00500C90
005014D2|.FF75 D8       push
005014D5|.8D45 DC       lea eax,
005014D8|.BA 06000000   mov edx,0x6
005014DD|.E8 962CF0FF   call Any2Icon.00404178
005014E2|.8B55 DC       mov edx,
005014E5|.B1 01         mov cl,0x1
005014E7|.8B45 F0       mov eax,
005014EA|.E8 2171F7FF   call Any2Icon.00478610
005014EF|.8845 FF       mov byte ptr ss:,al
005014F2|.807D FF 00    cmp byte ptr ss:,0x0
005014F6|.0F84 99000000 je Any2Icon.00501595
005014FC|.8B4D F8       mov ecx,
005014FF|.BA D0165000   mov edx,Any2Icon.005016D0                ;Key
00501504|.8B45 F0       mov eax,
00501507|.E8 C072F7FF   call Any2Icon.004787CC
0050150C|.BA D0165000   mov edx,Any2Icon.005016D0                ;Key
00501511|.8D4D D4       lea ecx,
00501514|.8B45 F0       mov eax,
00501517|.E8 DC72F7FF   call Any2Icon.004787F8
0050151C|.8B55 D4       mov edx,
0050151F|.8B45 F8       mov eax,
00501522|.E8 A12CF0FF   call Any2Icon.004041C8
00501527|.0f9445 ff   sete byte ptr ss:
0050152B|.E8 9C93F0FF   call Any2Icon.0040A8CC
00501530|.83C4 F8       add esp,-0x8
00501533|.DD1C24      fstp qword ptr ss:
00501536|.9B            wait
00501537|.BA DC165000   mov edx,Any2Icon.005016DC                ;Time
0050153C|.8B45 F0       mov eax,
0050153F|.E8 7073F7FF   call Any2Icon.004788B4
00501544|.8B8B 14030000 mov ecx,dword ptr ds:
0050154A|.8B93 14030000 mov edx,dword ptr ds:
00501550|.8B45 F0       mov eax,
00501553|.E8 7472F7FF   call Any2Icon.004787CC
00501558|.8D55 D0       lea edx,
0050155B|.8B83 EC020000 mov eax,dword ptr ds:
00501561|.E8 BA47F3FF   call Any2Icon.00435D20
00501566|.8B45 D0       mov eax,
00501569|.8D55 EC       lea edx,
0050156C|.E8 D77BF0FF   call Any2Icon.00409148
00501571|.837D EC 00    cmp ,0x0
00501575|.8B4D EC       mov ecx,
00501578|.BA EC165000   mov edx,Any2Icon.005016EC                ;UserName
0050157D|.8B45 F0       mov eax,
00501580|.E8 4772F7FF   call Any2Icon.004787CC
00501585|.8B4D F4       mov ecx,
00501588|.BA 00175000   mov edx,Any2Icon.00501700                ;Email
0050158D|.8B45 F0       mov eax,
00501590|.E8 3772F7FF   call Any2Icon.004787CC
00501595|>33C0          xor eax,eax
00501597|.5A            pop edx                                  ;0012E850
00501598|.59            pop ecx                                  ;0012E850
00501599|.59            pop ecx                                  ;0012E850
0050159A|.64:8910       mov dword ptr fs:,edx
0050159D|.68 B2155000   push Any2Icon.005015B2
005015A2|>8B45 F0       mov eax,
005015A5|.E8 421BF0FF   call Any2Icon.004030EC
005015AA\.C3            retn
005015AB   .^ E9 9C22F0FF   jmp Any2Icon.0040384C
005015B0   .^ EB F0         jmp short Any2Icon.005015A2
005015B2   .807D FF 00    cmp byte ptr ss:,0x0
005015B6   .75 1B         jnz short Any2Icon.005015D3
005015B8   .8B0D 60AC6900 mov ecx,dword ptr ds:          ;茑O
005015BE   .8B09          mov ecx,dword ptr ds:
005015C0   .B2 01         mov dl,0x1
005015C2   .A1 BC824000   mov eax,dword ptr ds:
005015C7   .E8 DCB0F0FF   call Any2Icon.0040C6A8
005015CC   .E8 B322F0FF   call Any2Icon.00403884
005015D1   .EB 12         jmp short Any2Icon.005015E5
005015D3   >B8 10175000   mov eax,Any2Icon.00501710                ;You should restart application now
005015D8   .E8 B7AFF5FF   call Any2Icon.0045C594
通过上面流程,我们知道,经过一段验证,如果注册码正确,就在注册表中写入注册信息,然后提示你重启验证。如果注册码错误,就会弹出错误提示窗。既然要重启验证,我们就不必要在这里纠缠了,先通过爆破跳过注册码验证部分(修改位置有多处,我列举了一处,在文章后面修改1),把注册信息写入注册表。重启验证时也会调用核心算法call。我们就重启跟随进入核心算法call 。Any2Icon.00500804
下面提示   核心算法call   ebp=0012E828    本地调用来自 00501472, 0065EDA4
我们知道了,程序重启时在0065eda4这段进行了验证,只要eax为0,就跳向注册成功的地方0065ED7C/.55            push ebp
0065ED7D|.8BEC          mov ebp,esp
0065ED7F|.6A 00         push 0x0
0065ED81|.6A 00         push 0x0
0065ED83|.53            push ebx
0065ED84|.8BD8          mov ebx,eax
0065ED86|.33C0          xor eax,eax
0065ED88|.55            push ebp
0065ED89|.68 37EE6500   push Any2Icon.0065EE37
0065ED8E|.64:FF30       push dword ptr fs:
0065ED91|.64:8920       mov dword ptr fs:,esp
0065ED94|.8D45 FC       lea eax,
0065ED97|.E8 DC410000   call Any2Icon.00662F78
0065ED9C|.8B45 FC       mov eax,
0065ED9F|.BA 4CEE6500   mov edx,Any2Icon.0065EE4C                ;Any to Icon
0065EDA4|.E8 5B1AEAFF   call Any2Icon.00500804                   ;核心算法call
0065EDA9      85C0          test eax,eax
0065EDAB      74 05         je short Any2Icon.0065EDB2               ;eax为0,跳过去验证成功
0065EDAD|.E8 BE450000   call Any2Icon.00663370
0065EDB2|>8D45 F8       lea eax,
0065EDB5|.E8 3E410000   call Any2Icon.00662EF8
0065EDBA|.837D F8 00    cmp ,0x0
0065EDBE|.A1 10AD6900   mov eax,dword ptr ds:
0065EDC3|.0f9500      setne byte ptr ds:
0065EDC6|.A1 D0AC6900   mov eax,dword ptr ds:          ;芊i
0065EDCB|.8B00          mov eax,dword ptr ds:
0065EDCD|.BA 60EE6500   mov edx,Any2Icon.0065EE60                ;Any to Icon 3.54
0065EDD2|.E8 015BDFFF   call Any2Icon.004548D8
0065EDD7|.6A FF         push -0x1
0065EDD9|.8BC3          mov eax,ebx
0065EDDB|.E8 84D1DDFF   call Any2Icon.0043BF64
0065EDE0|.50            push eax                                 ; |hWnd = 0012E81C
0065EDE1|.E8 0E91DAFF   call <jmp.&shell32.DragAcceptFiles>      ; \DragAcceptFiles
0065EDE6|.B2 01         mov dl,0x1
0065EDE8|.A1 D48B4700   mov eax,dword ptr ds:

eax是在哪里赋值的?我们进入核心算法call看看。

00500804/$55            push ebp
00500805|.8BEC          mov ebp,esp
00500807|.33C9          xor ecx,ecx
00500809|.51            push ecx
0050080A|.51            push ecx
0050080B|.51            push ecx
0050080C|.51            push ecx
0050080D|.51            push ecx
0050080E|.53            push ebx
0050080F|.56            push esi
00500810|.8955 F8       mov ,edx
00500813|.8945 FC       mov ,eax
00500816|.8B45 FC       mov eax,
00500819|.E8 4E3AF0FF   call Any2Icon.0040426C
0050081E|.8B45 F8       mov eax,
00500821|.E8 463AF0FF   call Any2Icon.0040426C
00500826|.33C0          xor eax,eax
00500828|.55            push ebp
00500829|.68 3F095000   push Any2Icon.0050093F
0050082E|.64:FF30       push dword ptr fs:
00500831|.64:8920       mov dword ptr fs:,esp
00500834|.33F6          xor esi,esi
00500836|.8D55 F0       lea edx,
00500839|.8B45 FC       mov eax,
0050083C|.E8 07FEFFFF   call Any2Icon.00500648
00500841|.8B55 F0       mov edx,
00500844|.8D45 FC       lea eax,
00500847|.E8 8436F0FF   call Any2Icon.00403ED0
0050084C|.8B45 FC       mov eax,
0050084F|.E8 6438F0FF   call Any2Icon.004040B8
00500854|.83F8 07       cmp eax,0x7
00500857|.7D 0A         jge short Any2Icon.00500863
00500859|.BE 0B000000   mov esi,0xB
0050085E|.E9 C1000000   jmp Any2Icon.00500924
00500863|>837D F8 00    cmp ,0x0
00500867|.0F84 B7000000 je Any2Icon.00500924
0050086D|.33DB          xor ebx,ebx
0050086F|.8B45 F8       mov eax,
00500872|.E8 4138F0FF   call Any2Icon.004040B8
00500877|.48            dec eax
00500878|.85C0          test eax,eax
0050087A|.7E 13         jle short Any2Icon.0050088F
0050087C|.BA 01000000   mov edx,0x1
00500881|>8B4D F8       /mov ecx,
00500884|.0FB64C11 FF   |movzx ecx,byte ptr ds:
00500889|.03D9          |add ebx,ecx
0050088B|.42            |inc edx
0050088C|.48            |dec eax
0050088D|.^ 75 F2         \jnz short Any2Icon.00500881
0050088F|>8BC3          mov eax,ebx
00500891|.B9 1E000000   mov ecx,0x1E
00500896|.99            cdq
00500897|.F7F9          idiv ecx
00500899|.42            inc edx
0050089A|.B8 58095000   mov eax,Any2Icon.00500958                ;2345679qwertyupadfghjkzxcvbnms
0050089F|.8A4410 FF   mov al,byte ptr ds:
005008A3|.8B55 FC       mov edx,
005008A6|.3A42 01       cmp al,byte ptr ds:
005008A9|.74 01         je short Any2Icon.005008AC
005008AB|.46            inc esi
005008AC|>8D55 F4       lea edx,
005008AF|.8B45 F8       mov eax,
005008B2|.E8 5986F0FF   call Any2Icon.00408F10
005008B7|.8D45 EC       lea eax,
005008BA|.8B55 F4       mov edx,
005008BD|.8A12          mov dl,byte ptr ds:
005008BF|.E8 1C37F0FF   call Any2Icon.00403FE0
005008C4|.8B45 EC       mov eax,
005008C7|.BA 58095000   mov edx,Any2Icon.00500958                ;2345679qwertyupadfghjkzxcvbnms
005008CC|.E8 D33AF0FF   call Any2Icon.004043A4
005008D1|.85C0          test eax,eax
005008D3|.7E 11         jle short Any2Icon.005008E6
005008D5|.8D45 FC       lea eax,
005008D8|.E8 AB39F0FF   call Any2Icon.00404288
005008DD|.8B55 F4       mov edx,
005008E0|.8A12          mov dl,byte ptr ds:
005008E2|.8810          mov byte ptr ds:,dl
005008E4|.EB 3E         jmp short Any2Icon.00500924
005008E6|>33DB          xor ebx,ebx
005008E8|.8B45 F8       mov eax,
005008EB|.E8 C837F0FF   call Any2Icon.004040B8
005008F0|.48            dec eax
005008F1|.85C0          test eax,eax
005008F3|.7E 13         jle short Any2Icon.00500908
005008F5|.BA 01000000   mov edx,0x1
005008FA|>8B4D F8       /mov ecx,
005008FD|.0FB64C11 FF   |movzx ecx,byte ptr ds:
00500902|.33D9          |xor ebx,ecx
00500904|.42            |inc edx
00500905|.48            |dec eax
00500906|.^ 75 F2         \jnz short Any2Icon.005008FA
00500908|>8BC3          mov eax,ebx
0050090A|.B9 1E000000   mov ecx,0x1E
0050090F|.99            cdq
00500910|.F7F9          idiv ecx
00500912|.42            inc edx
00500913|.B8 58095000   mov eax,Any2Icon.00500958                ;2345679qwertyupadfghjkzxcvbnms
00500918|.8A4410 FF   mov al,byte ptr ds:
0050091C|.8B55 FC       mov edx,
0050091F|.3A02          cmp al,byte ptr ds:
00500921|.74 01         je short Any2Icon.00500924
00500923|.46            inc esi
00500924|>33C0          xor eax,eax
00500926|.5A            pop edx                                  ;0012E850
00500927|.59            pop ecx                                  ;0012E850
00500928|.59            pop ecx                                  ;0012E850
00500929|.64:8910       mov dword ptr fs:,edx
0050092C|.68 46095000   push Any2Icon.00500946
00500931|>8D45 EC       lea eax,
00500934|.BA 05000000   mov edx,0x5
00500939|.E8 1E35F0FF   call Any2Icon.00403E5C
0050093E\.C3            retn
0050093F   .^ E9 082FF0FF   jmp Any2Icon.0040384C
00500944   .^ EB EB         jmp short Any2Icon.00500931
00500946      8BC6          mov eax,esi
00500948   .5E            pop esi                                  ;0012E850
00500949   .5B            pop ebx                                  ;0012E850
0050094A   .8BE5          mov esp,ebp
0050094C   .5D            pop ebp                                  ;0012E850
0050094D   .C3            retn

esi=0000000B
eax=00000000

00500946      8BC6          mov eax,esi,原来eax的值是由esi赋值的。我们修改的时候,只要到段尾,eax的值一直为0就可以了,(见下面修改2)
至此,破解结束了。通用补丁的制作见图,关键是要找到不易改变的特征码

修改1 原0050142C      83F8 0A       cmp eax,0xA                              
      改0050142C   /EB 57         jmp short Any2Icon.00501485            
      0050142E   |90            nop


修改2原00500946      8BC6          mov eax,esi
   改00500946      9090          nop
   或改00500946      8bf0          mov esi,eax       (本人倾向于用这种)


【破解总结】总的思路:就是1.在输入注册信息时,要把注册信息写入注册表。2.在重启验证时,要让eax为0。具体操作,自由发挥,能达到上述目的就行。
这是隔壁论坛学员的作业题,本人由于刚在本论坛自学几个月,水平有限。也自我测试一下,第一次写这种详细的破文,写的不好不足之处,敬请谅解。

Troublemaker 发表于 2016-5-9 12:58

谢谢楼主

1462326016 发表于 2016-5-14 21:16

感谢分享
页: [1]
查看完整版本: Any to Icon图像转换器爆破及通用补丁制作