This repository has been archived on 2026-10-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Ananta-ps/tools/AnantaInjector/__pycache__/unified_loader.cpython-313.pyc
T

315 lines
60 KiB
Plaintext
Raw Normal View History

ó
“¾jÕÈãóâ•SrSSKrSSKrSSKrSSKrSSKrSSKrSSKr\RR\RR\ 55r \ \R;a\RRS\ 5 SSKJrJrJrJrJrJrJrJrJrJrJr \RR\RR\ 55r\RR7\S5r\RR7\S5rSrSrSSjr S r!S
r"S r#S r$S
r%Sr&Sr'Sr(SSjr)SSjr*SSjr+SSjr,Sr-\.S:Xa[\R^"\-"55 \4"\RjS5(a*\RjRm5(a
\7"S5 gggg!\0a;r1\"S\1-5 SSK2r2\2Rf"5 Sr1C1Np!\0a Sr1C1N|f=fSr1C1ff=f!\0a gf=f)uŠ
Ananta 注入器 · ��两件事:�龄�瓶 + 气�
★ 这�是「统一加载器�(AnantaUnifiedLoader)那个全通�诊断版 —— 那份还在
C:\Game\Ananta_mainleakflow_keitaro_gg\AnantaUnifiedLoader,开�是为了排查问题时
临时�用 A/B/D/E 那些通�。**日常跑��用这一份**,它�挂 bowling + balloon 两个模�。
★ 会把自己的状�写进�目录 injector_status.json,供根目录的「一键�动�界�读:
starting 正在�动
waiting_game 已�动,等游�
waiting_world 已�动,等玩家进入游�世界(进入世界闸门)
attached 已挂上客户端
injected 已注入并生效(bowling + balloon 的 hook 都装好了)
stopped 已退出
一个 frida 会� + 多个 script,把调研文档里「注入端能�到�的通�一次性全开:
| 模� | 通� | �什么 |
|-----------------|----------|-----------------------------------------------------|
| gadget_world | A | 室外/建筑内 gadget 网格 |
| world_mod | B | 场景物�:路�/街边�具/�破�物/念动力目标 |
| train | A'+D(+E) | 地�车厢与座�;自带 loadindoor / sectorstate |
| bowling | C | �龄��瓶(补表类:伪造 SceneItemBlob 查表结果) |
| balloon | C | 打气�的气�本体(补表类,需�务端�机写 side-channel)|
| addbtn | — | ★ 通用 F �示按钮(InteractBtnMgr.AddBtn) |
★ addbtn 是**��退让**的那一项:�议层没有任何 S2C 能 AddBtn,
�务端�怎么回 Ask* 也��出 F �示 —— �有注入端能补。
★ 一键�动(2026-09-29):�击�目录的 start_game_and_loader.cmd
—— 自�� → 开 Ananta.exe → 等进程 → 自动挂本加载器。� 使用说明.md §2.5。
用法(��模�,需先装 frida:pip install frida frida-tools):
python unified_loader.py 常驻(推�;先开它�开游�也行)
python unified_loader.py diag 加载全部模�并�跑一次状�,打��退出
python unified_loader.py scan �读:列出身边�补按钮的物件
python unified_loader.py --no train,balloon 临时关掉�几个模�
⛑ 硬约�
1. �一时刻�能有一个 frida 会�注入 Ananta.exe。
开本加载器�必须关掉 GymLoader / TrainSeatLoader / BowlingLoader /
BalloonLoader / GadgetLoader / WorldMod / PropScanner —— 本程��轮都会查,
查到就让�等待,�会硬抢。
2. 必须以**管�员**�行(游�是���动的,�管�员 attach 会永久阻塞)。
3. balloon 模��赖�务端在�机写 side-channel 文件
%LOCALAPPDATA%\AnantaBalloon\balloon_push.jsonï¼›
主线 v0.3 目�没有 GameRouter.Balloon.cs,写�出这个文件 ⇒ 气��会出。
需�的��把 v2.1 包里的 GameRouter.Balloon.cs + BalloonWireContracts.cs 移�过�。
éN) ÚCtxÚModÚ_LIVEÚ
_atexit_closeÚother_loader_runningÚ resolve_pidÚprintÚtsÚ sleep_sliceÚSTOPÚacquire_instance_lockz config.jsonzinjector_status.jsonc ó\•U[R"5[R"5S.nURU5 [S-n[ USSS9n[ R"X$SS9 SSS5 [R"U[5 g!,(df  N*=f![a gf=f)N)Ústater
Úpidz.tmpÚwúutf-8©ÚencodingF)Ú ensure_ascii)
ÚtimeÚosÚgetpidÚupdateÚ STATUS_PATHÚopenÚjsonÚdumpÚreplaceÚ Exception)rÚkwÚdÚtmpÚfhs Úunified_loader.pyÚ write_statusr%Ns€ð
ؤ4§9¢9£;´r·y²y³{Ñ CˆØ �‰�Œ ܘFÑ"ˆÜ
�#�s WÒ
-°Ü �IŠI�a¨%Ò 0÷.ä
�
Š
�3œ Õ$÷.Õ
-ûô ó
Ù ð
ús*‚ABÁB
Á)#BÂ
BÂBÂ
B+Â*B+cóÀ•[R"[[SS9R 55$![
a!n[
SU-5 /SSSSSS .sSnA$SnAff=f)
Nrru8[!] 读 config.json 失败(%s)—— 用默认全开ç@éç@ç @ç>@)ÚmodulesÚaddbtnRadiusMetersÚ addbtnBatchÚaddbtnEverySecÚseatRadiusMetersÚ
statusPollSec)rÚloadsrÚCFG_PATHÚreadrr )Úes r$Úload_cfgr6Zsb€ðWÜ�zŠzœ$œx°'Ñ:×?Ñ?ÓAÓBÐBøÜ óWÜ
ÐHÈ1ÑLÔMذSÈØ"%¸3ÐQUñWõ WûðWús‚/2²
A¼AÁAÁAc óX•URS5=(d 0n/nURS5=(d /HïnURS5nU(aXQ;a[SU-5 M0URSS5(d[SU-5 MWURS5nU(a4U(a-URUS5(d[S U<S
U<S 35 M£UR[U[R
R
[URS 5555 Mñ U$)
u+★ 2026-10-01:新增 **分组开关**(`config.json` 的 `groups`)。
用户�能�独选「�游�注入�/「车�注入�/「两个一起�:
groups = {"minigame": true, "traffic": true} → 两个一起(默认)
groups = {"minigame": true, "traffic": false} → �跑�游�(�龄� + 气�)
groups = {"minigame": false, "traffic": true} → �跑车�(vehicle_go)
groups = {"minigame": false, "traffic": false} → 一个都�挂(相当于纯待机)
�个模�用 `"group": "minigame"` / `"group": "traffic"` 声明自己属于哪一组。
⛑ 与既有两�过滤**�加**(�是替�):模�自身 `enabled=false` �然优先,
命令行 `--no a,b` 也�然有效。
⛑ 没写 group 的模���分组影�(���行为)。
Úgroupsr,Únameu$ · %s(本次 --no 已关闭)ÚenabledTu, · %s(config.json 里 enabled=false)Úgroupu · u
(groups.u=false,本次ä¸�挂)Úfile)Úgetr ÚappendrrÚpathÚjoinÚHERE)ÚcfgÚdisabler8ÚoutÚmr9Úgs r$Ú
build_modulesrGcsá€ð�W‰W�XÓ
×
$ "€FØ
€CØ
�W‰W�YÓ
×
% 2Ò
%ˆØ�u‰u�V‹}ˆÞ �t“Ü Ð8¸4Ñ?Ô @Ù Ø�u‰u�Y ×%Ñ%Ü Ð@À4ÑGÔ HÙ Ø
�E‰E�'‹NˆÞ – §
¡
¨1¨d× 3Ñ 3Ý ÃTË1ÐMÔ NÙ Ø �
‰
”3�tœRŸW™WŸ\™\¬$°·±°f³
Ó>Ó?Ö@ñ&ð €Jócó¸•[U5n[R"U5nUS:XGa˜US:XGa‘UR S5=(d 0nUR S5(a%SUR S5UR S54-$S UR S
5UR S 5UR S S
5UR SS
5UR SS
5UR SS
5UR SS
5UR SS
5UR S5UR SS
5UR S5(aSOSUR SS
5UR SS
5UR SS
5UR SS
5UR SS
5UR SS
5UR SS
54-$USS$![a USSs$f=f)uV把状æ€� RPC 的返回压æˆ�一行人能看的日志;解æž�ä¸�了就原样截断。NéÈÚ
gadget_loaderÚstatusÚworldÚ
warmupLeftu+预热中,%d ç§’å�Žå¼€å§‹ï¼ˆgadgets=%s)ÚGadgetsInWorldu¯cell=%s raid=%s loaded=%d(confirmed=%d) pend=%d giveup=%d ok=%d fail=%d gadgets=%s speed=%.2f%s burst=%d retry=%d refresh=%d 到达救æ�´=%d 已走=%.1fæ ¼ 全扫=%d é�™æ‰«=%dÚcellÚraidÚ loadedCellsrÚ confirmedÚ pendingCellsÚ giveUpCellsÚcallsOkÚ callsFailÚspeedÚfastz FASTÚÚburstÚ
retryTotalÚ refreshTotalÚ arriveCountÚ
movedCellsÚ
sweepAllCountÚidleSweepCount)Ústrrr2rr=)r9ÚrpcÚrawÚsr!rs r$Ú
fmt_statusrf‚s§€ä ˆC‹€AðÜ �JŠJ�q‹Mˆð ˆÔ 3¨(¤?Ø
�E‰E�'‹N× ˜bˆØ �5‰5�× Ñ Ø@ÀAÇEÁEÈ,ÓDWÐYZ×Y^ÑY^Ð_oÓYpÐCqÑqÐ qðzà—5‘5˜“= !§%¡%¨£-°·±°}ÀaÓ1HÈ!Ï%É%ÐP[Ð]^ÓJ_Ø—5‘5˜¨Ó+¨Q¯U©U°=À!Ó-DÀaÇeÁeÈIÐWXÓFYØ—5‘5˜ aÓ(¨!¯%©%Ð0@Ó*AÀ1Ç5Á5ÈÐRSÓCTØŸe™e FŸm™m‘7°°Q·U±U¸7ÀAÓ5FØ—5‘5˜ qÓ)¨1¯5©5°ÀÓ+CØ—5‘5˜¨Ó*¨A¯E©E°,ÀÓ,BØ—5‘5˜¨!Ó,¨a¯e©eÐ4DÀaÓ.Hð
JñJð Kð
ˆTˆcˆ7€Nøô óØ��#ˆwŠðús�GÇGÇGc óD•[R"[USS9R55n[ U[ 5(aURS5OUnU(d0S4$0nUHon[ U[[45(a[U5S :aM/US
SVs/sHn[U5PM snUS [US 5[US
54-'Mq US[U5-4$![an0SU<SU<S34sSnA$SnAff=fs snf![a M¹f=f)uçcells.json: {"cells": [[x, z, sectorId, ...], ...]} → {"x,z": [sectorId...]}
照抄 AnantaGadgetLoader/src/gadget_world.py:load_cell_sectors。
一个格��能属于多个 sector —— 室内 Gadget 通常�在 sector 0。
rru
读ä¸�了 u(õ)NÚcellsu文件里没有 cellsr(éz%d,%dréu%d æ ¼) rr2rr4rÚ
isinstanceÚdictr=ÚlistÚtupleÚlenÚint)r?Údatar5ÚrowsrEÚcÚvs r$Úload_cell_sectorsrv™s€ð 6Ü�zŠzœ$˜t¨gÑ6×;Ñ;Ó=Ó>ˆô!+¨4´× 6Ñ 6ˆ4�8‰8�GÔ ¸D€DÞ ØÐ*Ð*Ð*Ø
€AÛ
ˆÜ˜!œd¤E˜]×+Ñ+¬s°1«v¸«zÙ ð ØCDÀQÀRÁ5Ó2IÂ5¸a´3°q¶6Á5Ñ2IˆAˆgœ˜Q˜q™T›¤C¨¨!©£IÐ.Ñ.Ó /ñ ð
ˆhœ˜Q›ÑÐ Ðøô ó6Ù«T³1Ð5Ð5Õ5ûð6üò3JøÜó Ú ð úsA‚,C(ÂDÂD Â1#DÃ(
D Ã2 DÃ>D ÄD Ä DÄ
DÄDcóü•URS5=(d /GH†nURURS55nUcM)URS5=(d /GH>nURS5nU(dMURS5nURS5(a„[[RR [ US55upxU(d5[S[5<S URS5<S
U<S U<S 3 5 M³[R"U5nURXVURS
S5S9n [U 5n
[S[5<S URS5<S
U<S[U
5S::aU
OU
SSS-<35 GMA GM‰ g![aJn [S[5<SURS5<S
U<S[U 5SS<35 Sn A GM˜Sn A ff=f)us按 config.json çš„ setup 数组,把å�„模å�—çš„**å�¯åЍåº�列**跑一é��。
★ 为什么必须有这一步:
原版加载器是 python 驱动的 —— agent 加载进去之�还�
setr/probe → setsectors → sectormode → tune → start �真正开始加载。
� load � start = 什么都�会�生(本加载器第一版就是这个症状)。
r,r9NÚsetuprcÚargÚ cellsFileÚ[u] · Ú.u
跳过(rhÚtimeouté©r}ú => éÜu…z] [!] õ
失败:é )r=Úmodrvrr?r@rAr r
rÚdumpsÚcallrbrpr) ÚctxrBrEr„ÚsteprcryÚmappingÚnoteÚrrer5s r$Ú run_setuprŒ±s�€ð�W‰W�YÓ
×
% 2Ó
%ˆØ�g‰g�a—e‘e˜F“mÓ$ˆØ ‰;Ù Ø—E‘E˜'“N×( bÓ(ˆDØ—(‘(˜5“/ˆCÞÙØ—(‘(˜5“/ˆCØ�x‰x˜ ×$Ñ$Ü 1´"·'±'·,±,¼tÀTÈ+ÑEVÓ2WÓ X‘
�Þݼb¾dÀAÇEÁEÈ&ÆMÓSVÓX\Ð]Ô^ÙÜ—j’j Ó)�ð
aØ—H‘H˜S¨t¯x©x¸ À2Ó/F�HÐG�ܘ“F�Ý´°q·u±u¸V¶}ÃcÜ58¸³V¸s³]±ÈÈ$È3ÈÐRWÉÑ0WðY÷Zô)ò &øô(ó
aݼ¾¸a¿e¹eÀF¾mËSÔRUÐVWÓRXÐY]ÐZ]ÒR^Ð_×`Ó`ûð
aúsÄ(A4F'Æ'
G;Æ1>G6Ç6G;c óЕURS5nUcgURSURS5(aSOSSS9 URS [
URS
S55SS9 g![a1n[ S [ 5<S
[
U5SS <35 SnAgSnAff=f![a1n[ S [ 5<S[
U5SS <35 SnAgSnAff=f)uøaddbtn 的开关是**脚本内状æ€�**,æ¯�次 attach å�Žè¦�显å¼�下å�‘一次。
(�个 rpc 调用都是一次新的 attach + 新的 script realm,所以�写进
addbtn.js 的默认值,而是由 Python 这边按 config.json 下�。)
ÚaddbtnNÚ abUseObjectsÚaddbtnUseObjectsÚtrueÚfalseérr{u"] [!] abUseObjects 下å�‘失败:éxÚ abObjRadiusÚaddbtnObjectRadiusç@u!] [!] abObjRadius 下å�‘失败:)r„r†r=rr r
rb)r‡rBrEr5s r$Úapply_addbtn_cfgr˜ÑsÉ€ð �‰�Ó€AØ�yØðØ �‰ˆ~¨¯©Ð1C×)DÑ)D™vÈ'Ð[\ˆÑ]ðOØ �‰ˆ}œc #§'¡'Ð*>ÀÓ"DÓEÈqˆÒQøô óÝ
¼2¾4ÄÀQÃÈÈÂÐNÔOÜûðûô
óOÝ
¼"¾$ÄÀAÃÀtÈÂ ÐM×NÑNûðOús/—)A,Á*B*Á,
B'Á6'B"Â"B'Â*
C%Â4'C à C%cóŒ•U=(d /H$nURUSS9nU[U5SS4s $ g![a M6f=f)Nr“riX)NN)r†rbr)r‡r„ÚnamesÚnr‹s r$Ú once_statusrœåsV€Ø
�[�bŠ[ˆð Ø—‘˜ A�Ð&ˆAØ”c˜!“f˜T˜c�l�?Ò "ñð øôó Ú ð ús�5µ
AÁAc ó•URS5=(d 0n[RR[RR [
55n[RR
[RRX!RSS555n[R"[RRX1RSS555nU(a [USS9$S$![a gf=f) uTæœ�务端 console 日志里最新那份(æ¯�局一份 console-<时间戳>.log)。Ú
attachGateÚ serverLogDirz
../../logsÚ
serverLogGlobz
console-*.logNcó@•[RRU5$©N)rr?Úgetmtime)Úps r$Ú<lambda>Ú$_newest_server_log.<locals>.<lambda>øs€¤B§G¡G×$4Ñ$4°QÔ$7rH)Úkey) r=rr?ÚdirnameÚabspathÚ__file__Únormpathr@ÚglobrÚmax)rBrFÚherer!Úfiless r$Ú_newest_server_logr°ïs·€à �‰� Ó×# €AÜ
�7‰7�?‰?œ2Ÿ7™7Ÿ?™?¬8Ó4Ó 5€DÜ
�‰×ÑœŸ™Ÿ™ d¯E©E°.À,Ó,OÓPÓQ€AðÜ— ’ œ"Ÿ'™'Ÿ,™, q¯%©%°ÀÓ*QÓRÓSˆö=BŒ3ˆuÑ7Ñ 8ÐKÀtÐKøô óÙðúsÂ(AC?Ã?
D Ä D c
ó& •URS5=(d 0n[URS5=(d S5R5n[URSS55n[URSS55n[URSS 5=(d S 5n[R"5n[ 5nUcXURS 5(a
S US 'S
US
'S
US'XqRSS5-
S:¼aXqS'[
S[5-5 g URS5U:waX�S'S US 'S
US
'S
US'URS 5(agUS:wag[U5n U c3XqRSS5-
S:¼aXqS'[
S[5-5 g URS
5U :wadX‘S
'[RRU 5US'XqS'[
S[5[RRU 5US4-5 [RRU 5n
[URS5=(d S 5n X«:”Ga[U S5n U R!U 5 U R#[%X«-
S55n
S
S
S
5 U ['W
5-US'U
R)SSS9nURS 5=(d /HAnU(dM Xþ;dMURS5cXqS'[
S![5Xö4-5 O URS5nUb/UU-
U:¼a&S
US'SUS '[
S"[5UU-
4-5 gURS5cXqS'XqS-
nXqRSS5-
S:¼a@XqS'[
S#[5[U5[U5URS$S%54-5 UU:¼a\[
S&[5<S'URS$S%5<35 SUS '[URS$S%55R5S(:g$g ![a S US'GNwf=f![a g f=f!,(df  GNÐ=f![a Sn
GNâf=f))uŸ★ 进入世界闸门:返回 True æ‰�å…�许 attach。
为什么需�(2026-09-29):bowling_agent.js / balloon_fix.js 里装 hook 的那段
`Il2Cpp.perform(...)` **没有�试** —— 类拿�到就 `sendlog('ERR: ... not found'); return;`
永久放弃,直到�新 attach �会�试。所以「游�刚起就挂�是有真实风险的。
这里先等�务端日志出现「�有 world-ready 之��会打�的行,� attach,
等价于�现手动�作时「进世界 → �开加载器�这�已验�的顺�。
⛑ �扫**本次开始跟踪之�新增的字节** —— �则会把上一局的历�内容当�「已进世界�。
ržÚmodeÚ serverLogÚpollSecr)Ú
timeoutSeci„ÚdelayAfterMarkerSecrNÚpassedFr<Úhit_tÚlastçg.@u=[%s] [闸门] 等游æˆ�å�¯åŠ¨ï¼ˆæ²¡æ‰¾åˆ° Ananta.exe)……rTÚ serverloguY[%s] [闸门] 还没看到æœ�务端 console 日志,继续等(æœ�务端起了å�—?)ÚoffÚt0u<[%s] [闸门] 跟踪 %s(从第 %d 字节之å�Žå¼€å§‹çœ‹ï¼‰Úrbi@rHrÚignore)ÚerrorsÚmarkersu\[%s] [闸门] 命中 %r —— 客户端还在进世界,等 %.0fs 爆å�‘期过去å†�注入uQ[%s] [闸门] 爆å�‘期已过(+%.0fs)—— 玩家已进世界,开始注入uW[%s] [闸门] 等玩家进入世界…… 已等 %ds(%ds å�ŽæŒ‰ fallback=%s 处ç�†ï¼‰ÚfallbackÚ attachAnywayr{u"] [闸门] è¶…æ—¶ —— fallback=Úgiveup)r=rbÚlowerÚfloatrrr r
r°rr?ÚgetsizerÚbasenamerqrÚseekr4ÚminrpÚdecode)rBÚstrFr²Úpollr}ÚdelayÚnowrr?Úszr¼r#ÚchunkÚtxtÚmkr¸Úwaiteds r$Úgate_okrÕûs:€ð �‰� Ó×# €AÜ ˆq�u‰u�V‹}×+  Ó ,× 2Ñ 2Ó 4€DÜ �—‘�y #Ó&Ó '€DÜ�A—E‘E˜,¨Ó,Ó-€Gô
�!—%‘%Ð-¨qÓ1×6°QÓ 7€EÜ
�)Š)‹+€Cä
‹-€CØ
�{à
�6‰6�(× Ñ Ø ˆBˆx‰L؈Bˆv‰J؈ˆ7‰ Ø —‘˜ Ó$Ñ $¨Ó ,؈v‰JÜ ÐQÔTVÓTXÑXÔ YØà ‡v�vˆeƒ}˜Ó؈5‰ ؈ˆ8‰ ؈ˆ6‰
؈ˆ7‰ Ø ‡v�vˆh×ÑØð ˆ{ÓØä ˜cÓ "€DØ �|Ø —‘˜ Ó$Ñ $¨Ó ,؈v‰JÜ ÐmÔprÓptÑtÔ uØà ‡v�vˆfƒ~˜Ó؈6‰
ð ÜŸ™Ÿ™¨Ó-ˆBˆu‰Iðˆ4‰Ü
ÐLÜ“”r—w‘w×'Ñ'¨Ó-¨r°%©yÐ9ñ:ô ;ðÜ
�W‰W�_‰_˜TÓ
"ˆô ˆb�f‰f�U‹m× ˜qÓ
!€CØ „xð Ü�d˜DÔ! RØ—‘˜” ØŸ™¤ B¡H¨oÓ >Ó?�÷"ð
œ#˜e›*Ñ$ˆˆ5‰ Ø�l‰l˜7¨8ˆlÐ4ˆØ—5‘5˜Ó#×) rÒ)ˆB߈r�b•ið—6‘6˜'“?Ñ*Ø"%�w‘KÜÐxÜ›T 2Ð-ñ.ô/áñ*ð—‘�w“ˆØ Ñ   u¡°Ó!5؈Bˆw‰K؈Bˆx‰LÜ ÐeÔikÓimÐorÐuzÑozÐh{Ñ{Ô |Øà ‡v�vˆdƒ|ÑØˆ4‰Ø
�d‘8‰^€FØ
�V‰V�F˜CÓ
Ñ  DÓ(؈6‰
Ü
ÐgÜ“”s˜6“{¤C¨£L°!·%±%¸
ÀNÓ2SÐTñUô Và
�ÓÝ
¼2¾4ÀÇÁÀzÐSaÕAbÐcÔd؈ˆ8‰ Ü�1—5‘5˜ ^Ó4Ó5×;Ñ;Ó=ÀÑIÐIØ øô_ó ØˆBˆuŒIð ûô óÙðú÷
"Ö!ûôó Ø‹Eð úsTÇ"QÈ!QÉ* RÉ6/Q.Ê%RÑQÑQÑ
Q+Ñ*Q+Ñ.
Q=Ñ8RÑ=RÒ RÒRc
ó0•URS5=(d 0nURSS5(dg[R"5nURS5c XBS'SUS'U[URS5=(d S5:aURSS 5$U[URS
S 55-US'/nURS 5=(d /H�nURURS
55nUcM([R
"[
URSSS955nURS5(aMnURURS
5S45 M’ U(dSUS'gXBS-
n [S[5SRSU55[U 54-5 U [URSS55:¼aSOS US'US$![a' URURS
5S45 GM;f=f)um★ armed 守å�«ï¼šattach 之å�Žç¡®è®¤ hook 真装上了。
闸门���「时机对�,���脚本里那次 `bfClass(...)` �功。
两个模�的 bfStatus 都带 armed 字段:
armed=true → 正常(tpl=false 是正常的,那�是还没拿到模�,**��**因此�挂)
armed=false → 脚本里 return 掉了 ⇒ 到点主动�挂
Ú
armedGuardr:TÚokr½rºÚnextÚlastResÚwaitÚrecheckEverySecé
r,r9ÚbfStatusr“rubfStatus æ‹¿ä¸�到Úarmedz armed=falseu8[%s] [守å�«] hook 还没装上(%s)—— 已等 %dsú, c3ó,# •UH
nSU-v• M g7f)z%s:%sN©)Ú.0Úbs r$Ú <genexpr>Úcheck_armed.<locals>.<genexpr>�sé€Ð6²#¨Q˜W qž[²#ùs‚Ú
maxWaitSecé<Úreattach)r=rrÆr„rr2rbr†rr>r r
r@rq)
r‡rBrÌÚagrÏÚbadrEr„r!rÔs
r$Ú check_armedrìisÑ€ð
�‰�Ó × $ "€BØ
�6‰6�)˜T× "Ñ "ØÜ
�)Š)‹+€CØ ‡v�vˆdƒ|ÑØˆ4‰Øˆˆ6‰
Ø
ŒU�2—6‘6˜&“>×( SÓ
)Ó)Ø�v‰v�i Ó(Ð(Ø”u˜RŸV™VÐ$5°rÓ:Ó;Ñ;€B€v�Jà
€CØ�g‰g�iÓ ×& BÒ&ˆØ�g‰g�a—e‘e˜F“mÓ$ˆØ ‰;Ù ð Ü—
’
œ3˜sŸx™x¨
¸A˜xÐ>Ó?Ó@ˆAð�u‰u�W�~‹~Ø �J‰J˜Ÿ™˜f›
 }Ð5Ö 6ñ'ö ؈ˆ9‰
ØØ
�d‘8‰^€FÜ Ð
DÜ
‹T�4—9‘9Ñ6±#Ó6Ó6¼¸F» Ð Dñ EôFà"(¬E°"·&±&¸ÀrÓ2JÓ,KÓ"K‘JÐQW€B€y�MØ
ˆi‰=Ðøôó Ø �J‰J˜Ÿ™˜f›
Ð';Ð<Ô =Û ð úsÄ-G$Ç$,HÈHc
óÜ•[5n[X5n[5nU(a[SU-5 g[ 5c [S5 g[ U5n[ R"U5 UR5(d [S5 g[S5 URS5=(d /HšnURURS55nUcM([SURS5<S URS
S 5<35 [XFURS 55upxUc
[S
5 M‡[SU<SU<35 Mœ [S5 UR5 g)Nu7[!] å�¦ä¸€ä¸ªåŠ è½½å™¨åœ¨è·‘ï¼ˆ%s)—— 请先关掉rkuN[!] 没找到 Ananta.exe(游æˆ�没开,或你ä¸�是管ç�†å‘˜çœ‹ä¸�到它)u[!] 连接/加载失败z=
============================================================r,r9z
--- õ:ÚdescrZÚ statusRpcuP (无状æ€� RPC / 全部ä¸�å�¯ç”¨ï¼›æ¨¡å�—自驱动,看游æˆ�里效果)z r€r)
r6rGrr rrrr>Úattachr=r„rœÚclose) rCrBÚmodsÚor‡rEr„r›r‹s r$Úrun_diagrõ’s€Ü
‹*€CÜ ˜Ó &€DÜÓ€AÞÜ
ÐGÈ!ÑKÔLØÜƒ}ÑÜ
Ð^Ô_ØÜ
ˆd‹)€CÜ ‡L‚L�ÔØ �:‰:�<‰<Ü
Ð'Ô(ØÜ ˆ/ÔØ
�W‰W�YÓ
×
% 2Ò
%ˆØ�g‰g�a—e‘e˜F“mÓ$ˆØ ‰;Ù Ý