本帖最后由 lkou 于 2011-7-9 15:11 编辑
佳宜系列软件完整破解分析(追码+1字节搞定暗桩)
本文以 佳宜进销存管理软件 V4.27 (企业版) 为例
先来追码,佳宜的注册系统只是一个去除时间限制而已
查找字符串 系统注册成功,欢迎你使用本软件!
向上来到
005E94F2 . 50 PUSH EAX
005E94F3 . E8 20E2FEFF CALL <JMP.&PunUnitLib.GetRegPass>
005E94F8 . 8BD0 MOV EDX,EAX
005E94FA . 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
005E94FD . E8 7AB7E1FF CALL JxcAcces.00404C7C
005E9502 . 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
005E9505 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
005E9508 . 8B80 FC020000 MOV EAX,DWORD PTR DS:[EAX+2FC]
005E950E . E8 8554E6FF CALL JxcAcces.0044E998
005E9513 . 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
005E9516 . 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
005E9519 . E8 5E01E2FF CALL JxcAcces.0040967C
005E951E . 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
005E9521 . 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
005E9524 . E8 5FB9E1FF CALL JxcAcces.00404E88
005E9529 . 0F85 FE000000 JNZ JxcAcces.005E962D 关键跳,注册码正确就不跳
005E952F . 33C0 XOR EAX,EAX
005E9531 . 55 PUSH EBP
005E9532 . 68 19965E00 PUSH JxcAcces.005E9619
005E9537 . 64:FF30 PUSH DWORD PTR FS:[EAX]
我们直接在005E94F8下断点,运行软件,随意输入注册码,这时候就可以在寄存器的EAX里面看到真码了
使用真码注册成功后,再次运行软件,依次进入 采购管理--采购入库--设置,这时候会提示:对不起,此功能只有注册用户才具有!
这就是所谓的暗桩了
再查找字符串 对不起,此功能只有注册用户才具有
00604DB9 |. 68 474E6000 PUSH JxcAcces.00604E47
00604DBE |. 64:FF30 PUSH DWORD PTR FS:[EAX]
00604DC1 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00604DC4 |. A1 B4537200 MOV EAX,DWORD PTR DS:[7253B4] ; dIr
00604DC9 |. 8038 00 CMP BYTE PTR DS:[EAX],0
00604DCC |. 75 0E JNZ SHORT JxcAcces.00604DDC
00604DCE |. 6A 00 PUSH 0
00604DD0 |. 68 544E6000 PUSH JxcAcces.00604E54 ; 对不起,此功能只有注册用户才具有!
00604DD5 |. E8 0E29FDFF CALL <JMP.&PunUnitLib.ShowMess>
00604DDA |. EB 50 JMP SHORT JxcAcces.00604E2C
00604DDC |> 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
另外你也可以查找 单据总数已超过200张,保存失败,请与作者联系! 只能保存200条数据,晕~
0061B4F3 . 68 04BF6100 PUSH JxcAcces.0061BF04
0061B4F8 . 64:FF30 PUSH DWORD PTR FS:[EAX]
0061B4FB . 64:8920 MOV DWORD PTR FS:[EAX],ESP
0061B4FE . A1 B4537200 MOV EAX,DWORD PTR DS:[7253B4] ; dIr
0061B503 . 8038 00 CMP BYTE PTR DS:[EAX],0
0061B506 . 75 29 JNZ SHORT JxcAcces.0061B531
0061B508 . A1 CC577200 MOV EAX,DWORD PTR DS:[7257CC]
0061B50D . 8B00 MOV EAX,DWORD PTR DS:[EAX]
0061B50F . BA 20BF6100 MOV EDX,JxcAcces.0061BF20 ; select count(*) from depotM
0061B514 . E8 2F7EFCFF CALL JxcAcces.005E3348
0061B519 . 3D C8000000 CMP EAX,0C8 这个0C8转换为10进制就是200
0061B51E . 7E 11 JLE SHORT JxcAcces.0061B531
0061B520 . 6A 03 PUSH 3
0061B522 . 68 3CBF6100 PUSH JxcAcces.0061BF3C ; 单据总数已超过200张,保存失败,请与作者联系!
0061B527 . E8 BCC1FBFF CALL <JMP.&PunUnitLib.ShowMess>
0061B52C . E9 D8070000 JMP JxcAcces.0061BD09
0061B531 > 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
通过这2段,我们可以看到他是从7253B4取个地址,使用这个地址的值与0做减法,并且使用减法后的结果修改标志位
JNZ就是根据标志位如果为0的话,就不跳,如果为1就跳
所以,我们必须要让7253B4里面的地址的值为1
下面开始整这个暗桩
先给7253B4下访问断点,运行程序,会发现没有断下来,也就是说程序本身没有对这个地址做校验
那么我们就人为的给这个地址赐值1
有2个方法,一个是自己补代码,这个实际操作比较复杂,所以比较适合对付加过强壳的程序和内存地址不固定的程序
像这个内存地址是固定的,而且没壳,我们就直接修改EXE文件来达到目的
先在OD定位到7253B4,上面我们已经看到了,它是DWORD,有4位,从7253B4~7253B6就是了,值是64497200,顺一下得到00724964
再次定位到00724964,然后右键单击定位到的这行,选择查看--可执行文件,可以看到00323D64,这个就是实际在exe里面的位置了
使用UltraEdit打开exe文件,ctrl+g,输入0x00323D64,转到这个地址后,把00改为01,保存,再运行程序
依次进入 采购管理--采购入库--设置,怎么样,不会提示你注册用户了吧~哈哈
1字节搞定暗桩!
如果要自己补代码的话,需要找个合适的位置+合适的时机,补入下列代码即可
MOV EAX,DWORD PTR DS:[7253B4]
MOV BYTE PTR DS:[EAX],1
By Lkou[LCG] 2011.07.09
|