某公司泄露版IDA pro6.8去除局域网检测

12月6号金山公司员工失误造成IDA pro6.8的正式个人版完全泄露,里面包含正版的安装包,安装密码以及7月份的授权(这个要比hackteam放出来的那个时间短,hackteam授权时间是2016.4.8),不过授权时间并不影响使用,只是停止升级而已,不过按照IDA公司的一贯做法,该员工应该是被放到黑名单了。

QQ截图20151226142022

0x01局域网检测

该Windows版本的IDA启动后,它会在端口23945上广播一个UDP包,并等待响应,看相同子网中是否有其他使用相同许可证密钥的IDA实例在运行。然后,IDA会将得到的响应数量与使用该许可证的用户数量进行比较,如果发现网络中存在过多的IDA实例,IDA会拒绝启动。

detect

因此我把这处简单的限制给去除掉了,当然在吾爱破解上面早已经出现了该绿色版本的,下载地址。去除局域网验证方法很多,吾爱上hellotong88和看雪上都有基本的破解思路。针对6.8其实思路也差不多。

0x02 思路过程

按照最基本的破解思路,查找关键字符串,找到提示信息

QQ截图20151226144106

很轻松就能找到提示信息,看看是哪个函数调用的

QQ截图20151226144634

上图的sub_5533c0应该是最终的调用结果函数,因此还得往上继续逆,找到调用sub_5533c0的函数(由于图片太大,这里贴代码)

上述代码中,能看到调用了sendto()和recvfrom()这两个跟UDP通信很关键的函数,sendto()是把UDP数据报发给指定地址;recvfrom()是从指定地址接收UDP数据报。我们结合UDP的通讯过程来看上述代码能更快理解(图片来自网络)

0_1325747149y1K1

对照上图和代码,能够看出IDA的局域网检测大概就是,作为接收端,调用bind()函数绑定IP,接收来自任意IP、任意网卡的发给指定端口的数据。作为发送端,调用bind()函数绑定IP,使用网卡号最低的网卡进行发送数据,也就是UDP数据广播,通过多次循环判断是否存在相同的IDA实例。按道理,这里是校验的关键了,可以改相应的条件判断,实现patch。事实上也是可以的,不过为了使得补丁损伤最少,还能够有更小的改动,再往上回溯两三层

QQ截图20151226152236

可以看到如果sub_552120()函数return 0的话,接下来所有的函数都不会执行了,进入 sub_552120()看看return 0的条件

QQ截图20151226152531

上图很明显,要使sub_552120 return 0,则 WSAStartup(2u, &v1)函数必须调用失败。

WSAStartup原型:int  WSAStartup ( WORD  wVersionRequested, LPWSADATA   lpWSAData );

wVersionRequestedWindows Sockets API提供的调用方可使用的最高版本号。

lpWSAData 是指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。

只要这两个参数任何一个出现错误则调用失败。

更详细的说明,参见这篇博客

0x03 patch过程

查看 WSAStartup(2u, &v1)函数传参,再做相应修改,可以看到这里只需要更改一个字节。

QQ截图20151226153553

最后,Edit->Patch program->Change byte即可。

QQ截图20151226153839

 

【via@91ri团队-Leon】 注:本文系91ri团队原创文,转载请注明出处。