前段时间公司的项目中用到了调整flash音量的功能,没有找到sdk,去http://www.adobe.com/ 申请sdk没有回音,所以只好自己破解了。
我让公司的美工做了个可调节音量的flash文件,上面有3个button,一个25%,一个50%,一个75%。
选用工具:FPE,IDA。
改变音量,用FPE搜索,再改变,在搜索,基本上就找到地址了,不过这个地址并不是静态存储的,而是动态的,对第二个Flash9::IShockwaveFlash是没有作用的,所以我想应该可以通过Flash9::IShockwaveFlash指针计算出偏移量求得。
于是使用IDA用调试模式启动自己写的一个调用flash.ocx的程序,然后把fpe搜索到的地址上加上断点,这样如果这些数据被访问的话就会发生中断,然后我就可以跟踪相关代码,最后终于找到了跳转方法,是经过2次偏移和一次跳转拿到音量地址的,代码如下:
// param pv pointer to Flash9::IShockwaveFlash
// param val the volumn value range: 0-100
inline void modifyvolumn(void *pv, unsigned int val)
{
__asm
{
push eax
push ebx
mov ebx, pv
mov eax, [ebx+78h]
mov ebx, eax
mov eax, val
mov [ebx + 678h], eax
pop ebx
pop eax
}
}
先偏移78h寻址,然后偏移678h寻址就ok了
上面的函数经过测试,是可以直接使用的
这个只针对flash9b.ocx,没有对其他版本的flash进行过测试,如果有新版flash的控件推出,破解过的朋友请把新的偏移告诉大家,谢谢
近段时间忙着design,所以这篇文章一直没有放上,最近有朋友问起,所以抽出点时间来放到blog上吧,感谢朋友的关注
我让公司的美工做了个可调节音量的flash文件,上面有3个button,一个25%,一个50%,一个75%。
选用工具:FPE,IDA。
改变音量,用FPE搜索,再改变,在搜索,基本上就找到地址了,不过这个地址并不是静态存储的,而是动态的,对第二个Flash9::IShockwaveFlash是没有作用的,所以我想应该可以通过Flash9::IShockwaveFlash指针计算出偏移量求得。
于是使用IDA用调试模式启动自己写的一个调用flash.ocx的程序,然后把fpe搜索到的地址上加上断点,这样如果这些数据被访问的话就会发生中断,然后我就可以跟踪相关代码,最后终于找到了跳转方法,是经过2次偏移和一次跳转拿到音量地址的,代码如下:
// param pv pointer to Flash9::IShockwaveFlash
// param val the volumn value range: 0-100
inline void modifyvolumn(void *pv, unsigned int val)
{
__asm
{
push eax
push ebx
mov ebx, pv
mov eax, [ebx+78h]
mov ebx, eax
mov eax, val
mov [ebx + 678h], eax
pop ebx
pop eax
}
}
先偏移78h寻址,然后偏移678h寻址就ok了
上面的函数经过测试,是可以直接使用的
这个只针对flash9b.ocx,没有对其他版本的flash进行过测试,如果有新版flash的控件推出,破解过的朋友请把新的偏移告诉大家,谢谢
近段时间忙着design,所以这篇文章一直没有放上,最近有朋友问起,所以抽出点时间来放到blog上吧,感谢朋友的关注