artcursors4.01脱壳 拆引信 | 宜武汇-ag真人国际厅网站

目标:artcursors 4.01

壳:asprotect 1.23 rc4

没办法,偶特别喜欢32位色的精美小图标、光标,懂得一点photoshop,可是photoshop竟不支持图标、光标格式!于是上网狂找能编辑32位色图标、光标的软件,结果发现:怎么那些好用的图标编辑软件都那么喜欢穿aspr牌的马甲呢?网上pj版又不好找,很吊胃口啊,不行,欲火焚身,非把她们的马甲脱光光再插插了不可~~~~~~~~~~~~~唉,偶等菜鸟不会分析注册算法,只能手忙脚乱地拿着各种工具干危险的力气活――爆破

一、脱壳

用stripper2.07,秒杀aspr!

================================================================================

二、修补

偷走的代码被变形了,stripper就新增加一个段,把变形的入口代码抄下来放这里,实在不爽,不过天助我也,这个软件的早期版本我脱过,delphi5写的,他们的入口代码的格式我都能背熟了:

push ebp

mov ebp,esp

add esp,-0c

mov eax,xxxxxx

call xxxxxx

call [xxxxxx]  〈=被偷走的代码执行完后来到这里

只要在合适的时候找到eax是多少就好了。

载入原版跟踪,闯过26处seh,然后在按alt-m打开内存镜象,在code段设置内存访问断点,断下后来到这里:

0040692c  – ff25 b0e25400   jmp dword ptr ds:[54e2b0]  〈=断在这里

00406932    8bc0            mov eax,eax

00406934  – ff25 ace25400   jmp dword ptr ds:[54e2ac]

0040693a    8bc0            mov eax,eax

0040693c  – ff25 a8e25400   jmp dword ptr ds:[54e2a8]

00406942    8bc0            mov eax,eax

00406944  – ff25 a4e25400   jmp dword ptr ds:[54e2a4]

0040694a    8bc0            mov eax,eax

清除内存访问断点后,继续f8跟踪,来到这里:

00406a34    ba 08615400     mov edx,artcur.00546108

00406a39    52              push edx

00406a3a    8905 dcd45400   mov dword ptr ds:[54d4dc],eax

00406a40    8942 04         mov dword ptr ds:[edx 4],eax

00406a43    c742 08 0000000>mov dword ptr ds:[edx 8],0

00406a4a    c742 0c 0000000>mov dword ptr ds:[edx c],0

00406a51    e8 8affffff     call artcur.004069e0

00406a56    5a              pop edx

00406a57    58              pop eax

00406a58    e8 c7d0ffff     call artcur.00403b24  〈=在此处记下eax值:544d9c

00406a5d    c3              retn

从406a5d处返回到545244 call [54bc14]

上面的代码片段执行了一部分54523f call 00406a2c里的代码,因此可以在这个call里合适的时机找到eax的值。

00545233    0000            add byte ptr ds:[eax],al  〈=被偷走的代码

00545235    0000            add byte ptr ds:[eax],al

00545237    0000            add byte ptr ds:[eax],al

00545239    0000            add byte ptr ds:[eax],al

0054523b    0000            add byte ptr ds:[eax],al

0054523d    0000            add byte ptr ds:[eax],al

0054523f    e8 e817ecff     call artcur.00406a2c        〈=断不下来

00545244    ff15 14bc5400   call dword ptr ds:[54bc14]  〈=断在这里

现在补上被偷走的代码:

00545234       55            push ebp

00545235   .  8bec          mov ebp,esp

0054523a   .  b8 9c4d5400   mov eax,00544d9c

===================================================================================

三、拆引信

用stripper脱壳的文件,运行时总是提示时间到了,只能跟原版比较跟踪。

在545244处,

545244  call dword  [54bc14]

原版call进544c48,而脱壳版call进544d44,于是把脱壳文件的54bc14处对应的文件偏移处数据改为48 4c 54 00,保存,运行,轰~~~~~~~来到一个除法“炸弹”:

004ff0f3  |.  e8 5429f6ff   call dump.00461a4c

004ff0f8  |.  8bd8          mov ebx,eax

004ff0fa  |.  81fb 40420f00 cmp ebx,0f4240

004ff100  |.  7e 34         jle short dump.004ff136  〈=要跳

004ff102  |.  e8 d9eef7ff   call dump.0047dfe0

004ff107  |.  85c0          test eax,eax

004ff109  |.  7e 2b         jle short dump.004ff136

004ff10b  |.  8d55 f8       lea edx,dword ptr ss:[ebp-8]

004ff10e  |.  33c0          xor eax,eax

004ff110  |.  e8 9f39f0ff   call dump.00402ab4

004ff115  |.  8b45 f8       mov eax,dword ptr ss:[ebp-8]

004ff118  |.  e8 2f29f6ff   call dump.00461a4c

004ff11d  |.  2bd8          sub ebx,eax

004ff11f  |.  b8 17000000   mov eax,17

004ff124  |.  99            cdq  〈=异常

原版跟踪发现004ff100处在原版是跳的,不然也会异常,就把脱壳版的004ff100处机器码改成eb 34,保存,运行。。。

轰!!!!!!!!!!!!!!!!!!!!!!!!!!!!

一个窗口炸弹被引爆了!无限的脱壳版程序在运行,系统资源耗尽!

重起,继续跟踪,发现炸弹引信在此:

004ff01a  |.  e8 2d2af6ff   call dump.00461a4c

004ff01f  |.  3d 804f1200   cmp eax,124f80

004ff024  |.  7e 30         jle short dump.004ff056  〈=不跳就挂

004ff026  |.  e8 b5eff7ff   call dump.0047dfe0

004ff02b  |.  85c0          test eax,eax

004ff02d  |.  7e 27         jle short dump.004ff056

004ff02f  |.  6a 05         push 5

004ff031  |.  6a 00         push 0

004ff033  |.  6a 00         push 0

004ff035  |.  8d55 f8       lea edx,dword ptr ss:[ebp-8]

004ff038  |.  33c0          xor eax,eax

004ff03a  |.  e8 753af0ff   call dump.00402ab4

004ff03f  |.  8b45 f8       mov eax,dword ptr ss:[ebp-8]

004ff042  |.  e8 cd51f0ff   call dump.00404214

004ff047  |.  50            push eax                                 ; |filename

004ff048  |.  6a 00         push 0                                   ; |operation = null

004ff04a  |.  6a 00         push 0                                   ; |hwnd = null

004ff04c  |.  e8 d369f5ff   call         ; \shellexecutea

就是4ff04c处的shellexecutea不断调用自己,造成窗口炸弹!好阴险的家伙!

原版的4ff024处也是跳的,不然也是窗口炸弹。

保存修改,再运行,哈,点掉nag,主界面出来了!不过老是闪,看来还有地方有问题,经过跟踪发现,上面两个”炸弹“的”引信”(条件跳转语句)前的call,都是调用461a4c处的代码,461a4c肯定有问题!

在461a4c里,用两个od经过漫长的跟踪比较各个寄存器的值,发现这些代码很可疑:

00408e64  |.  54            push esp                                 ; /plocalfiletime

00408e65  |.  8d43 2c       lea eax,dword ptr ds:[ebx 2c]            ; |

00408e68  |.  50            push eax                                 ; |pfiletime

00408e69  |.  e8 f2dcffff   call ; \filetimetolocalfiletime

00408e6e  |.  53            push ebx                                 ; /pdostime

00408e6f  |.  8d43 02       lea eax,dword ptr ds:[ebx 2]             ; |

00408e72  |.  50            push eax                                 ; |pdosdate

00408e73  |.  8d4424 08     lea eax,dword ptr ss:[esp 8]             ; |

00408e77  |.  50            push eax                                 ; |pfiletime

00408e78  |.  e8 dbdcffff   call ; \filetimetodosdatetime

经过这些代码后,原版和脱壳版的eax寄存器的值不一样,脱壳版cmp指令比较eax值,触发“引信”。继续跟踪发现上面代码经过几次ret后,有这么一个语句:

004ff0a2  |.  3d a0bb0d00   cmp eax,0dbba0

004ff0a7  |.  0f9cc3        setl bl  〈=好象是说,如果大于,就设置bl为1

发现只要把setl bl改成mov bl,1就搞定了,至此脱壳 修复完全搞定,时间限制解除,运气好啊~~~~~~~~~

接下来就是搞定nag了,偶累了,下次再说o_o

原文链接:https://bbs.kanxue.com/thread-164.htm

网络摘文,本文作者:15h,如若转载,请注明出处:https://www.15cov.cn/2023/08/27/artcursors4-01脱壳拆引信/

发表评论

邮箱地址不会被公开。 必填项已用*标注

网站地图