简介
Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。
概念
支持 64位系统,支持Xp,Vista,Win7,MAC OS ,支持socks4,socks5,http代理协议,支持TCP,UDP协议,可以指定端口,指定IP,指定域名,指定程序等运行模式,兼容性非常好。有点类似SOCKSCAP。
作用
有许多网络应用程序不支持通过代理服务器工作,因此不能用于局域网或防火墙后面。这些会损害公司的隐私和导致很多限制。Proxifier解决了这些问题和所有限制,让您有机会不受任何限制使用你喜爱的软件。此外,它让你获得了额外的网络安全控制,创建代理隧道,并添加使用更多网络功能的权力。
Proxifier官网地址是:https://www.proxifier.com/,主页如下图所示。
虽然Proxifier功能非常强大,通过Proxifier官网我们也看到了它是一个收费软件。因此,我通过这篇文章来分析下这个工具除了功能外是否也在安全方面做了不少工作呢。
Mac 端逆向分析
用到工具:
xcode
frida
ida
我这里的mac环境版本是macOS Catalina 10.17,如下图所示。
去官网下载最新版本的Proxifier,这里我这个版本的系统他最新更新日志是Version 2.26 (2019.11.13),我们就下这个版本,如下图所示。
我们安装它之后启动界面如下图所示。
现在我们开始逆向分析这个程序,首先我们先看看这个软件是否能够调试,也就是先看它我们所说的是否有反调试,这里我直接用xcode去附加它(怎么附加这里不说,下面有的地方可能没说到,不再说明,详细视频教程可以联系作者。),如图所示,发现是可以直接调试的。现在我们去分析它这个程序是什么写的(主要分析他是Qt、js、还是原生程序)。
我们通过xcode集成的lldb调试器打印这个程序的所有模块,如下图所示,发现这个程序是一个原生程序。
那好现在我们思考一个问题,你是一个研发要实现一个付费功能,或者需要序列号(购买的key)来激活它,那如何现实呢。先简单实现,拿后者来说首先是要提供一个输入框给用户输入序列号,然后提供一个按钮给用户点击确定,后面的事情就是内部检测是否为真的代码部分。因此现在回来我们做为一个逆向分析者,我就从用户点确定那开始分析。我们先在系统模块(AppKit)下一个点击事件的断点,如图所示,这里我们看寄存器rdx(rdx保存的是一个函数签名),我们直接就能看到一个okRegWindow:的函数(没有做名称混淆)。
现在我们找到了用户模块(上面我们下断点的是系统模块)实现点击事件的函数,通过ida分析找到这个函数逻辑,如下图所示。
继续分析他的代码逻辑定位到函数sub_10003581E是主要检测函数,如图所示。
通过上面发现有一个很明显地方,他调用objc_msgSend(NSApp, "stopModal");,这句话的意思就是把窗口结束模态状态(也就是窗口可以接受用户点击),我们也发现如果没注册的情况下是不能点击后面窗口的,如下图所示,猜测如果正确他就会调用这里。
我们用xcode调试去验证,如下图所示。
我们修改下这个函数返回值(强制让他判断正确),如下图所示。
发现与猜测的不一样(函数里面没有成功逻辑,可以自己动手去调试。),那我们换个思路,现在知道了他点击事情是okRegWindow:函数,找到这个函数对应的类名(ProxifierAppDelegate),如下图所示。
到这里我们用另一个工具frida去追踪这个类在软件启动的时候调用了哪些函数,如图所示,发现nagwindow函数可疑。
hook这个函数打堆栈,如下图所示。
找到偏移0x5de9,通过ida去定位这个函数,然后分析最后定位到函数名NagNotifyReceived:,从名字上来看就可能是一个监听线程函数,然后调用doModal函数,把窗口注册成非模态(不接收用户点击)。
通过分析我们大概知道了这个软件付费功能的实现逻辑,安全性不高想破解它还是不难,这里就不多说什么了。
Cygwin下ndk standalone版本的交叉编译环境搭建(Root研究)
走过路过的大佬们留个关注再走呗,后续精彩文章不断,方便第一时间接收到最新文章