PC逆向 记一个加密dog的验证绕过

admin 2024年11月13日14:23:05评论85 views字数 3070阅读10分14秒阅读模式

一.需求:
加密狗验证绕过
没有插入加密狗时,打开软件点登录后,提示:
“没有查找到加密狗,可能原因:1、加密狗不存在   2、不是车牌识别系统加密”

PC逆向  记一个加密dog的验证绕过

准备的工具:DEDE,  IDA ,OLLDbg

二.分析:
(一)
检测软件为  Borland Delphi ( 2.0 - 7.0 ) 1992 - borland.com
于是打开软件, 检测登录窗口运行句柄,这里用到很多年前的一个按键精灵的抓抓工具.记下窗口类名TLogin_Frm.

PC逆向  记一个加密dog的验证绕过

(二)
将程序加载到dede和IDA中.
Dede中找到TLogin_Frm窗体,中的登录事件,

PC逆向  记一个加密dog的验证绕过

再到 过程中找到 OkBtnClick的首地址,为008AF484

TLogin_Frm.OkBtnClick             008AF484   55                     push    ebp

在这个过程中大概浏览下,发现有个串:

* Possible String Reference to: '登录用户名不能为空,请重新输入!'|008AF6F9   BA60FB8A00             mov     edx, $008AFB60

测试:打开程序后,程序逻辑是先 检测加密狗,再检测登录名密码,所以这个判断加密狗的是在这个语句之前.
但是这个串前面还有很大一段代码,不好分析,所以一般就将程序加载ida中看逻辑.但是ida中不能显示这个字符串,所以两个结合起来看.
(知道的前辈说下怎么在ida中也能看到dede中类似” * Possible String Reference to: '登录用户名不能为空,请重新输入!'  “的字符串)
在IDA中搜索地址 008AF484 ,找到这个函数:_TLogin_Frm_OkBtnClick

PC逆向  记一个加密dog的验证绕过

在IDA中找到参考字符串的地址008AF6F9所在的块,并添加备注到里面:

CODE:008AF6E7 mov     ax, word_8AFB28CODE:008AF6ED push    eaxCODE:008AF6EE push    0CODE:008AF6F0 mov     eax, ds:off_923E30CODE:008AF6F5 mov     eax, [eax]CODE:008AF6F7 mov     cl, 2CODE:008AF6F9 mov     edx, offset _str_______________492.Text ; '登录用户名不能为空,请重新输入!'CODE:008AF6FE call    sub_56ECACCODE: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

PC逆向  记一个加密dog的验证绕过

再切到dede中
跟进去,发现直接就出来了看到的弹窗字串了:

* Possible String Reference to: '没有查找到加密狗,可能原因:1、加密|                                狗不存在   2、不是车牌识别系统加密?|                                ?|00659C2F   BAA49D6500             mov     edx, $00659DA400659C34   A184589300             mov     eax, dword ptr [$00935884]* Reference to : TspSkinMessage._PROC_0056ECAC()|00659C39   E86E50F1FF             call    0056ECAC00659C3E   E94E010000             jmp     00659D9100659C43   83FB01                 cmp     ebx, +$0100659C46   750A                   jnz     00659C5200659C48   6A01                   push    $0100659C4A   FF1588589300           call    dword ptr [$00935888]

看里面的函数名为TspSkinMessage,说明这个只是一个弹窗,检测逻辑会在这个前面不远,
再到IDA中看
在这个call之前的调用

PC逆向  记一个加密dog的验证绕过

回到dbg中, CODE:008AF4F7 jz      short loc_8AF542 ; 将这里的jz 改为jnz
Tips: olldbg中je,等价于jz,   jne  =  jnz

PC逆向  记一个加密dog的验证绕过

再次点登录,提示
“登录用户名不能为空,请重新输入!”
说明已经跳过加密狗了,
再次输入用户名密码,直接就进去了,
后续就是导出了,[我也不懂怎么导出,就这样在olldbg中运行吧,^~^].
哎,一点挑战就没有....刹果

三.还没有完呢
登录进去后,点在线监控,又弹出了  “没有查找到加密狗,可能原因:1、加密狗不存在   2、不是车牌识别系统加密” 这个窗口,

PC逆向  记一个加密dog的验证绕过

有了前面的经验,想来大差不差
1.直接在IDA中 进入  00659C0C sub_659C0C proc near 模块
右键, 外部引用图表到...
在引用表中,找到当前弹窗的引用路径为  _TMain_Frm_CrglBtnClick   _TMain_Frm_M31Click   sub_659C0C

PC逆向  记一个加密dog的验证绕过

2.在IDA中 sub_659C0C 右键,邻近浏览器,找到 _TMain_Frm_M31Click ,并转到图表视图,
找到跳转到   CODE:00914480 call    sub_659C0C 的前一句 ,

PC逆向  记一个加密dog的验证绕过

根据前面的经验,
将 CODE:0091447E jz      short loc_9144D8 改为 jnz
然后再次点在线监控, 就可以进入了...
不过在上面的引用视图中,一共有4个引用到sub_659C0C,已经处理了2个 ,还有2个引用,也一并查看下:
IssueBtnClick , M21Click  , 在dede中找窗口,中的这个事件,定位到窗口的按钮,实际窗口中操作时,并没有弹出这个,就不处理了
剩下的操作, 又到 不会的步骤了: [我也不懂怎么导出,就这样在olldbg中运行吧,^~^].

四,又有情况了
在其它电脑打开测试时,还是会弹这个,哎,有完没完呢,
直接在od中锁定00659C0C地址,看引用,将引用前的跳转指令都反下.

PC逆向  记一个加密dog的验证绕过

1.7C 0D         jl short CPSB.00873E1A  中 jl改为jnl (jge)
00873E08   .  83F8 0A       cmp eax,0xA00873E0B      7D 0D         jl short CPSB.00873E1A00873E0D   .  E8 FA5DDEFF   call CPSB.00659C0C

2.将0091158F  7C 09         jl short CPSB.0091159A 中 jl改为jnl (jge)

0091158C   83F8 0A       cmp eax,0xA0091158F   7C 09         jl short CPSB.0091159A00911591   E8 7686D4FF   call CPSB.00659C0C

再次测试,就不再弹出加密狗窗口了.

五,结束.
这个软件,有很多版本,我也有很多匹配的加密狗,都是购买设备时赠送的,
写这个只是纯属研究.文章只提供思路,无成品流出.
话说,针对这样的程序,我们应该怎么保护下呢?是不是要把核心算法写在加密狗内,
才能即始绕过了加密狗,只会得到一个错误的结果,导致软件失效.

原文始发于微信公众号(逆向有你):PC逆向 -- 记一个加密dog的验证绕过

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月13日14:23:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PC逆向 记一个加密dog的验证绕过https://cn-sec.com/archives/3391303.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息