lkou 发表于 2011-7-9 14:00

佳宜系列软件完整破解分析(追码+1字节搞定暗桩)

本帖最后由 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:
005E94FD   .E8 7AB7E1FF   CALL JxcAcces.00404C7C
005E9502   .8D55 DC       LEA EDX,DWORD PTR SS:
005E9505   .8B45 FC       MOV EAX,DWORD PTR SS:
005E9508   .8B80 FC020000 MOV EAX,DWORD PTR DS:
005E950E   .E8 8554E6FF   CALL JxcAcces.0044E998
005E9513   .8B45 DC       MOV EAX,DWORD PTR SS:
005E9516   .8D55 E0       LEA EDX,DWORD PTR SS:
005E9519   .E8 5E01E2FF   CALL JxcAcces.0040967C
005E951E   .8B45 E0       MOV EAX,DWORD PTR SS:
005E9521   .8B55 F8       MOV EDX,DWORD PTR SS:
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:
我们直接在005E94F8下断点,运行软件,随意输入注册码,这时候就可以在寄存器的EAX里面看到真码了
使用真码注册成功后,再次运行软件,依次进入 采购管理--采购入库--设置,这时候会提示:对不起,此功能只有注册用户才具有!
这就是所谓的暗桩了

再查找字符串 对不起,此功能只有注册用户才具有

00604DB9|.68 474E6000   PUSH JxcAcces.00604E47
00604DBE|.64:FF30       PUSH DWORD PTR FS:
00604DC1|.64:8920       MOV DWORD PTR FS:,ESP
00604DC4|.A1 B4537200   MOV EAX,DWORD PTR DS:            ;dIr
00604DC9|.8038 00       CMP BYTE PTR DS:,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:
另外你也可以查找 单据总数已超过200张,保存失败,请与作者联系! 只能保存200条数据,晕~

0061B4F3   .68 04BF6100   PUSH JxcAcces.0061BF04
0061B4F8   .64:FF30       PUSH DWORD PTR FS:
0061B4FB   .64:8920       MOV DWORD PTR FS:,ESP
0061B4FE   .A1 B4537200   MOV EAX,DWORD PTR DS:            ;dIr
0061B503   .8038 00       CMP BYTE PTR DS:,0
0061B506   .75 29         JNZ SHORT JxcAcces.0061B531
0061B508   .A1 CC577200   MOV EAX,DWORD PTR DS:
0061B50D   .8B00          MOV EAX,DWORD PTR DS:
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:

通过这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:
MOV BYTE PTR DS:,1

By Lkou 2011.07.09

nofriend 发表于 2011-7-9 14:05

膜拜扣牛,搞个AV吧。

297044530 发表于 2011-7-9 14:09

恩呢 大牛 做个视频比较直观啊 ~~

ie765 发表于 2011-7-9 14:17

膜拜 中哎 没办法

tianyasiqing 发表于 2011-7-9 14:27

不懂,学习了!

Smallhorse 发表于 2011-7-9 14:51

多谢楼主,终于知道了!非常感谢!!

ayayapsb 发表于 2011-7-9 15:15

SF?哇哈哈!能用在DNF里就好啦。 辛苦了

yuanjie221 发表于 2011-7-9 15:27

直接大牛做AV

geography 发表于 2011-7-9 17:37

支持一下分析的很详细!
看的也很舒服!

fhch6 发表于 2011-7-10 06:51

不错的教程,学习了。
页: [1] 2 3 4
查看完整版本: 佳宜系列软件完整破解分析(追码+1字节搞定暗桩)