声明:请支持使用正版软件,尊重原作者的劳动成果,
此文只做技术交流,如有他人利用,产生后果,不负
任何责任。
SourceInsight是我们常用的代码编辑器和浏览器,支持如C,C++,html等格式的代码,
使用起来非常的小巧,但无奈是商业软件,下载下来使用还是需要注册码,于是想到自己
试试破解,鉴于网上有提供的是破解注册算法的,在此我提供一种纯爆破思路,步骤如下:
我下载的是SourceInsight3.5版本,用PeiD查壳发现没有加壳,直接用OD加载,程序常
见的VC6.0所写,直接一步一步的跟进,
在00522116 |. E82CE5F1FF call 00440647 ; \产生界面以及输入框
跟进,发现程序首先进行读注册表等操作,
0044068A |. 68 D0DD5300 push 0053DDD0 ; ASCII "Source Insight\3.0"
0044068F |. E8 F73BFFFF call 0043428B
00440694 |. 85C0 test eax, eax ; 判断是否能打开注册表
00440696 75 16 jnz short 004406AE
00440698 |. 68 E4DD5300 push 0053DDE4 ; ASCII "Cannot access registry keys"
0044069D |. 6A 00 push 0
0044069F |. 6A 00 push 0
004406A1 |. E8 1018FDFF call 00411EB6
004406A6 |. 83C4 0C add esp, 0C
004406A9 |. E9 E6040000 jmp 00440B94
004406AE |> E8 41650000 call 00446BF4
004406B3 |. 85C0 test eax, eax
004406B5 |. 75 16 jnz short 004406CD
004406B7 |. 68 00DE5300 push 0053DE00 ; ASCII "Cannot access registry keys"
///
00440718 |> \E8 312A0000 call 0044314E
0044071D |. 85C0 test eax, eax
0044071F |. 74 24 je short 00440745 ; 测试电脑配置
00440721 |. 6A 31 push 31 ; /Style = MB_OKCANCEL|MB_ICONEXCLAMATION|MB_APPLMODAL
00440723 |. 68 F4CE5B00 push 005BCEF4 ; |Title = "Source Insight"
00440728 |. 68 B0D15300 push 0053D1B0 ; |Text = "System resources are too low. Restart Windows soon!"
0044072D |. 6A 00 push 0 ; |hOwner = NULL
0044072F |. FF15 C8C45200 call dword ptr [<&USER32.MessageBoxA>>; \MessageBoxA
00440735 |. 8945 D0 mov dword ptr [ebp-30], eax
00440738 |. 837D D0 01 cmp dword ptr [ebp-30], 1
0044073C |. 74 07 je short 00440745
0044073E |. 33C0 xor eax, eax
00440740 |. E9 5C040000 jmp 00440BA1
00440745 |> FF35 28975C00 push dword ptr [5C9728] ; /Arg1 = 00000000
0044074B |. E8 18ECFCFF call 0040F368 ; \Insight3.0040F368
00440750 |. 85C0 test eax, eax
00440752 |. 75 05 jnz short 00440759
00440754 |. E9 3B040000 jmp 00440B94
00440759 |> E8 F6690000 call 00447154
0044075E |. 85C0 test eax, eax
00440760 |. 75 05 jnz short 00440767
00440762 |. E9 2D040000 jmp 00440B94
00440767 |> 6A 01 push 1 ; /Arg1 = 00000001
00440769 |. E8 FF800000 call 0044886D ; \读取注册表中的序列号 用户名 公司 时间
0044076E |. 8325 E05E5E00 >and dword ptr [5E5EE0], 0
00440775 |. 837D 0C 00 cmp dword ptr [ebp+C], 0
00440779 |. 75 1F jnz short 0044079A
0044077B |. FF75 08 push dword ptr [ebp+8] ; /Arg1
0044077E |. E8 CF550000 call 00445D52 ; \Insight3.00445D52
00440783 |. 85C0 test eax, eax
00440785 |. 75 13 jnz short 0044079A ; 如果读取注册表失败
00440787 |. 68 38DE5300 push 0053DE38 ; ASCII "Window classes failed to register"
0044078C |. 6A 00 push 0
0044078E |. 6A 00 push 0
00440790 |. E8 9016FDFF call 00411E25
00440795 |. E9 FA030000 jmp 00440B94
0044079A |> 8D45 F8 lea eax, dword ptr [ebp-8] ; 加载程序资源 启动程序
0044079D |. 50 push eax ; /Arg3
0044079E |. FF75 14 push dword ptr [ebp+14] ; |Arg2
004407A1 |. FF75 10 push dword ptr [ebp+10] ; |Arg1
004407A4 |. E8 BF560000 call 00445E68 ; \Insight3.00445E68
004407A9 |. 85C0 test eax, eax
004407AB 75 05 jnz short 004407B2 ; 程序是否正常启动
004407AD |. E9 E2030000 jmp 00440B94
004407B2 |> E8 417D0000 call 004484F8 ; 对于注册表中读取到得序列号进行验证
004407B7 |. 85C0 test eax, eax
读取到了注册表内容之后紧接着找到了关键点
说明:
在未破解程序中填写的注册用户”zxc”,公司”zxc”,序列号”CRACK BY CRACK07”(按此方
法破解之后可以改为任何值),用未破解的程序将此写入了注册表,以至于再次用OD打开不
会提示注册表读取错误
004407A4 |. E8 BF560000 call 00445E68 ; \Insight3.00445E68
004407A9 |. 85C0 test eax, eax
004407AB 75 05 jnz short 004407B2 ; 程序是否正常启动
004407AD |. E9 E2030000 jmp 00440B94
004407B2 |> E8 417D0000 call 004484F8 ; 对于注册表中读取到得序列号进行验证
如果直接改00407AB的值会出现程序非正常启动直接退出,所以还是要跟进call来查看验证
00448539 |> \0FB605 FC5E5E0>movzx eax, byte ptr [5E5EFC]
00448540 |. 85C0 test eax, eax
00448542 74 27 je short 0044856B ; 判断用户序列号是否合法 改为jnz
00448544 |. 68 FC5E5E00 push 005E5EFC ; /Arg1 = 005E5EFC
00448549 |. E8 73D6FFFF call 00445BC1 ; \Insight3.00445BC1
0044854E |. 85C0 test eax, eax
00448550 75 17 jnz short 00448569
00448552 |. 68 74FE5300 push 0053FE74 ; a valid serial number was not entered.\n\nplease run the source insight setup program to install it before running it. do not just copy the insight.exe file.
00448557 |. E8 2EFAFBFF call 00407F8A
0044855C |. 59 pop ecx
0044855D |. E8 82F0FFFF call 004475E4
00448562 |. 33C0 xor eax, eax
00448564 |. E9 C5010000 jmp 0044872E
00448569 |> EB 12 jmp short 0044857D
0044856B |> 6A 00 push 0 ; /Arg1 = 00000000
0044856D E8 1D100000 call 0044958F ; 用户在注册表中的输入不合法,最简单的方法是直接改为NOP
00448572 |. 85C0 test eax, eax
00448574 |. 75 07 jnz short 0044857D
00448576 |. 33C0 xor eax, eax
00448578 |. E9 B1010000 jmp 0044872E
0044857D |> 6A 01 push 1
0044857F |. 58 pop eax
00448580 E9 A9010000 jmp 0044872E ; 直接退出 改为NOP
跟进进入004484F8关键部分
也可以进入0048568之后进行修改
经过此修改即可以满足用户注册的需求,但是在破解之后会出现运行一段时间程序自动退出
的问题,后来发现是程序在运行中还会不断的检查是否到期,在0044085c进行修改即可
0044083E |> /E8 83440000 /call 00444CC6 ; 进入循环
00440843 |. |E8 400EFEFF |call 00421688
00440848 |. |6A 01 |push 1 ; /RemoveMsg = PM_REMOVE
0044084A |. |6A 00 |push 0 ; |MsgFilterMax = WM_NULL
0044084C |. |6A 00 |push 0 ; |MsgFilterMin = WM_NULL
0044084E |. |6A 00 |push 0 ; |hWnd = NULL
00440850 |. |8D45 D4 |lea eax, dword ptr [ebp-2C] ; |
00440853 |. |50 |push eax ; |pMsg
00440854 |. |FF15 58C55200 |call dword ptr [<&USER32.PeekMessage>; \PeekMessageA
0044085A |. |85C0 |test eax, eax
0044085C |0F84 ED020000 je 00440B4F ; 如果超出了时间 就什么也不做 不捕焦点改为NOP
由于图片大小限制放一张修改后程序运行图:
最后由于时间关系,修改后的程序中有一点不足,是每次运行都会提醒用户是否要新建工程
向导,有点类似Nag窗口