|
本帖最后由 57907103 于 2018-10-23 22:01 编辑
说明:通过下面的分析很容易找到内存中的注册码,但是用这个注册码注册后当单据大于200张时启动后任然会弹出未注册窗口,将未注册窗口强制跳过后打印单据时任然会在单据上显示试用版请注册字样。不知道这个注册码的设置是作者的一个陷阱还是其他什么意思。经过多处代码综合分析可通过改一处代码进行爆破,但是这种改法应该不是软件正常注册后所走的流程,哪位同学能按照正常的注册流程完成逆向欢迎补充。
首先OD载入运行程序,智能搜索查找可用字符串,将试用、未注册字样的全部下段,然后在各断点处查看上下代码进行分析,如下:
字符串断点
0072A8E1 C680 6E050000>mov byte ptr ds:[eax+0x56D],0x1 ; \\关键点,nop掉即为注册码方式爆破,将56D改为56E即为加密狗方式爆破
改这里后会影响下面的3处,实现注册成功。
-----------------------------------------------------------------------------------------------------------------------------
第1处:
0074498B |. 80B8 6E050000>cmp byte ptr ds:[eax+0x56E],0x0
00744992 |. 75 20 jnz short SQLDepot.007449B4 ; \\加密狗方式的登录注册验证
00744994 |. A1 645F7500 mov eax,dword ptr ds:[0x755F64]
00744999 |. 8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.007291F8
0074499B |. 80B8 6D050000>cmp byte ptr ds:[eax+0x56D],0x1
007449A2 |. 75 10 jnz short SQLDepot.007449B4 ; \\注册码方式的登录注册验证
第2处:
00747F60 |. /0F85 FA000000 jnz SQLDepot.00748060 ; //加密狗方式的入库单打印注册验证
00747F66 |. |A1 645F7500 mov eax,dword ptr ds:[0x755F64]
00747F6B |. |8B00 mov eax,dword ptr ds:[eax]
00747F6D |. |80B8 6D050000>cmp byte ptr ds:[eax+0x56D],0x1
00747F74 |. |0F85 E6000000 jnz SQLDepot.00748060 ; //注册码方式的入库单打印注册验证
00747F7A |. |BA 00887400 mov edx,SQLDepot.00748800 ; mmoTry
00747F7F |. |8BC3 mov eax,ebx
00747F81 |. |E8 36E5F0FF call SQLDepot.006564BC
00747F86 |. |85C0 test eax,eax
00747F88 |. |0F85 B6000000 jnz SQLDepot.00748044 ; //
ds:[01927812]=00
ds:[01927811]=01
第3处:
00748396 |. /0F85 FA000000 jnz SQLDepot.00748496 ; \\加密狗方式的出库单打印注册验证
0074839C |. |A1 645F7500 mov eax,dword ptr ds:[0x755F64]
007483A1 |. |8B00 mov eax,dword ptr ds:[eax]
007483A3 |. |80B8 6D050000>cmp byte ptr ds:[eax+0x56D],0x1
007483AA |. |0F85 E6000000 jnz SQLDepot.00748496 ; \\注册码方式的出库单打印注册验证
007483B0 |. |BA 00887400 mov edx,SQLDepot.00748800 ; mmoTry
007483B5 |. |8BC6 mov eax,esi
007483B7 |. |E8 00E1F0FF call SQLDepot.006564BC
007483BC |. |85C0 test eax,eax
007483BE |. |0F85 B6000000 jnz SQLDepot.0074847A ; \\
==============================================================================================
注册码逆向:(不完美,任然会在打印单据时提示试用版需要注册字样)
0072A91A . E8 C9A5CDFF call SQLDepot.00404EE8 ; \\关键call,真假犸对比,出现真假码,可用内存注册机
0072A91F . 75 72 jnz short SQLDepot.0072A993 ; \\注册码注册成功后不跳与200张比较,未成功跳去与50张比较
0072A921 . A1 185F7500 mov eax,dword ptr ds:[0x755F18]
0072A926 . 8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A928 . C680 6C070000>mov byte ptr ds:[eax+0x76C],0x0
0072A92F . 81FB C8000000 cmp ebx,0xC8 ; \\EBX存的是单据的张数,大于200就跳向试用版提示
0072A935 . 7D 0C jge short SQLDepot.0072A943 ; 1
0072A937 . 81FE E8030000 cmp esi,0x3E8 ; \\ESI存的是使用次数,大于1000就不跳,后面再次比较可能提示试用版
0072A93D . 0F8C 81000000 jl SQLDepot.0072A9C4
0072A943 > 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
0072A946 . 80B8 6D050000>cmp byte ptr ds:[eax+0x56D],0x0
0072A94D . 75 10 jnz short SQLDepot.0072A95F ; 1
0072A94F . A1 185F7500 mov eax,dword ptr ds:[0x755F18]
0072A954 . 8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A956 . C680 6C070000>mov byte ptr ds:[eax+0x76C],0x0
0072A95D . EB 65 jmp short SQLDepot.0072A9C4
0072A95F > A1 185F7500 mov eax,dword ptr ds:[0x755F18]
0072A964 . 8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A966 . C680 6C070000>mov byte ptr ds:[eax+0x76C],0x1
0072A96D . A1 185F7500 mov eax,dword ptr ds:[0x755F18]
0072A972 . 8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A974 . 33D2 xor edx,edx
0072A976 . 8990 68070000 mov dword ptr ds:[eax+0x768],edx
0072A97C . 6A 00 push 0x0
0072A97E . 66:8B0D E4B17>mov cx,word ptr ds:[0x72B1E4]
0072A985 . B2 03 mov dl,0x3
0072A987 . B8 F0B17200 mov eax,SQLDepot.0072B1F0 ; 您使用的是试用版,请联系里诺软件购买正式版本!
0072A98C . E8 2B41D1FF call SQLDepot.0043EABC
0072A991 . EB 31 jmp short SQLDepot.0072A9C4
0072A993 > 83FB 32 cmp ebx,0x32 ; \\EBX存的是单据的张数,大于50就跳向未注册提示
0072A996 . 7D 08 jge short SQLDepot.0072A9A0
0072A998 . 81FE E8030000 cmp esi,0x3E8
0072A99E . 7C 24 jl short SQLDepot.0072A9C4 ; \\ESI存的是使用次数,大于1000就不跳提示未注册
0072A9A0 > A1 185F7500 mov eax,dword ptr ds:[0x755F18]
0072A9A5 . 8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A9A7 . 33D2 xor edx,edx
0072A9A9 . 8990 68070000 mov dword ptr ds:[eax+0x768],edx
0072A9AF . 6A 00 push 0x0
0072A9B1 . 66:8B0D E4B17>mov cx,word ptr ds:[0x72B1E4]
0072A9B8 . B2 03 mov dl,0x3
0072A9BA . B8 28B27200 mov eax,SQLDepot.0072B228 ; 程序未注册,数据超过限制,您需要注册才能继续使用本软件!
0072A9BF . E8 F840D1FF call SQLDepot.0043EABC
0072A9C4 > 8D95 58FBFFFF lea edx,dword ptr ss:[ebp-0x4A8]
===================================================================
加密狗逆向:(不完美,任然会在打印单据时提示试用版需要注册字样)
0072A583 . /0F84 B4010000 je SQLDepot.0072A73D ; \\判断验证方式是注册码验证还是加密狗验证,跳就注册码,不跳就加密狗
0072A589 . |A1 185F7500 mov eax,dword ptr ds:[0x755F18]
0072A58E . |8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A590 . |C780 68070000>mov dword ptr ds:[eax+0x768],0x1
0072A59A . |8B45 FC mov eax,dword ptr ss:[ebp-0x4]
0072A59D . |C680 6E050000>mov byte ptr ds:[eax+0x56E],0x1
0072A5A4 . |8D45 C4 lea eax,dword ptr ss:[ebp-0x3C]
0072A5A7 . |BA B8AF7200 mov edx,SQLDepot.0072AFB8 ; lenojiamidog_888
0072A5AC . |E8 B3A5CDFF call SQLDepot.00404B64
0072A5B1 . |8B45 C4 mov eax,dword ptr ss:[ebp-0x3C]
0072A5B4 . |E8 E3A9CDFF call SQLDepot.00404F9C
0072A5B9 . |50 push eax
0072A5BA . |E8 1599FCFF call <jmp.&NT77.NTFindFirst>
0072A5BF . |8BD8 mov ebx,eax
0072A5C1 . |85DB test ebx,ebx
0072A5C3 . |74 36 je short SQLDepot.0072A5FB ; \\必须跳1
0072A5C5 . |6A 20 push 0x20
0072A5C7 . |B9 CCAF7200 mov ecx,SQLDepot.0072AFCC ; 提示
0072A5CC . |BA D4AF7200 mov edx,SQLDepot.0072AFD4 ; 没有找到可用的加密狗设备, 您录入的数据大于软件规定条数, 如果您觉得软件对您的管理有帮助, 请您购买我们的正式版本, 谢谢支持!
0072A5D1 . |A1 A0627500 mov eax,dword ptr ds:[0x7562A0]
0072A5D6 . |8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A5D8 . |E8 E36BD8FF call SQLDepot.004B11C0
0072A5DD . |8B45 FC mov eax,dword ptr ss:[ebp-0x4]
0072A5E0 . |05 64050000 add eax,0x564
0072A5E5 . |BA 58B07200 mov edx,SQLDepot.0072B058 ; no dog
0072A5EA . |E8 31A5CDFF call SQLDepot.00404B20
0072A5EF . |A1 A0627500 mov eax,dword ptr ds:[0x7562A0]
0072A5F4 . |8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A5F6 . |E8 216BD8FF call SQLDepot.004B111C
0072A5FB > |8D85 9EFBFFFF lea eax,dword ptr ss:[ebp-0x462]
0072A601 . |50 push eax
0072A602 . |E8 DD98FCFF call <jmp.&NT77.NTGetHardwareID>
0072A607 . |8BD8 mov ebx,eax
0072A609 . |85DB test ebx,ebx
0072A60B . |74 24 je short SQLDepot.0072A631 ; \\必须跳2
0072A60D . |6A 20 push 0x20
0072A60F . |B9 CCAF7200 mov ecx,SQLDepot.0072AFCC ; 提示
0072A614 . |BA 60B07200 mov edx,SQLDepot.0072B060 ; 获取加密狗序列号失败!
0072A619 . |A1 A0627500 mov eax,dword ptr ds:[0x7562A0]
0072A61E . |8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A620 . |E8 9B6BD8FF call SQLDepot.004B11C0
0072A625 . |A1 A0627500 mov eax,dword ptr ds:[0x7562A0]
0072A62A . |8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A62C . |E8 EB6AD8FF call SQLDepot.004B111C
0072A631 > |8D45 C0 lea eax,dword ptr ss:[ebp-0x40]
0072A634 . |BA 80B07200 mov edx,SQLDepot.0072B080 ; ef0a066ed005308ce8e2dcef7fea816f
0072A639 . |E8 26A5CDFF call SQLDepot.00404B64
0072A63E . |8B45 C0 mov eax,dword ptr ss:[ebp-0x40]
0072A641 . |E8 56A9CDFF call SQLDepot.00404F9C
0072A646 . |50 push eax
0072A647 . |E8 9098FCFF call <jmp.&NT77.NTLogin>
0072A64C . |8BD8 mov ebx,eax
0072A64E . |85DB test ebx,ebx
0072A650 . |74 24 je short SQLDepot.0072A676 ; \\必须跳3
0072A652 . |6A 20 push 0x20
0072A654 . |B9 CCAF7200 mov ecx,SQLDepot.0072AFCC ; 提示
0072A659 . |BA A4B07200 mov edx,SQLDepot.0072B0A4 ; 加密狗设备有问题,请您插入正确的加密狗!
0072A65E . |A1 A0627500 mov eax,dword ptr ds:[0x7562A0]
0072A663 . |8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A665 . |E8 566BD8FF call SQLDepot.004B11C0
0072A66A . |A1 A0627500 mov eax,dword ptr ds:[0x7562A0]
0072A66F . |8B00 mov eax,dword ptr ds:[eax] ; SQLDepot.0073EB68
0072A671 . |E8 A66AD8FF call SQLDepot.004B111C
0072A676 > |B8 20000000 mov eax,0x20
0072A67B . |BA 38000000 mov edx,0x38
0072A680 . |8D8D BFFBFFFF lea ecx,dword ptr ss:[ebp-0x441]
0072A686 . |51 push ecx
0072A687 . |52 push edx
0072A688 . |50 push eax
0072A689 . |E8 5E98FCFF call <jmp.&NT77.NTRead>
0072A68E . |8BD8 mov ebx,eax
0072A690 . |85DB test ebx,ebx
0072A692 . |75 55 jnz short SQLDepot.0072A6E9 ; \\不能跳4
0072A694 . |8D85 78FBFFFF lea eax,dword ptr ss:[ebp-0x488]
0072A69A . |8D95 BFFBFFFF lea edx,dword ptr ss:[ebp-0x441]
0072A6A0 . |B9 01040000 mov ecx,0x401
0072A6A5 . |E8 A2A6CDFF call SQLDepot.00404D4C
0072A6AA . |8B85 78FBFFFF mov eax,dword ptr ss:[ebp-0x488]
0072A6B0 . |BA D8B07200 mov edx,SQLDepot.0072B0D8 ; fzsale_321_jiami
0072A6B5 . |E8 2EA8CDFF call SQLDepot.00404EE8 ; \\关键call
0072A6BA . |0F84 04030000 je SQLDepot.0072A9C4 ; \\必须跳,加密狗关键跳
0072A6C0 . |6A 20 push 0x20
0072A6C2 . |B9 CCAF7200 mov ecx,SQLDepot.0072AFCC ; 提示
0072A6C7 . |BA ECB07200 mov edx,SQLDepot.0072B0EC ; 加密狗验证出错,请您购买正确的加密狗!
NT77.DLL文件逆向,会影响上面的对应4个跳转,可直接改上面的跳转,也可以改此DLL文件后自动影响上面4个跳转
10001074 NT77 已禁止 jmp short NT77.10001081 \\必须跳1
100010E0 NT77 已禁止 jmp short NT77.100010F0 \\必须跳3
1000111F NT77 已禁止 jmp short NT77.10001129 \\必须跳4
10001176 NT77 已禁止 jmp short NT77.10001180 \\必须跳2
===============================================================================
|
评分
-
参与人数 10 | 威望 +1 |
HB +33 |
THX +7 |
收起
理由
|
情绪控
| |
+ 1 |
|
[吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少! |
霍华德
| |
+ 1 |
|
|
temp
| |
+ 1 |
+ 1 |
|
消逝的过去
| |
|
+ 1 |
|
慕枫二二
| |
+ 1 |
|
[吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩! |
liugu0hai
| |
+ 1 |
+ 1 |
[吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩! |
lies
| |
|
+ 1 |
|
zxjzzh
| |
+ 5 |
+ 1 |
[快捷评语] - 2018,狗年发发发,狗年旺旺旺! |
syzh802618
| |
+ 3 |
+ 1 |
[快捷评语] - 2018,狗年发发发,狗年旺旺旺! |
Shark恒
| + 1 |
+ 20 |
+ 1 |
[快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品! |
查看全部评分
|