Paddle文件修改通杀
0x00 原理
通过之前的文章《Paddle激活类Mac应用通杀》知道了paddle激活和调用的相关api,也知道只要有符合的返回值就可激活通过,由此可以创建fake_server进行模拟激活服务。
通过《Surge修改试用判断方法达到无限试用》中可以了解到通过二进制编辑器(Hex Fiend)可以修改文件,然后使用codesign进行自签名使之运行。
0x01 fake_server
使用python的flask框架编写一个简单的web应用,针对激活和验证api进行mock,其他的请求进行反代,即服务请求之后返回对应的内容。
import flask
import requests
import argparse
app = flask.Flask(__name__)
if __name__ == '__main__':
# 解析启动命令
parser = argparse.ArgumentParser()
parser.add_argument('--host', type=str, default='127.0.0.1')
parser.add_argument('--port', type=int, default=10010)
parser.add_argument('--debug', action='store_true', default=False)
parser.add_argument('--prefix', type=str, default='/3.2', help="自定义前缀")
args = parser.parse_args()
prefix = args.prefix
@app.route(f'{prefix}/license/activate',methods=['POST'])
def activate():
# 获取请求参数
product_id = ''
vendor_id = ''
req_datas = flask.request.get_data().decode('utf-8').split('&')
print(req_datas)
for param in req_datas:
k_v = param.split('=')
if k_v[0] == 'product_id':
product_id = k_v[1]
if k_v[0] =='vendor_id':
vendor_id = k_v[1]
# 解析参数
print(product_id)
return {
"success": True,
"response": {
"product_id": product_id,
"activation_id": vendor_id,
"type": "personal",
"expires": 1,
"expiry_date": 1999999999999
}
}
@app.route(f'{prefix}/license/verify',methods=['POST'])
def verify():
return {
"success": True,
"response": {
"activation_id": "admin",
"type": "personal",
"expires": 1,
"expiry_date": 1999999999999
}
}
@app.route(f'{prefix}/<path:subpath>',methods=['POST','GET'])
def reverse_proxy(subpath):
# 反向代理
url = f'https://v3.paddleapi.com/3.2/{subpath}'
method = flask.request.method
headers = dict(flask.request.headers)
headers['Host'] = 'v3.paddleapi.com'
data = flask.request.get_data().decode('utf-8')
# print(url, data, method, headers)
if method == 'GET':
req = requests.get(url, headers=headers, data=data, verify=False)
else:
req = requests.post(url, headers=headers, data=data, verify=False)
# 创建response
# print(req.status_code,req.content)
response = flask.make_response(req.content)
response.status_code = req.status_code
return response
# 启动服务
app.run(host=args.host,port=args.port,debug=args.debug)
直接使用命令运行即可,这个prefix实际上是为了后面修改留一个缓冲空间。
0x02 文件修改
Paddle的文件一般在/Applications/<application>.app/Contents/Frameworks/Paddle.framework/Versions/A/Paddle
,直接用Hex Fiend打开,使用Text模式搜索https://v3.paddleapi.com/3.2/
,然后将其替换成你的fake_server访问地址即可,注意字符串的字节数最好保持一致,上面程序中的prefix就是缓冲的空间,可以自己调节,下面是一个举例
https://v3.paddleapi.com/3.2/
http://127.0.0.1:10010/f/3.2/ -> prefix是/f/3.2
https://paddle.example.com/c/ -> prefix是/c
codesign -f -s "codesign_by_soft98" Paddle
然后Paddle程序就做好了,启动你的fake_server,然后打开你的应用程序去激活就可以了,激活码可以使用B7EE3D3C-B7EE3D3C-B7EE3D3C-B7EE3D3C-B7EE3D3C
。
0x03 展示
当然这只是建立与程序只使用paddle激活,并且没有其他暗桩的情况下,所以有些程序还是会检测到程序并没有被激活,暗桩之类的就需要自行解决了。这个修改Paddle的方式,是一种破解维持的方法,而且修改后的Paddle程序可以替换其他同类激活软件中的Paddle,就不用二次修改了。