加密狗验证绕过
没有插入加密狗时,打开软件点登录后,提示:
“没有查找到加密狗,可能原因:1、加密狗不存在 2、不是车牌识别系统加密”
01登录要加密狗.jpg (40.89 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
准备的工具:DEDE, IDA ,OLLDbg
二.分析:
(一)
检测软件为 Borland Delphi ( 2.0 - 7.0 ) 1992 - borland.com
于是打开软件, 检测登录窗口运行句柄,这里用到很多年前的一个按键精灵的抓抓工具.记下窗口类名TLogin_Frm.
02按键找窗.jpg (103.29 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
(二)
将程序加载到dede和IDA中.
Dede中找到TLogin_Frm窗体,中的登录事件,
03dede找窗.jpg (17.38 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
再到 过程中找到 OkBtnClick的首地址,为008AF484
[Asm] 纯文本查看 复制代码TLogin_Frm.OkBtnClick 008AF484 55 push ebp
在这个过程中大概浏览下,发现有个串:
[Asm] 纯文本查看 复制代码* Possible String Reference to: '登录用户名不能为空,请重新输入!'
|
008AF6F9 BA60FB8A00 mov edx, $008AFB60
测试:打开程序后,程序逻辑是先 检测加密狗,再检测登录名密码,所以这个判断加密狗的是在这个语句之前.
但是这个串前面还有很大一段代码,不好分析,所以一般就将程序加载ida中看逻辑.但是ida中不能显示这个字符串,所以两个结合起来看.
(知道的前辈说下怎么在ida中也能看到dede中类似” * Possible String Reference to: '登录用户名不能为空,请重新输入!' “的字符串)
在IDA中搜索地址 008AF484 ,找到这个函数:_TLogin_Frm_OkBtnClick
04IDA过程.jpg (107.98 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
在IDA中找到参考字符串的地址008AF6F9所在的块,并添加备注到里面:
[Asm] 纯文本查看 复制代码CODE:008AF6E7 mov ax, word_8AFB28
CODE:008AF6ED push eax
CODE:008AF6EE push 0
CODE:008AF6F0 mov eax, ds:off_923E30
CODE:008AF6F5 mov eax, [eax]
CODE:008AF6F7 mov cl, 2
CODE:008AF6F9 mov edx, offset _str_______________492.Text ; '登录用户名不能为空,请重新输入!'
CODE:008AF6FE call sub_56ECAC
CODE:008AF703 mov eax, [ebp+var_4]
CODE:008AF706 mov eax, [eax+32Ch]
CODE:008AF70C mov edx, [eax]
CODE:008AF70E call dword ptr [edx+0C4h]
CODE:008AF714 jmp loc_8AFADA
(三)
将程序加载到 olldbg中,先定位到 008AF6F9,
因为判断加密狗一般会调用其它过程,所以逐级往上找call, Borland语法中,类似的登录的操作一般前面应该还会有几个读取控件字串的call.是和加密狗不相关的,
但是不确定加密狗是哪个call,所以在IDA中看调用顺序,从 008AF6F9 这个地址 一个一个往上找,
逐个call下断点,直到不弹出窗口为止.,最终定到了
008AF4F9 E80EA7DAFF call 00659C0C
05OD追踪.jpg (24.71 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
再切到dede中
跟进去,发现直接就出来了看到的弹窗字串了:
[Asm] 纯文本查看 复制代码* Possible String Reference to: '没有查找到加密狗,可能原因:1、加密
| 狗不存在 2、不是车牌识别系统加密?
| ?
|
00659C2F BAA49D6500 mov edx, $00659DA4
00659C34 A184589300 mov eax, dword ptr [$00935884]
* Reference to : TspSkinMessage._PROC_0056ECAC()
|
00659C39 E86E50F1FF call 0056ECAC
00659C3E E94E010000 jmp 00659D91
00659C43 83FB01 cmp ebx, +$01
00659C46 750A jnz 00659C52
00659C48 6A01 push $01
00659C4A FF1588589300 call dword ptr [$00935888]
看里面的函数名为TspSkinMessage,说明这个只是一个弹窗,检测逻辑会在这个前面不远,
再到IDA中看
在这个call之前的调用
06IDA找逻辑.jpg (19.53 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
回到dbg中, CODE:008AF4F7 jz short loc_8AF542 ; 将这里的jz 改为jnz
Tips: olldbg中je,等价于jz, jne = jnz
07OD修改.jpg (3.59 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
再次点登录,提示
“登录用户名不能为空,请重新输入!”
说明已经跳过加密狗了,
再次输入用户名密码,直接就进去了,
后续就是导出了,[我也不懂怎么导出,就这样在olldbg中运行吧,^~^].
哎,一点挑战就没有....刹果
三.还没有完呢
登录进去后,点在线监控,又弹出了 “没有查找到加密狗,可能原因:1、加密狗不存在 2、不是车牌识别系统加密” 这个窗口,
08抓抓2.jpg (60.59 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
有了前面的经验,想来大差不差
1.直接在IDA中 进入 00659C0C sub_659C0C proc near 模块
右键, 外部引用图表到...
在引用表中,找到当前弹窗的引用路径为 _TMain_Frm_CrglBtnClick  _TMain_Frm_M31Click  sub_659C0C
09IDA来源.jpg (20.41 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
2.在IDA中 sub_659C0C 右键,邻近浏览器,找到 _TMain_Frm_M31Click ,并转到图表视图,
找到跳转到 CODE:00914480 call sub_659C0C 的前一句 ,
10IDA逻辑2.jpg (33.04 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
根据前面的经验,
将 CODE:0091447E jz short loc_9144D8 改为 jnz
然后再次点在线监控, 就可以进入了...
不过在上面的引用视图中,一共有4个引用到sub_659C0C,已经处理了2个 ,还有2个引用,也一并查看下:
IssueBtnClick , M21Click , 在dede中找窗口,中的这个事件,定位到窗口的按钮,实际窗口中操作时,并没有弹出这个,就不处理了
剩下的操作, 又到 不会的步骤了: [我也不懂怎么导出,就这样在olldbg中运行吧,^~^].
四,又有情况了
在其它电脑打开测试时,还是会弹这个,哎,有完没完呢,
直接在od中锁定00659C0C地址,看引用,将引用前的跳转指令都反下.
11OD所有引用.jpg (12.07 KB, 下载次数: 0)
下载附件
2024-10-31 16:03 上传
1.将 7C 0D jl short CPSB.00873E1A 中 jl改为jnl (jge)
[Asm] 纯文本查看 复制代码00873E08 . 83F8 0A cmp eax,0xA
00873E0B 7D 0D jl short CPSB.00873E1A
00873E0D . E8 FA5DDEFF call CPSB.00659C0C
2.将0091158F 7C 09 jl short CPSB.0091159A 中 jl改为jnl (jge)
[Asm] 纯文本查看 复制代码0091158C 83F8 0A cmp eax,0xA
0091158F 7C 09 jl short CPSB.0091159A
00911591 E8 7686D4FF call CPSB.00659C0C
再次测试,就不再弹出加密狗窗口了.
五,结束.
这个软件,有很多版本,我也有很多匹配的加密狗,都是购买设备时赠送的,
写这个只是纯属研究.文章只提供思路,无成品流出.
话说,针对这样的程序,我们应该怎么保护下呢?是不是要把核心算法写在加密狗内,
才能即始绕过了加密狗,只会得到一个错误的结果,导致软件失效.