记一个加密dog的验证绕过

查看 63|回复 9
作者:lang1yd   
一.需求:
加密狗验证绕过
没有插入加密狗时,打开软件点登录后,提示:
“没有查找到加密狗,可能原因: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
再次测试,就不再弹出加密狗窗口了.
五,结束.
这个软件,有很多版本,我也有很多匹配的加密狗,都是购买设备时赠送的,
写这个只是纯属研究.文章只提供思路,无成品流出.
话说,针对这样的程序,我们应该怎么保护下呢?是不是要把核心算法写在加密狗内,
才能即始绕过了加密狗,只会得到一个错误的结果,导致软件失效.

下载次数, 加密狗

lang1yd
OP
  


weqweq12388 发表于 2024-11-1 15:42
楼主能分享那个获取窗口的工具吗

抓抓
sgh2zlx   

非常好,学习了
xixicoco   

学习了,如何把狗变成坤
AnAn520oving   

可以可以,正好最近想搞一下绕过专业课上用的软件的狗
hawlei   

学习中。看看。。。。。。。。。。
dhsfb   

感谢楼主分享,学习过程中……
fub8   

学习中。看看。。。。。。
weqweq12388   

楼主能分享那个获取窗口的工具吗
MusiQCQ   

学习了学习了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部