首页
社区
课程
招聘
[原创]破解共享软件《Windows瑞士军刀》
发表于: 2011-4-7 16:07 9748

[原创]破解共享软件《Windows瑞士军刀》

2011-4-7 16:07
9748
作者:yulongying
声明:这篇文章仅仅是破解学习交流使用如果用在不法商业,责任由不法使用者承担(反正就是与我无关)
使用工具:process monitor+od
最近几天都在逆向VB的程序 由于还是菜鸟阶段 VB逆向出来的程序 看的真是要命,在破解过程中也是连蒙带猜的,昨天破解了一个叫鼠标点击精灵V 3.9.108的共享软件,今天刚刚破解了一个叫《Windows瑞士军刀》的软件,原理都是一样的也就是其中的算法不一样:
在程序启动的时候读取注册表的注册码放的地方,如果读取的注册码经过验证算法验证失败就是未注册版 如果验证成功也就是注册版的了。所以即使在你启动程序后点击注册按钮注册这段代码里面爆破,也是无济于事。因为启动的时候还是会验证的,所以只在启动的验证的时候爆破了 就达到了真正破解了。

破解过程我大概说以下要点,就不那么详细了,因为我自己也都是连蒙带猜的。主要VB的参数很少是原始类型,都是一些不知道的结构体,所以对我这样的新手来说真的很痛苦 哈哈
首先用Process monitor监控下程序启动读取注册表的位置在这里:
15:25:47.9078889        WindowsSAK.exe        1968        RegQueryValue        HKCU\Software\WindowsSAK\CONFIG\SN        SUCCESS        Type: REG_SZ, Length: 72, Data: 123

注册码就是保存在这里了。RegQueryValue        HKCU\Software\WindowsSAK\CONFIG\SN
然后在所有的RegQueryValue 函数都设置条件断点有
RegQueryValueExA RegQueryValueExW RegQueryValueW RegQueryValueA

ansi版本的函数就设置STRING[[esp+8]]=="SN"
unicode版本的函数就设置UNICODE[[esp+8]]=="SN"
这样就断点了下来了
0012FB78   004B4468        /CALL 到 RegQueryValueExA 来自 WindowsS.004B4463
0012FB7C   00000104        |hKey = 104
0012FB80   0015CEF4        |ValueName = "SN"
0012FB84   00000000        |Reserved = NULL
0012FB88   0012FBB0        |pValueType = 0012FBB0
0012FB8C   0012FBAC        |Buffer = 0012FBAC
0012FB90   0012FBFC        \pBufSize = 0012FBFC
然后alt+F9回到用领空
004B445E   .  8B55 DC                 mov     edx, dword ptr ss:[ebp-24]
004B4461   .  50                      push    eax
004B4462   .  52                      push    edx
004B4463   .  E8 7CF4F5FF             call    WindowsS.004138E4                ;  读取注册表函数
004B4468   .  8945 90                 mov     dword ptr ss:[ebp-70], eax;alt+F9回到这里我也在摸索中发现本层数似乎没有关键跳转

于是回到上层函数有一句比较函数就是关键句了
0048AFE1   .  8D55 80                 lea     edx, dword ptr ss:[ebp-80]
0048AFE4   .  52                      push    edx                              ; /var18
0048AFE5   .  8D45 B0                 lea     eax, dword ptr ss:[ebp-50]       ; |
0048AFE8   .  50                      push    eax                              ; |var28
0048AFE9   .  FF15 4C114000           call    near dword ptr ds:[<&MSVBVM60.__>; \关键!!!:字符串比较
0048AFEF   .  8D4D E0                 lea     ecx, dword ptr ss:[ebp-20]
0048AFF2      8BF0                    mov     esi, eax                         ;  eax == 0
0048AFF4      FFD3                    call    near ebx
0048AFF6      8D4D B0                 lea     ecx, dword ptr ss:[ebp-50]
0048AFF9      51                      push    ecx

比较返回的结果是0 代表不匹配
所以将 mov     esi, eax   这句改为  mov     esi, 1 但是这样所占字节数比较大 会把后面的ea     ecx, dword ptr ss:[ebp-50] 覆盖 所以我改成这样了 lea esi, [eax+1]
这样esi=0+1=1了,这里请教下大牛们是不是有更好的方法呢?
保存下文件 运行出来就是注册版的了。


下载地址是http://www.exusoft.com/software/wsasetupsc.rar

跟踪过程你还会发现很多地方有明码。我的是:
0012F9F0  0015D42C  UNICODE "cdf08c07044aee84a9ae02e46bc4f7f2"
可能不同的机器不一样,因为用户名我估计是这个程序用根据mac地址等东东算出来来了。
不允许更改!

如果有什么不对之处还请多多抛砖,我也是菜鸟,抛砖也有助我成长哈。。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
push    edx                              ; /var18
0048AFE5   .  8D45 B0                 lea     eax, dword ptr ss:[ebp-50]       ; |
0048AFE8   .  50                      push    eax                              ; |var28
0048AFE9   .  FF15 4C114000           call    near dword ptr ds:[<&MSVBVM60.__>; \关键!!!:字符串比较

这几句直接改为 mov eax,1 看行不行。。。
2011-4-7 23:49
0
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
对了,要到call里看看是在哪平衡堆栈。。。感觉按上面的应该可以的。
2011-4-7 23:50
0
雪    币: 118
活跃值: (55)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
嗯 也可以的。。
2011-4-12 11:30
0
游客
登录 | 注册 方可回帖
返回
//