写给新手,虽然简单,高手不屑细写,但我不是高手,我愿意详细点分析给菜鸟们。大家一起进步吧。。。我发表的时候,也没注意到已有破文,但是版本不一样了,那个算法改了。即然这样尴尬,我就修改一下破文,精简一下。。。
下载
2e3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3q4A6M7U0N6Q4x3X3g2U0L8W2)9J5c8V1y4J5K9@1I4$3x3%4y4H3x3g2)9J5k6i4u0S2M7W2)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4@1f1@1i4@1t1&6i4K6W2r3i4@1f1#2i4K6S2r3i4@1q4r3i4@1f1@1i4@1u0n7i4@1p5#2i4@1f1#2i4K6W2o6i4@1p5^5i4@1f1&6i4K6V1&6i4K6R3@1i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1@1i4@1t1^5i4@1q4p5i4@1f1@1i4@1t1^5i4K6S2n7i4@1f1^5i4@1u0p5i4@1u0p5
下年我们组合参加CRACKME比赛吧
也许对你使用VB有启发,地址:
http://bbs.pediy.com/attachment.php?attachmentid=5867&d=1179841323
拿到程序后,发现是我最喜欢的VB语言,作者说自校验加壳,呵呵~~管他什么壳,先用OD脱之~~
50688字节(脱壳后,但是未优化,优化后可以更小)
脱到上面的那个地址就OK了,后来用PEID检测原来是ASPack的压缩壳
PEID:ASPack 2.12 -> Alexey Solodovnikov
CTRL+G 到 “401100”,你将看到浮点数值:25600(表示设定的标准校验值)
004010F4 /975A4000 dd 脱壳.00405A97
004010F8 |CD5A4000 dd 脱壳.00405ACD
004010FC |9F5A4000 dd 脱壳.00405A9F
00401100 . |000000000000D>dq float 25600.00000000000
00401108 |07 db 07
00401109 |00 db 00
0040110A |08 db 08
0040110B |00 db 00
25600字节进行对比
50688(脱壳后,但是未优化,优化后可以更小)
00405C86 . FF15 9C104000 call dword ptr [<&msvbvm60.rtcF>; msvbvm60.rtcFileLen 利用这个函数获取大小50688
00405CDE . 0F84 8A000000 je 00405D6E ; 自校验关键跳1 NOP
00405CF9 . 74 73 je short 00405D6E ; 自校验关键跳2 NOP
00405D10 . 74 5C je short 00405D6E ; 自校验关键跳3 NOP
00405D27 . 74 45 je short 00405D6E ; 自校验关键跳4 NOP
00405D3E . 74 2E je short 00405D6E ; 自校验关键跳5 NOP
00405D55 . 74 17 je short 00405D6E ; 自校验关键跳6 NOP
00405D6C . 75 06 jnz short 00405D74 ; 自校验关键跳7 改JMP
按照上面提示,前6处比较都NOP掉,第7处改必跳。剔除自校验。
修改好程序后,呵呵,重新开始,设置断点:405150(即单击事件地址)
填好信息后注册:用户名:123 注册码:456
代码不全贴了,太占篇幅,其机制简单归纳为:
获取用户名
获取假注册码
0040541A . 8B45 E8 mov eax, dword ptr [ebp-18>
0040541D . 50 push eax
0040541E . FF15 80104000 call dword ptr [<&msvbvm60.>; msvbvm60.__vbaR8Str
00405424 . DC0D D8104000 fmul qword ptr [4010D8] ; 用户名*3
0040542A . 8B4D E8 mov ecx, dword ptr [ebp-18>
0040542D . 51 push ecx
0040542E . DFE0 fstsw ax
00405430 . A8 0D test al, 0D
00405432 . 0F85 AA010000 jnz 004055E2
00405438 . DD9D 28FFFFFF fstp qword ptr [ebp-D8]
0040543E . FF15 80104000 call dword ptr [<&msvbvm60.>; msvbvm60.__vbaR8Str
00405444 . DC85 28FFFFFF fadd qword ptr [ebp-D8] ; 用户名*3+用户名=用户名*4
0040544A . 83EC 08 sub esp, 8
0040544D . DC05 D0104000 fadd qword ptr [4010D0] ; 用于加法的固定值:121
以上可以简单的看作:N1=用户名*4+121
00405453 . DFE0 fstsw ax
00405455 . A8 0D test al, 0D
00405457 . 0F85 85010000 jnz 004055E2
0040545D . DD1C24 fstp qword ptr [esp]
00405460 . FF15 5C104000 call dword ptr [<&msvbvm60.>; msvbvm60.__vbaStrR8
00405466 . 8BD0 mov edx, eax
00405468 . 8D4D E4 lea ecx, dword ptr [ebp-1C>
0040546B . FFD7 call edi
0040546D . 8B55 E0 mov edx, dword ptr [ebp-20>
00405470 . 52 push edx
00405471 . FF15 80104000 call dword ptr [<&msvbvm60.>; msvbvm60.__vbaR8Str
00405477 . DC0D D8104000 fmul qword ptr [4010D8] ; 注册码*3
0040547D . DFE0 fstsw ax
0040547F . A8 0D test al, 0D
00405481 . 0F85 5B010000 jnz 004055E2
00405487 . 8B45 E0 mov eax, dword ptr [ebp-20>
0040548A . DD9D 20FFFFFF fstp qword ptr [ebp-E0]
00405490 . 50 push eax
00405491 . FF15 80104000 call dword ptr [<&msvbvm60.>; msvbvm60.__vbaR8Str
00405497 . DC85 20FFFFFF fadd qword ptr [ebp-E0] ; 注册码*3+注册码=注册码*4
0040549D . 83EC 08 sub esp, 8
004054A0 . DC05 C8104000 fadd qword ptr [4010C8] ; 注册码*4+14
以上可以简单的看作:N2=注册码*4+14
004054D2 . /0F85 97000000 jnz 0040556F ; 关键跳1
004054E4 . |0F85 85000000 jnz 0040556F ; 关键跳2
004054F6 . |75 77 jnz short 0040556F ; 关键跳3
00405504 . |75 69 jnz short 0040556F ; 关键跳4
00405512 . |75 5B jnz short 0040556F ; 关键跳5
00405520 . |75 4D jnz short 0040556F ; 关键跳6
0040552E . |75 3F jnz short 0040556F ; 关键跳7
从上面看出:要求N1=N2即可
即 用户名*4+121 = 注册码*4+14
那么我们构造一下:name:123 sn:149.75
注册成功,下面我们也用VB还制其人之身,做一个注册机
由上文推断:注册码=(用户名*4+121-14)/4
简化成:SN=(NAME*4+107)/4
Private Sub Text1_Change()
On Error GoTo maplescg
Text2.Text = (Text1.Text * 4 + 107) / 4
Exit Sub
maplescg:
Text1.Text = ""
Text2.Text = ""
MsgBox "请注意输入规范,必须为数字", , "请检查输入..."
End Sub
附件上有注册机
建议:修改自校验的检测方法,调用函数检测文件大小变化只能阻拦刚入门的。强度不够。。。
可以再结合检测文件最后修改时间,定义为一个特殊的日子,而一般用户是不可能达到那个年代的。比方说系统的时间范围:
1980----2099 年之间,如果你用特殊的办法修改了创建时间在这个时间段之外,呵呵,再自校验修改时间,加壳。然后就。。。
与上述大小自校验结合,呵呵,可以拦阻很多新手了。
反调试不能少,没有反调试,再好的算法机制也受不了攻击。VB里面的反调试不好设计,如果需要,我们可以相互学习一下。
什么文件自毁了,呵呵,自爆了,随便你弄。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!