首页
社区
课程
招聘
[旧帖] [求助]incredibuild3_10破解 0.00雪花
发表于: 2008-3-18 08:43 3009

[旧帖] [求助]incredibuild3_10破解 0.00雪花

2008-3-18 08:43
3009
关于incredibuild的破解分析

  经过实验分析出该软件验证方法为:当软件客户端第一次运行时从服务端所在机器取得系统日期然后存于客户端所在机器上(经分析位置在注册表中有4项,在其他地方一定还有,比如某个文件或者某个扇区)

完全破解方法:1 找到代码中计算时间差的地方,跳到正确方向。
      过程:因为它的启动方式为以插件形式随VC启动,没办法直接加载加载下对话框断点,所以只能单独加载。先PEID载入查壳,无壳,为Delphi编写。下断GetLocalTime,断在   7C80A7D4 >  8BFF            mov     edi, edi,F9跟进3次回到应用程序领空,来到调用GetLocalTime的地方向上找,到这一句:
000D61E2  |.  E8 553DF4FF   call    00019F3C
我分析CALL的该过程是取得系统时间并计算差值,但是问题是我跳过了GetLocalTime程序还是可以取得系统时间,所以我猜测可能它的服务进程也有相关作用,对于它的服务进程我现在没有办法。
     

完全破解方法:2 就在000D61E2  |.  E8 553DF4FF   call    00019F3C
这一句之前查看内存地址:0F554C8的内容为”Now”在这一句之后该地址内容为”29”,29即为软件剩余时间,当修改系统时间改变时间差的时候该地址内容也会随着改变,并且总是保证内容是正确的差值(若改变系统时间使时间差大于30天,比如33,则内存中此地址内容为-3)综上分析,我觉得源代码可能是这样:int Temp=(NewTime-StoreTime)                                                                                                                                                                                                                                                                                             
                                        If(Temp>30)
                                         Temp=-Temp%30
                                      If(Temp)可用
                                       else  不可用
地址0f554c8即为变量Temp地址。对此先找到大小合适的文件间隙,改变EIP指针,让程序执行到此的时候先执行我插入的一段指令,然后在跳回。修改后的程序如下:
           
000D61E2    E8 553DF4FF     call    00019F3C
000D61E7    E9 1D6A0100     jmp     000ECC09//转移EIP
000D61EC    90              nop
000D61ED    90              nop
000D61EE    90              nop
000D61EF    8BC6            mov     eax, esi
000D61F1    BA 03000000     mov     edx, 3
000D61F6    E8 FDDFF3FF     call    000141F8

000ECC09    50              push    eax
000ECC0A    B8 20000000     mov     eax, 3230H
000ECC0F    A3 C854F500     mov     dword ptr [F554C8], eax//直接向该地址写入数据20
000ECC14    58              pop     eax
000ECC15    68 C854F500     push    0F554C8                          ; ASCII "29"
000ECC1A    68 C8640D00     push    000D64C8                         ; ASCII " days left"
000ECC1F  ^ E9 CB95FEFF     jmp     000D61EF//恢复EIP
000ECC24    0000            add     byte ptr [eax], al
000ECC26    0000            add     byte ptr [eax], al

经调试运行程序可以正常运行,一段距离内该内存地址内容变为了想要的“20“。
但是弹出对话框还是没有出现剩余20天。出现此问题的原因有二:
第一:是还有其他写内存的位置。(GetLocalTime在程序启动的时候一共调用了三次,没分析出来都是做什么用的)
第二:在这样的环境下用汇编指令直接修改内存内容还有些忽略的地方。(这是我第一次这么干,没想到还真修改成功了,所以我觉得可能是我哪里还有问题)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//