纠结于写还是不写,发还是不发。。。
唉。。。
昨天想看“盗梦空间”,习惯用PPS,PPS是基于P2P的一款网络电视,可以看电影看电视。
但是谁知“盗梦空间”此等片子居然需要 VIP 用户,不禁内心大呼shit。。。
练调试也有两年了,今天想弄弄它。看它的VIP FILM
只用OD,只会用OD,于是就得载入下断。。
在哪里下断? 这是关键。
观察到:如果不是VIP用户看VIP的片子,点击播放按钮后会弹出以对话框:
 
于是知道必须拿它下手。。。各种对话框API下断。。。
最后在 CreateDialogIndirectParamW 断下
回溯之~~~~ 这里是个艰苦的过程慢慢找那样一个关键的跳转,可以绕过调用此对话框的CALL。
找起来蛮慢,代码又多,于是在好几层CALL的上方设置了一个断点,此时应该是比较高的层,VIP判断应该就在内部,找一个非VIP的片子,点播放,在刚才设的断点断下,单步,记录下每个关键跳转 是否 跳。再找一个VIP片子同样断下,单步,顺着刚才非VIP片子的路线走,当你发现哪个跳转不一致了。。哈哈哈 恭喜!!! 十有八九就是关键跳转!!!如果全一致,那就要试试将这个上层断点再设置到比较上层的子程序中。
这样很容易找到了这段代码, 这段代码位于 PowerList.ocx 中 :

代码:
;PowerList.ocx
200B378B    E8 351D0300     call PowerLis.200E54C5
200B3790    8BF8            mov edi,eax
200B3792    33DB            xor ebx,ebx
200B3794    3BFB            cmp edi,ebx
200B3796  ^ 74 E7           je short PowerLis.200B377F
200B3798    837F 40 01      cmp dword ptr ds:[edi+40],1
200B379C    895D F0         mov dword ptr ss:[ebp-10],ebx
;哦吼~~ 下面这个就是关键跳转
200B379F    0F82 42020000   jb PowerLis.200B39E7
200B37A5    8B47 50         mov eax,dword ptr ds:[edi+50]
当不是VIP片子时,此处跳转跳走,是VIP片子时发现没有跳。
尝试着将此处 jb 改为 jmp 然后播放某VIP片子,结果是对话框没弹出,但是还是有如下字迹,看来还没成功:

再回头看这个 cmp,可见此时  [edi+40] 之中之内容为十分关键之信息!!!
嗯,当是VIP片子时,此内存单元为 1,非VIP片子时为0 .
于是更改为 0 ,播放 盗梦空间, ~~~~~~~~~~~~~~~~~~~
God, 成功了。。。。。。。。看看幸福来临了。。
(PS:说的容易,其实我是调了好久好久才找到的
再想一下:嗯,PPS应该是维护了一个FILM结构,这个结构 0x40 偏移处存储是否此film需要 VIP 权限才可播放的信息。
我们要做的就是让VIP片的这个Member永远为Zero
那么接下来是就是补丁了。
怎么补?
写一个很简单。。写好也不容易
可以从 cmp dword ptr ds:[edi+40],1 这里开始patch:
代码:
xor eax,eax
mov dword ptr [edi+0x40], eax
mov dword ptr [ebp-0x10],ebx
mov eax, 0x200B39E7
jmp eax
嗯。。起初我补进去的就是这些代码,jb永远让它跳。
可是这里用了 硬编码  0x200B39E7 ,一旦更新,就是说 PowerList.ocx 变化,那么补丁难以成功。因为直接寻址的地址变了,不知跳到哪里了.
于是又思考,果然有发现:  (ASM之美尽现)
cmp dword ptr ds:[edi+40],1 这一条指令一共4字节:
那么可以这样patch:
代码:
mov dword ptr [edi+0x40], ebx
stc
第一条指令:利用 上文 ebx为0 ,上面 xor ebx,ebx 用来测试返回的值是否为0.
这个ebx恰好可以用作我们清零VIPMem,这条指令3个字节。
还有一条是 : stc , 一个字节。 它是将 标志位 Carry 位 置位,这样这两句指令恰好覆盖掉 cmp dword ptr ds:[edi+40],1  这一条指令。
stc的置位是为了使下面的 jb XXXXX 能够永远跳转!!! 哈哈哈~~~ 真是太完美
恰好4字节,完成所有任务。
如果不这样做,恐怕patch代码要有重定位功能以适应jb的那个跳转。。。这个天然的4字节让我不禁感叹汇编之美。。尤其是 stc 这条指令。(头一次用,但以后不会忘了)
嗯。。。至此 你可以去看VIP片了。

附件说明:
附件是2.5KB的补丁程序,原理如上文所述,补丁的是PowerList.ocx文件.
注意:补丁需要放在 PPS 安装目录内执行才可以。

补充:360高风险我的附件。。无视之
Author: Vsbat

注意:本补丁对于2.7.0.1326 版本以后的程序是不行的。因为相应代码编译优化后程序有出入。
      但是 那个cmp dword ptr ds:[edi+0x40], XXXXXX 的关键比较还在~~~ 晚来的童鞋自己动手丰衣足食吧~~~;)
      2011/11/11 :



/////////////////////  The Newest  2012/3/13

将最新的附件"看VIP 跳过广告.rar "中两个库文件覆盖原来文件即可,不用补丁,就是覆盖,
更新也无所谓,就是覆盖,oh yeah!
上传的附件 PPS_VIP_Win.rar
看VIP 跳过广告.rar