软件名:力维智能门锁管理系统
编写语言:vb5.0/6.0
使用GetVBRegs找到注册成功和失败的地方替换了字符串,在OD里面看这两个地方也是相隔甚远,但又同在一个call里面;
机器码会根据时间变化
程序加的是ASPack 2.12 -> Alexey Solodovnikov壳可以直接用Peid直接脱掉
注册码必须为16位,并且可以转换为16进制的字符
比如输入码:
4142434445464748
程序会分割成:
41 42 43 44 45 46 47 48
分割后转换为16进制,最终也就是
ABCDEFGH
成功字符串地址:005833F2
失败字符串地址:00581C68
两个地址相差十万八千里,实在是搞不懂它是怎么跳过去的,忘高手指点一二
很期待高手说说此类没有明显跳转和call的软件应该怎么分析
4.3版的程序 : http://www.levellock.com/download/LVLOCK4.3_USB.rar
4.1 版的程序:
LVLOCK_USB.part01.rar
LVLOCK_USB.part02.rar
LVLOCK_USB.part03.rar
LVLOCK_USB.part04.rar
LVLOCK_USB.part05.rar
LVLOCK_USB.part06.rar
LVLOCK_USB.part07.rar
LVLOCK_USB.part08.rar
LVLOCK_USB.part09.rar
LVLOCK_USB.part10.rar
问题解决了,爆破需要改两个地方
程序把注册信息写到一个Access数据库里面
数据库文件名《Lock.dll》估计是作者用来迷惑人的
数据库密码:yhd
下面是第一个修改的地方
0058F6E3 . 66:83BD 8CFEF>cmp word ptr [ebp-174], 0
[COLOR="Red"]0058F6EB . 0F84 E4000000 je 0058F7D5 ; 必须跳,不跳则“错误的注册码!”[/COLOR]
0058F6F1 . B9 04000280 mov ecx, 80020004
0058F6F6 . 898D 24FFFFFF mov dword ptr [ebp-DC], ecx
0058F6FC . B8 0A000000 mov eax, 0A
0058F701 . 8985 1CFFFFFF mov dword ptr [ebp-E4], eax
0058F707 . 898D 34FFFFFF mov dword ptr [ebp-CC], ecx
0058F70D . 8985 2CFFFFFF mov dword ptr [ebp-D4], eax
0058F713 . C785 D4FEFFFF>mov dword ptr [ebp-12C], 004331C8 ; 004331C8 => UNICODE"系统注册"
0058F71D . BB 08000000 mov ebx, 8
0058F722 . 899D CCFEFFFF mov dword ptr [ebp-134], ebx
0058F728 . 8D95 CCFEFFFF lea edx, dword ptr [ebp-134]
0058F72E . 8D8D 3CFFFFFF lea ecx, dword ptr [ebp-C4]
0058F734 . 8B35 1C124000 mov esi, dword ptr [<&MSVBVM60.__vba>
0058F73A . FFD6 call esi
0058F73C . C785 E4FEFFFF>mov dword ptr [ebp-11C], 004332B4 ; 004332B4 => UNICODE"错误的注册码"
0058F746 . 899D DCFEFFFF mov dword ptr [ebp-124], ebx
0058F74C . 8D95 DCFEFFFF lea edx, dword ptr [ebp-124]
0058F752 . 8D8D 4CFFFFFF lea ecx, dword ptr [ebp-B4]
0058F758 . FFD6 call esi
0058F75A . 8D8D 1CFFFFFF lea ecx, dword ptr [ebp-E4]
0058F760 . 51 push ecx
0058F761 . 8D95 2CFFFFFF lea edx, dword ptr [ebp-D4]
0058F767 . 52 push edx
0058F768 . 8D85 3CFFFFFF lea eax, dword ptr [ebp-C4]
0058F76E . 50 push eax
0058F76F . 6A 40 push 40
0058F771 . 8D8D 4CFFFFFF lea ecx, dword ptr [ebp-B4]
0058F777 . 51 push ecx
0058F778 . FF15 AC104000 call dword ptr [<&MSVBVM60.#595>] ; 弹出“错误的注册码”对话框
关键跳转就是
0058F6EB ,要怎么改就自己发挥了
如果只改这里的话运行后会提示“注册出错,请与软件供应商联系!”
如图:
这是因为程序验证成功后还调用了一个函数,看看下面的代码
0058F900 . 68 A0000000 push 0A0
0058F905 . 68 540D4300 push 00430D54
0058F90A . 8B55 C8 mov edx, dword ptr [ebp-38]
0058F90D . 52 push edx
0058F90E . 50 push eax
0058F90F . FF15 74104000 call dword ptr [<&MSVBVM60.__vbaHre>; Msvbvm60.__vbaHresultCheckObj
0058F915 > 8B45 90 mov eax, dword ptr [ebp-70]
0058F918 . 50 push eax ; /String = ""
[COLOR="Red"]0058F919 . FF15 3C104000 call dword ptr [<&MSVBVM60.rtcAnsiValueBstr>] ; “注册出错,请与软件供应商联系!”[/COLOR]
通过上面的代码看到执行"rtcAnsiValueBstr"这个函数时eax的值是一个空字符串
所以在这个函数执行的时候就报异常了,前面看到的就是异常消息
只要把
0058F919这行nop掉就可以了
或者你能让eax的值在传入这个函数时不报异常也可以
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)