Cadence SPB 17.2 网页重复弹窗BUG修复的技术细节

 Cadence SPB 17.2 网页重复弹窗BUG修复的技术细节

Cadence公司最新的PCB设计EDA软件 Cadence SPB 17.2-2016 发布已经有一段时间了,有很多同学也第一时间下载了Cadence SPB 17.2-2016来尝鲜,老wu也不例外,第一时间将阿狸狗破戒大师更新以支持Cadence SPB 17.2-2016版本。

最近陆续收到反馈,说是运行Cadence SPB 17.2-2016有浏览器一直弹出网页的问题,差不多是每隔一分钟就自动打开一次网页,指向URL地址:“update2.cadence。com/SWUpdate/scc”。

一开始听到这消息,老wu觉得很是奇怪,因为我自己的电脑用着完全没问题呀,我的电脑是官方升级的windows 10专业版,裸奔,安装Cadence SPB 17.2-2016运行了很久都没有任何网页会自动打开。

cadence-spb-17-2-%e7%bd%91%e9%a1%b5%e9%87%8d%e5%a4%8d%e5%bc%b9%e7%aa%97bug%e4%bf%ae%e5%a4%8d%e7%9a%84%e6%8a%80%e6%9c%af%e7%bb%86%e8%8a%82-1 所以,对于在我博客留言询问Cadence SPB 17.2 网页重复弹窗问题的,我一开始没太留意,我都回复说是系统问题,或者等待Cadence的更新补丁。

但是Cadence SPB 17.2的更新补丁已经来到了S004版本了,但是在博客里留言或在微信里咨询Cadence SPB 17.2 网页重复弹窗的同学还是络绎不绝,老wu觉得是时候要抽出时间来帮助Cadence解决这个问题了,坐等官方的补丁不是个办法。

因为老wu裸奔的机子安装spb 17.2 没有网页重复弹窗的问题,不好进行分析,所以要制造这么一个条件,根据网友们的反馈,大致分析了下网友们的系统环境:装有360软件,装有360安全浏览器,装有搜狗浏览器,哎,看来大伙喜欢被绑架啊,O(∩_∩)O~

一开始我安装的360安全卫生和360杀毒,没有发现网页弹窗的问题,然后接着安装360安全浏览器,也没有弹网页,直到安装上了搜狗浏览器,靠,终于可以不断的弹网页了,谢天谢地,O(∩_∩)O~

以老wu多年撸码的经验,初步怀疑是Cadence调用浏览器的功能由于第三方非IE浏览器对操作系统的IE网页功能接口进行了修改,造成Cadence SPB的调用失败。

Cadence SPB 具体调用了什么接口,现在还不得而知,我们需要借用API Monitor这个神器对Capture·exe及Allegro.exe进行监控,查看具体调用了什么API,才能进一步有针对性的修复。

运行“apimonitor-x64.exe”,注意,因为Cadence SPB 17.2 是64为版本,所以需要运行apimonitor-x64这个64位的版本才能监控成功。

cadence-spb-17-2-%e7%bd%91%e9%a1%b5%e9%87%8d%e5%a4%8d%e5%bc%b9%e7%aa%97bug%e4%bf%ae%e5%a4%8d%e7%9a%84%e6%8a%80%e6%9c%af%e7%bb%86%e8%8a%82-2 在Filter里设置对Allegro.exe的所有API调用进行监控,经过一段时间的统计分析后,发现了问题点,即:每次在弹出网页时,allegro都调用了”IWebBrowser2“的相关接口,通过google可以得知,IWebBrowser2就是跟网页浏览有关的COM接口。

通过”apimonitor-x64.exe“对allegro的IWebBrowser2调用api设置断点,在成功进入断点后,选择skip,跳过真实的调用而直接返回”S_OK”状态,发现不再弹出网页咯。?

cadence-spb-17-2-%e7%bd%91%e9%a1%b5%e9%87%8d%e5%a4%8d%e5%bc%b9%e7%aa%97bug%e4%bf%ae%e5%a4%8d%e7%9a%84%e6%8a%80%e6%9c%af%e7%bb%86%e8%8a%82-3 OK,试验成功,解决思路也就有了,cadence spb 17.2 每次弹出网页都会去调用
IWebBrowser2接口,最直接的办法就是HOOK 掉IWebBrowser2相应的API接口,用我们自己的API实现去替换掉原本的IWebBrowser2 API,也就是直接过滤掉IWebBrowser2的API操作,什么都不用做,直接返回”S_OK”状态就可以了,这样就不会去调用系统的网页访问接口,也就不会再弹出网页,实现BUG的修复。俗称API HOOK。

cadence-spb-17-2-%e7%bd%91%e9%a1%b5%e9%87%8d%e5%a4%8d%e5%bc%b9%e7%aa%97bug%e4%bf%ae%e5%a4%8d%e7%9a%84%e6%8a%80%e6%9c%af%e7%bb%86%e8%8a%82-4 API Hook 是什么?API Hook是一种用于改变API执行结果的技术,类似后门的感觉,貌似很吊的样子…其实API HOOK由来已久,貌似从Winsows系统诞生的那时起,就有了API Hook,有人用Hook来制作病毒,也有人用Hook来制作安全防护软件,广告过滤软件等等,连微软自身也在使用HOOK,为了方便HOOK,微软还预留有未公开的API,也就是为了自己某些目的预留的HOOK后门。

说了辣么多,其实HOOK其实就是一项操作系统自带的功能,就看你用于什么目的,如何用了。老wu接触API Hook还是在大学时,主要用来盗取妹纸的QQ,O(∩_∩)O~,~那时的QQ安全性还是比较低的,像在学校机房或者网吧,很好得手,?

现在,我准备用API Hook来阻值Cadence SPB 17.2的网页访问,也就是过滤掉IWebBrowser2接口相关API的访问。

Windows诞生已经几十年了,自从Windows诞生以来就有的API Hook,人们也研究几十年了,已经是很成熟的东西,我们没有必要重新去发明轮子,我们仅仅是要禁止Cadence SPB 17.2弹网页而已,也没必要深入去研究API Hook技术,直接用网上开源的API Hook实现就行了。如果是自己Hook Windows API,相对来说是很简单的事情,网上有很多现成的例子,但是IWebBrowser2是属于COM接口的,要去HOOK COM接口相对来说有些复杂,可以参考这篇HOOK COM API 的文章“http://www.codeproject.com/Articles/153096/Intercepting-Calls-to-COM-Interfaces“

我们知道,但凡要调用COM接口之前,总是需要先调用CoCreateInstance这个API先对COM对象进行初始化,这是一个win32 API,在Ole32.dll里头实现,这个比较容易Hook,就拿它来开刀了,过滤掉CoCreateInstance,直接返回失败的结果,相比后续的IWebBrowser2 COM 接口也就不会进行调用了。

我们需要写一个程序来HOOK Allegro.exe及Capture.exe,由于这两个程序和我们的Hook程序不是在一个进程地址空间中,Windows出于安全考虑,会对不同进程的地址空间进行隔离,也即是说,我们的Hook EXE程序不能够去直接修改Allegro.exe及Capture.exe程序中的API地址,我们需要用到一个叫做“远程线程”的技术,通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间,然后再在远程线程中载入我们精心准备的hook dll文件,在这个dll文件中进行hook api操作,这样就可以到达修改过滤Allegro.exe及Capture.exe的“CoCreateInstance”API 调用的目的。也即:“DLL Injection DLL 注入技术”。

大致的流程图如下:

dll%e6%b3%a8%e5%85%a5%e8%bf%87%e7%a8%8b Dll 注入技术具体可以参考这篇文章:“http://blog.opensecurityresearch.com/2013/01/windows-dll-injection-basics.html“

当我们的Dll注入到Allegro.exe或Capture.exe进程空间后,会首先调用Dll的”DllMain“入口函数,在”DllMain“中,进行“InstallHooks”,

[php]
void InstallHooks()
{

for(size_t i = 0; i < g_FunctionsCount; ++i)
{
if(!GetModuleHandleA(g_Functions[i].FunctionModule))
throw std::runtime_error(“Cannot find the module “);

*g_Functions[i].OriginalFunction = GetProcAddress(GetModuleHandleA(g_Functions[i].FunctionModule), g_Functions[i].FunctionName);

if(*g_Functions[i].OriginalFunction == NULL)
throw std::runtime_error(“Cannot find the function “);

if(!Mhook_SetHook(g_Functions[i].OriginalFunction, g_Functions[i].HookFunction))
throw std::runtime_error(“Cannot set hook on the function “);
}
}
[/php]

这里 ,我们主要hook,CoCreateInstance及CoGetClassObject这两个API,

[php]
struct FunctionInfo
{
char* FunctionModule;
char* FunctionName;
void** OriginalFunction;
void* HookFunction;
};

FunctionInfo g_Functions[] =
{
{“ole32.dll”, “CoCreateInstance”, (void**)&Original::CoCreateInstance, (void*)Hook::CoCreateInstance},
{“ole32.dll”, “CoGetClassObject”, (void**)&Original::CoGetClassObject, (void*)Hook::CoGetClassObject}
};
[/php]

在我们自己实现的CoCreateInstance中,判断CLSID值,如果CLSID只为InternetExplorer的CLSID值:“{0002DF01-0000-0000-C000-000000000046}”,则直接hold住,不返回,这样调用该函数的Allegro.exe或Capture.exe的线程会hold住,但是不用担心,Allegro.exe或Capture.exe是多线程的,访问网页的线程hold住了,并不会影响到主线程的操作,也即我们画原理图或者PCB Layout没有影响。

[php]
const WCHAR CLSID_InternetExplorer[] = TEXT(“{0002DF01-0000-0000-C000-000000000046}”);

HRESULT WINAPI Hook::CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID* ppv)
{
CLSID clsid;

HRESULT WINAPI Hook::CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID* ppv)
{

CLSID clsid;

CLSIDFromString(CLSID_InternetExplorer, &clsid);

if (rclsid == clsid)
{
while (true)
{
Sleep(60 * 1000);
}

return CLASS_E_NOAGGREGATION;
}

return Original::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv);

}

[/php]

当然,我们只是需要能够愉快的拉线,而不必要收到SPB 17.2不断弹出网页的打扰,上面那些代码什么的我们根本不用关心,老wu已经通过阿狸狗破戒大师 2.1.6 版本帮助大家解决了,大家去下载一个,直接点几下鼠标即可修复Cadence SPB 17.2 网页重复弹窗BUG,没必要在这里头浪费绳命。

下载并运行阿狸狗破戒大师

cadence-spb-17-2-%e7%bd%91%e9%a1%b5%e9%87%8d%e5%a4%8d%e5%bc%b9%e7%aa%97bug%e4%bf%ae%e5%a4%8d%e7%9a%84%e6%8a%80%e6%9c%af%e7%bb%86%e8%8a%82-5 双击进入“更多亮点”这个选项

cadence-spb-17-2-%e7%bd%91%e9%a1%b5%e9%87%8d%e5%a4%8d%e5%bc%b9%e7%aa%97bug%e4%bf%ae%e5%a4%8d%e7%9a%84%e6%8a%80%e6%9c%af%e7%bb%86%e8%8a%82-6 双击”SPB 17.2 弹窗BUG修复“这个按钮,打开BUG修复界面

cadence-spb-17-2-%e7%bd%91%e9%a1%b5%e9%87%8d%e5%a4%8d%e5%bc%b9%e7%aa%97bug%e4%bf%ae%e5%a4%8d%e7%9a%84%e6%8a%80%e6%9c%af%e7%bb%86%e8%8a%82-7 阿狸狗破戒大师会自动检测您当前的Cadence SPB 17.2的安装目录,只需鼠标左键轻点那个”开始修复“按钮即可。

然后阿狸狗破戒大师会自动在桌面创建两个快捷方式”Allegro_puppet“及”Capture_puppet“,以后通过这两个快捷方式打开Allegro或者Cpature即可。

好啦,以上就是Cadence SPB 17.2 网页重复弹窗BUG修复的所有技术细节,阿狸狗破戒大师会一如既往,专注于让大伙能够快乐的用Cadence来拉线,这便是老wu的快乐,O(∩_∩)O~

吴川斌

吴川斌

89 Comments

  • 吴老师您好!我使用阿狸狗安装cadence17.2成功,破解也成功,但是重启电脑,又报license错误,查cadence license manager 已经设置为开机自动运行(见附图),我的电脑是win10家庭版。谢谢!

    • 补充说明:我是用阿狸狗破戒大师 完全自动安装的 Cadence SPB OrCAD Allegro 17.2-2016

  • 吴老师您好!我使用阿狸狗安装cadence17.2成功,破解也成功,但是重启电脑,又报license错误,查cadence license manager 已经设置为开机自动运行(见附图)

  • 吴老师: 我使用阿狸狗解决弹窗问题后,打开桌面Capture_puppet后使用大概1分钟后,弹出capture警告弹窗(this application has quit unexpectedly)。

  • 吴老师,我这边使用17.2遇到个问题,还请帮忙看下

  • 吴老师你好 我安装了你的cadence spb 17.2 但是问题不是网页弹窗 而是后台有很多IE程序占用了很多内存 导致cadence老是画着画着卡退,不知道跟这个网页弹窗是不是一回事? 请看图片予以回复 thanks

  • 大佬,我最近安装了SPB17.2,按照上述修复其他两个目前没有问题。
    但是我需要使用Project Manager操作,打开文件Design Entry的时候会弹出浏览器对话框,并且会报错,如图所示。
    前来寻求帮助,求教,拜谢!

    • 哦对了,提示日志记录:Warning: Attribute “CDS_DI_CONTROL_MASK” is not defined. Failed to create “CDS_DI_CONTROL_MASK”

        吴川斌
      • 你是不是没有打过补丁?此问题在 17.2 hotfix 11里得到了修复,在博客网站网盘里下载最新的17.2的补丁打一下就可以了

        • 多谢大佬!!!
          已经恢复可用!!!

  • 吴老师,弹窗是治好了,但是新出现了毛病:测量距离就卡死。描述:点击“尺子”,再点击PCB上的任意地点,出现弹窗,关掉弹窗,软件就卡死了。 win10,64位,17.2版本

    • 弹窗的问题你打官方的最新补丁就可以解决了

  • 我之前正常安装且使用过Cadence16.6版本软件,最近用阿狸狗卸载16.6版本,安装17.2版本Cadence,打补丁成功后,启动OrCAD Capture CIS和PCB Editor还会报错,估计是破解Licese出问题了。但是安装流程全都是用阿狸狗进行的。怎么办呢?报错如下图,已经重新安装过一次,还是这个问题。

    • 话说没见到你的贴图呢 重新用阿里狗破戒大师破解修复也不行吗?

      • 上传的压缩包里有3张图片,阿狸狗再次破解修复也不行。我再补充上传图片

      • 补充图片

      • 补充报错图片

      • 吴老师,我的16.6和这个老兄报的错一模一样,已经重装3遍了,依然没办法解决。

  • 打开Capture_puppet后弹出capture警告弹窗(this application has quit unexpectedly)

    • 用阿狸狗再次破解也不行,还是报错。补充一下报错截图。

      • 你cadence license manager 的版本号是多少?在控制面板的卸载里看看你所安装的软件名称为【cadence license manager】的软件版本号 是不是12.06以上

        • 好的,控制面板里显示License Manager 12.6版本,截图如下

  • 其实win10 1703版本的直接把IE这个组件关了就完事了,想弹也没法出来

  • 吴老师,cadence sigrity也有网页不停弹出的问题,怎么破呢,求解

  • WIN7 64位,172版本有如下问题:1.打补丁后依旧有网页弹出,不间断不定时2.allergo SAVE 莫名其妙保存到 office 14目录3.Allegro_puppet画线还行,但是某些操作会导致死机,比如导入参数配置,测量标注等等4同样不稳定的还有Padstack Editor工具。
    总之,172版本比较新,166功能已经可以满足情况下切勿升级!!!!

  • 老吴您好, 请问您用fpm制作allegro的封装么? 我这儿发现升级到17.x后fpm不能用了…
    似乎是allegro下一些路径变了导致fpm调用allegro不成功, 您有空了看看怎么改一下?

    • 我也遇到则这个问题,17.2的cadence在64bitwin10下,fpm找不到cadence.求解决。

  • 我用 阿狸狗破戒大师 的时候经常在31%的地方卡住不动 安装了3个小时还是在31%的地方 不知道是哪里的问题导致的

  • 您好吴老师,Win10下对17.2使用这个工具修复,提示成功,然而桌面并没有出现任何图标。这是怎么回事?

    • 好吧,在程序对应目录找到了源程序,感谢您做出这个修复,打搅了~~

  • 吴老师,真的重装系统无解?或者有其他路子没。

    • 建议重装系统好了 肯能跟某些软件有冲突 这样的情况 即使你重装的Cadence SPB还是同样的问题的

      • 16版本就不会报错。- -,已经回滚

  • 弹窗问题已经解决,只是PSpice还是不能正常使用,创建文件都不能创建···一直提示communication with sever···
    然后就毫无反应了,请问这个问题有解决的办法吗?谢谢

  • 你好,我安装了cadence后,想使用PSpice软件模拟电路,每次打开PSpice后,就回不停的弹出网页,用阿狸狗修复了网页弹出bug后,还是一样会弹出网页···用的是360的浏览器[/大哭]

    • 解决办法:以管理员身份开启软件

  • 老吴,你好。最近打开Allegro 17.0,进行layout。发现对 Object 进行操作时,每次必然自动跳转到 Options 的位置。具体来说,对某个Symbol 进行 Move,必然会跳到Options。对某个Pin进行Connect,同样必然跳到Options。 请问这是bug吗??我在User Preferences 找了一通,也没找出个解决办法。这样layout很心烦意乱。

    • 别用17.0了 用17.2吧 这是官方对外发行的版本

  • 出现闪退。
    PC安装环境:Win 7 64bit,安装Cadence 17.2,打补丁到004;浏览器:IE11 64bit,Google Chrome 64bit。

    • 遇到这种问题 一般是跟系统里某些软件或者配置冲突了 无解 建议重装系统

  • 启动Capture_puppet出错,进入Capture后弹出警告,自动退出。

  • 祝好运 O(∩_∩)O~

  • 错误提示如下图所示。其它的如画封装还没有测试哈

    • 谢谢你的反馈 很细致 赞 治本的办法是 不要装国内的浏览器 可以装谷歌的chrom 很多人吧搜狗浏览器或者猎豹浏览器卸载掉就好了 你可以试一下

      祝好运 O(∩_∩)O~

  • 再补充一个刚发现的问题:在用了2.1.6修复后,CAPTURE会出现弹窗闪退的现像。ALLGRO不会现闪退,但是在使用某些命令的时候会出现错误。我试验了走线、画丝印线、高亮这些命令是可正常使用。在使用 show element命令时弹出了提示错误的窗口,然后就是程序卡死退出。

  • 吴老师,17.2弹窗是事情还是如期发生了,我还以为电脑中毒啦,此问题是否彻底解决了?看到你写的一大串豆芽菜的程序编码,好像在看天书一样,大家盼着老吴老将出马呢,感谢吴老师无私奉献!!!172个赞!!!

    • 嗯 目前hold主访问IE的线程 allegro 没问题,capture有问题,部分机子上会出现闪退,正在改进中…

      • 吴老师辛苦你了!大家眼巴巴的等着…感谢你!!!

        • 谢谢关注 O(∩_∩)O~

  • 请问老吴:初学者,我安装了17.2,place database part为什么找不见ICA选项卡,那怎么才能在activeparts抓取元件。求解答,么么哒~!!

  • 大神!膜拜中!

    • 谢谢 O(∩_∩)O~

  • 前面我是在won2008下。 在win10下,开机会自动运行许可管理目录的cdslmd,并连续一直占用20%[emoji:ff5e]30%的CPU, 机器很热,可任务管理器关闭不了他,reg中也找不到它

  • 其他使用正常,网页弹窗我修复工具修复后没起作用,把猎豹浏览器卸载就没事了。目前就这一个问题,保存的时候经常默认保存到C:\Program Files\Microsoft Office\Office14里面

  • 老吴你好,我在使用17.2时出现了在PCB Designer内一点击保存或其他文件写入操作,allegro就自动将工作目录改变到C:\Program Files\Microsoft Office\Office14,并将文件保存在该目录下的问题,感觉很困惑,能否指点一下?谢谢。

    • 我和你有同样的问题,挺烦的,希望能找到解决办法。

    • 不好意思 这个问题我也不太清楚 没遇到过 囧~

  • 老吴 你好,
    我安装cadence17.2并安装了最新的004号补丁。然后用你的allegrocrackmaster2.1.6破解。完了后,发现原理图能使用,但是allegro打开后立即关闭!
    请教怎么解?

    • allegro打开后立即关闭 有提示什么错误提示框吗?

  • 闪退的问题已经解决了吗?

    • 正在解决

  • 补充下,是用阿狸狗2.16装的

  • 另外还有一个问题,希望解惑下,我之前一直用orcad 16.3做仿真(电力电子硬件),现在有人推saber,就我个人觉得orcad可能更适合器件级仿真,saber偏向于系统,但是现在saber很热,有没有对saber很熟悉的朋友能介绍下?是否saber也要学下?(saber 2012已经装在电脑上了,一直犹豫要不要学),谢谢!

  • 你好,出现了闪退,是在新建new project 或者是open project这一步出现的之前一直用16.3,这次换了个机器,直接上17.2,一直没登上去,系统如下,

  • 好的,我再试试

  • 我后面有更新过阿狸狗破戒大师2.1.6版本,重新上传过,有可能你下载的是有问题的2.1.6版本,要不你重新下载一下2.1.6,然后重新修复一遍看看?

  • Pcb没有问题

  • allegro画pcb应该没有问题吧?
    反正我这里用这种方式,allegro和capture都没问题,已经用了两天了,没有闪退现象,不知你的是否个别现象,在看看这几天网友们的使用反馈看看咯。

  • 打开两分钟后弹出对话框,推出

  • 是一启动Capture就闪退还是说在运行Capture画原理图操作的过程中会闪退?

  • 是一启动Capture就闪退还是说在运行Capture画原理图操作的过程中会闪退?

    • 我刚用2.1.6修复了网页更新的问题(我的黙认浏览器是猎豹),也出现的弹窗闪退的问题。Capture在启动后马上就会弹窗,点 close后 Capture软件退出。ALLEGRO打开用了一段时间,没出过任何问题。

      • 嗯 目前hold主访问IE的线程 allegro 没问题,capture有问题,部分机子上会出现闪退,正在改进中…

        • 老吴,你好,请问下这个问题解决了吗?【Capture在启动后马上会弹窗,点击colse后软件退出】

  • 不弹窗,又出现退出了

    • 是从桌面的快捷方式运行的吗?通过Capture_puppet这个快捷方式启动

    • 我这边用着没问题呢

  • 谢谢关注 O(∩_∩)O~

  • 真是6666

    • 也出现闪退了

    • 分享图片

Leave a Reply