好友
阅读权限30
听众
最后登录1970-1-1
|
无闻无问
发表于 2021-10-13 16:09
好久没有发帖了,今天出来冒个泡吧……
分享一下成功破解的二个软件记录。初级难度,希望对想学破解,又想找东西练手的童鞋,有些启示。不当之处,请海涵……
一、据说很牛的文本软件(官方报价:$99USD)
破解前:
破解开始:
官方下载最新版x64安装,上x64dbg。
运行时有异常,不管它,忽略异常继续ctrl+alt+shift+f9
本次分析基址:000000013FD30000
找切入点,方法很多,比如下MessageBoxW,这里找字符串,在“帮助”菜单下的“关于”中,未注册会有“Unregistered”的提示。
在内存中搜索字符串,ASCII码,找到后,下一个字节的硬件访问断点……
000000014047735B 55 6E 72 65 67 69 73 74 65 72 65 64 00 64 72 61 Unregistered.dra
000000014047736B 77 5F 63 65 6E 74 65 72 65 64 00 6F 72 61 6E 67 w_centered.orang
然后,单击“帮助”菜单中的“关于”,就会断下,在堆栈中回溯,约第3个较长的返回到跟随过去……
000000013FD35A18 | 48:8D0D 3C197400 | lea rcx,qword ptr ds:[14047735B] | 000000014047735B:"Unregistered"
000000013FD35A1F | 48:8D95 08020000 | lea rdx,qword ptr ss:[rbp+208] |
000000013FD35A26 | 48:890A | mov qword ptr ds:[rdx],rcx | rdx:"Unregistered"
000000013FD35A29 | 48:8D0D 37197400 | lea rcx,qword ptr ds:[140477367] |
000000013FD35A30 | 48:894A 08 | mov qword ptr ds:[rdx+8],rcx | rdx+8:"ered"
000000013FD35A34 | 48:8985 B8020000 | mov qword ptr ss:[rbp+2B8],rax |
000000013FD35A3B | 48:89C1 | mov rcx,rax |
000000013FD35A3E | E8 03E51700 | call sublime_text.13FEB3F46 | 它就是出现字符串Unregistered的call
找上方跳过它的跳转:
000000013FD35882 | C74424 20 01000000 | mov dword ptr ss:[rsp+20],1 |
000000013FD3588A | 4C:89F1 | mov rcx,r14 |
000000013FD3588D | 48:89FA | mov rdx,rdi | rdx:"Unregistered"
000000013FD35890 | 45:31C0 | xor r8d,r8d |
000000013FD35893 | 45:31C9 | xor r9d,r9d |
000000013FD35896 | E8 49381700 | call sublime_text.13FEA90E4 |
000000013FD3589B | 803E 00 | cmp byte ptr ds:[rsi],0 | 这个[rsi]中的值就是关键值了
000000013FD3589E | 0F84 6A010000 | je sublime_text.13FD35A0E | 关键跳了
禁用所有断点,下000000013FD3589B处的断点,再次单击“帮助”菜单中的“关于”,断下后,看它的地址:
byte ptr ds:[rsi]=[sublime_text.00000001405FAFB8]=0
复制这个地址,右键“搜索范围”--当前模块--常量,输入常量搜索:00000001405FAFB8
000000013FD36823 lea rax,qword ptr ds:[1405FAFB8]
000000013FDD4D1E lea rcx,qword ptr ds:[1405FAFB8]
000000013FDD6C3B lea rcx,qword ptr ds:[1405FAFB8]
000000013FDD7508 mov byte ptr ds:[1405FAFB8],al
找到几个,只关心赋值的那个,跟随过去:
000000013FDD74FA | 48:8B0CCA | mov rcx,qword ptr ds:[rdx+rcx*8] |
000000013FDD74FE | 3B81 04000000 | cmp eax,dword ptr ds:[rcx+4] |
000000013FDD7504 | 7F 51 | jg sublime_text.13FDD7557 |
000000013FDD7506 | 31C0 | xor eax,eax |
000000013FDD7508 | 8805 AA3A8200 | mov byte ptr ds:[1405FAFB8],al | 关键赋值了
000000013FDD750E | 48:8325 A63A8200 00 | and qword ptr ds:[1405FAFBC],0 |
在此句下个断点,将其它断点禁用 000000013FDD7506 | 31C0 | xor eax,eax
重新运行,会发现,没有到入口点,就断下了,说明什么?
应该是将验证算法搞在TLS中了,有兴趣的可跟一下……
爆破比较简单,将xor eax,eax 这一句nop掉,[1405FAFB8]这个值指针保存的值不为0即可,当然还有有其它修改方法………………
000000013FDD7506 | 31C0 | xor eax,eax | 将此句nop即可,当然还有其它改法
000000013FDD7508 | 8805 AA3A8200 | mov byte ptr ds:[1405FAFB8],al |
成功截图产:
二、一款很不错的护眼软件(官方报价:39.9(终身) 14.90(每年) 1.9(每月))
版本:2.1.7.0
OD就行,吾爱的就不错……
激活前,可试用6天,有激活选项。
这个软件是重启验证,所以搞定菜单中的注册并没什么用……
搞定菜单中的激活:
这是一个挑战,消息断点,GetWindowTextA/W,GetDlgItemText等断点都无效,spy++连控件的信息都抓不到…………
有点恶心……
没法,错误的注册码有提示,只有下提示字符串的硬件断点有作用……
因为是重启验证,所以搞定菜单中的激活没有作用,故这里就略过我走过的弯路…………
如果有朋友需要研究一下如何解决菜单中的”验证“,可尝试下错误提示的硬断可跟到关键位置。
再说说重启验证。要验证,总要提取保存的假码,CreateFile以及注册表那一档档都无所获,猜想可能是,菜单中的激活验证不过关,假码直接没保存本地……
只得另想办法。
既然有时间验证,那就调系统时间……
将日期改小,待小于4天试用期后,会出现提示弹窗,下CreateWindowExW,当主窗加载完,试用到期弹窗出来时,栈回溯可找到试用期比较:
会断下很多次,注意观察,主窗体弹出来后,再断下就是到期提醒的窗体……
堆栈回溯,大约第6个返回到(一个个Enter过去观察代码,留意有可跳过call的跳转)……
往上翻,可找到关键call了……
右键--查找参考--调用目的地址,找出所有全下断……
重新运行程序,在关键call断下的地方,干掉下方的跳转,即可破解……
成功图:
最后说明:
不提供成品,请谅解。
自己动手,丰衣足食……
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|