初中生
 
- 金币
- 200
- 好评
- 0
- 信誉
- 100
|
嗯,如何使用看你们自己了,反正方法和类名已经改了。
# -*- coding: utf-8 -*-
# 算法助手(com.junge.algorithmAidePro) 永久会员 hook
import frida
import sys
import time
DEV = "127.0.0.1:3" # 魔改版 l端口
PID = int(sys.argv[1]) # app 的 pid
FAR_FUTURE = 4102444800 # 2100-01-01 秒级时间戳
def on_message(msg, data):
if msg["type"] == "send":
print("[JS]", msg["payload"], flush=True)
elif msg["type"] == "error":
print("[JS-ERR]", msg.get("description"), flush=True)
# 关键就是这段 JS:把会员判断的两个 getter 强行改成"永久会员"
JS = r"""
Java.perform(function() {
// 1. 核心: MemberInfo 的两个会员 getter 恒真 / 恒远未来
var MM = Java.use("com.junge.algorithmAidePro.bean.MemberInfo");
MM.isVipPermanent.implementation = function() { return true; };
MM.getVipExpiresAt.implementation = function() {
return Java.use("java.lang.Long").valueOf(%d);
};
MM.isEmailActivated.implementation = function() { return true; };
MM.isAdmin.implementation = function() { return true; };
// 2. 保险: 会话判定函数恒会员
var S = Java.use("w2.i");
S.h.implementation = function(ctx) { return true; }; // VIP 判定
S.f.implementation = function(ctx) { return true; }; // 账号 active
// 3. 直接把 user_session 持久化成永久会员
var AT = Java.use("android.app.ActivityThread");
var ctx = AT.currentApplication().getApplicationContext();
var sp = ctx.getSharedPreferences("user_session", 0);
var ed = sp.edit();
ed.putBoolean("vip_permanent", true);
ed.putBoolean("has_vip_status", true);
ed.putLong("vip_expires_at", %d);
ed.putBoolean("vip_is_permanent", true);
ed.putBoolean("email_verified", true);
ed.putBoolean("has_email_status", true);
ed.putString("account_status", "active");
ed.putBoolean("has_account_status", true);
ed.apply();
});
""" % (FAR_FUTURE, FAR_FUTURE)
def main():
dev = frida.get_device_manager().add_remote_device(DEV)
print("connect ok", flush=True)
session = dev.attach(PID)
print("attach ok pid=%d" % PID, flush=True)
script = session.create_script(JS)
script.on("message", on_message)
script.load()
print("hook ok", flush=True)
time.sleep(30)
session.detach()
if __name__ == "__main__":
main() |
-
查看全部评分
总评分:金币 +1
|