spoof_gms.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964
  1. const mcc = "{{mcc}}"
  2. const mnc = "{{mnc}}"
  3. const simOperator = "{{simOperator}}"
  4. const networkOperator = "{{networkOperator}}"
  5. const simSerialNumber = "{{simSerialNumber}}"
  6. const iccId = "{{iccId}}"
  7. const number = "{{number}}"
  8. const imei = "{{imei}}"
  9. const imsi = "{{imsi}}"
  10. const countryIso = "{{countryIso}}"
  11. const subId = "{{subId}}"
  12. const androidId = "{{androidId}}"
  13. const serialNumber = "{{serialNumber}}"
  14. function trace(tag) {
  15. Log.e(
  16. (tag || "") +
  17. Java.use("android.util.Log").getStackTraceString(
  18. Java.use("java.lang.Throwable").$new()
  19. )
  20. )
  21. }
  22. function dump(obj) {
  23. try {
  24. const gson = Java.use("com.google.gson.Gson").$new()
  25. const json = gson.toJson(obj)
  26. return json
  27. } catch (error) {
  28. return ""
  29. }
  30. }
  31. function dumpJson(obj) {
  32. try {
  33. const gson = Java.use("com.google.gson.Gson").$new()
  34. const json = gson.toJson(obj)
  35. return JSON.parse(json)
  36. } catch (error) {
  37. return ""
  38. }
  39. }
  40. class Log {
  41. static TAG = "[GMS]"
  42. static Debug = true
  43. static format(...msg) {
  44. let m = []
  45. for (let i = 0; i < msg.length; i++) {
  46. if (typeof msg[i] === "object") {
  47. m.push(msg[i] + "")
  48. } else {
  49. m.push(msg[i])
  50. }
  51. }
  52. m = m.join(" ")
  53. return m
  54. }
  55. static i(...msg) {
  56. if (!this.Debug) return
  57. console.log(`\x1b[30m${this.TAG} ${this.format(...msg)}\x1b[0m`)
  58. }
  59. static w(...msg) {
  60. console.log(`\x1b[33m${this.TAG} ${this.format(...msg)}\x1b[0m`)
  61. }
  62. static e(...msg) {
  63. console.log(`\x1b[31m${this.TAG} ${this.format(...msg)}\x1b[0m`)
  64. }
  65. static s(...msg) {
  66. console.log(`\x1b[32m${this.TAG} ${this.format(...msg)}\x1b[0m`)
  67. }
  68. }
  69. Java.perform(function () {
  70. try {
  71. const GsonClass = Java.openClassFile(
  72. "/sdcard/Android/data/com.google.android.gms/gson.dex"
  73. )
  74. GsonClass.load()
  75. Log.s("gson class loaded")
  76. } catch (error) {
  77. Log.e("load gson error", error)
  78. }
  79. const SmsManager = Java.use("android.telephony.SmsManager")
  80. SmsManager.getSmsManagerForSubscriptionId.overload("int").implementation =
  81. function (i) {
  82. const _smsManager = this.getSmsManagerForSubscriptionId(i)
  83. Log.i(`SmsManager.getSmsManagerForSubscriptionId: ${i}`)
  84. return _smsManager
  85. }
  86. SmsManager.getDefault.overload().implementation = function () {
  87. const _smsManager = this.getDefault(i)
  88. Log.i(`SmsManager.getDefault`)
  89. return _smsManager
  90. }
  91. // SmsManager.getDefaultSmsSubscriptionId.overload().implementation =
  92. // function () {
  93. // const _subId = this.getDefaultSmsSubscriptionId()
  94. // Log.i(
  95. // `spoof SmsManager.getDefaultSmsSubscriptionId: ${_subId} -> ${subId}`
  96. // )
  97. // return parseInt(subId)
  98. // }
  99. // SmsManager.getSubscriptionId.overload().implementation = function () {
  100. // const _subId = this.getSubscriptionId()
  101. // Log.i(`SmsManager.getSubscriptionId: ${_subId} -> ${subId}`)
  102. // return parseInt(subId)
  103. // }
  104. SmsManager.getCarrierConfigValues.overload().implementation = function () {
  105. const _config = this.getCarrierConfigValues()
  106. Log.i(`SmsManager.getCarrierConfigValues: ${_config}`)
  107. return _config
  108. }
  109. const CarrierConfigManager = Java.use(
  110. "android.telephony.CarrierConfigManager"
  111. )
  112. CarrierConfigManager.getConfigForSubId.overload("int").implementation =
  113. function (i) {
  114. const _config = this.getConfigForSubId(i)
  115. Log.i(`CarrierConfigManager.getConfigForSubId: ${i}`)
  116. return _config
  117. }
  118. const SubscriptionManager = Java.use(
  119. "android.telephony.SubscriptionManager"
  120. )
  121. SubscriptionManager.getActiveSubscriptionInfoCount.overload().implementation =
  122. function () {
  123. const _count = this.getActiveSubscriptionInfoCount()
  124. Log.i(
  125. `SubscriptionManager.getActiveSubscriptionInfoCount: ${_count}`
  126. )
  127. return _count
  128. }
  129. // SubscriptionManager.getDefaultSubscriptionId.overload().implementation =
  130. // function () {
  131. // const _subId = this.getDefaultSubscriptionId()
  132. // Log.i(
  133. // `spoof SubscriptionManager.getDefaultSubscriptionId: ${_subId} -> ${subId}`
  134. // )
  135. // return parseInt(subId)
  136. // }
  137. // SubscriptionManager.getDefaultSmsSubscriptionId.overload().implementation =
  138. // function () {
  139. // const _subId = this.getDefaultSmsSubscriptionId()
  140. // Log.i(
  141. // `spoof SubscriptionManager.getDefaultSmsSubscriptionId: ${_subId} -> ${subId}`
  142. // )
  143. // return parseInt(subId)
  144. // }
  145. // SubscriptionManager.getDefaultVoiceSubscriptionId.overload().implementation =
  146. // function () {
  147. // const _subId = this.getDefaultVoiceSubscriptionId()
  148. // Log.i(
  149. // `spoof SubscriptionManager.getDefaultVoiceSubscriptionId: ${_subId} -> ${subId}`
  150. // )
  151. // return parseInt(subId)
  152. // }
  153. // SubscriptionManager.getActiveDataSubscriptionId.overload().implementation =
  154. // function () {
  155. // const _subId = this.getActiveDataSubscriptionId()
  156. // Log.i(
  157. // `spoof SubscriptionManager.getActiveDataSubscriptionId: ${_subId} -> ${subId}`
  158. // )
  159. // return parseInt(subId)
  160. // }
  161. // SubscriptionManager.getSlotIndex.overload("int").implementation = function (
  162. // i
  163. // ) {
  164. // const _slotIndex = this.getSlotIndex(i)
  165. // Log.i(`spoof SubscriptionManager.getSlotIndex: ${_slotIndex} -> 0`)
  166. // return 0
  167. // }
  168. // SubscriptionManager.isUsableSubscriptionId.overload("int").implementation =
  169. // function (i) {
  170. // const _isUsable = this.isUsableSubscriptionId(i)
  171. // Log.i(`SubscriptionManager.isUsableSubscriptionId: ${_isUsable}`)
  172. // return _isUsable
  173. // }
  174. // SubscriptionManager.isValidSubscriptionId.overload("int").implementation =
  175. // function (i) {
  176. // const _isValid = this.isValidSubscriptionId(i)
  177. // Log.i(
  178. // `spoof SubscriptionManager.isValidSubscriptionId(${i}): ${_isValid} -> true`
  179. // )
  180. // return true
  181. // }
  182. SubscriptionManager.getPhoneNumber.overload("int").implementation =
  183. function (i) {
  184. Log.i(
  185. `spoof SubscriptionManager.getPhoneNumber(${i}): -> ${number}`
  186. )
  187. return number
  188. }
  189. SubscriptionManager.getPhoneNumber.overload("int", "int").implementation =
  190. function (i, i2) {
  191. Log.i(
  192. `spoof SubscriptionManager.getPhoneNumber(${i},${i2}): -> ${number}`
  193. )
  194. return number
  195. }
  196. SubscriptionManager.getActiveSubscriptionInfoList.overload().implementation =
  197. function () {
  198. const _list = this.getActiveSubscriptionInfoList()
  199. Log.i(
  200. `SubscriptionManager.getActiveSubscriptionInfoList ${_list.size()}`
  201. )
  202. return _list
  203. }
  204. // SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex.overload(
  205. // "int"
  206. // ).implementation = function (i) {
  207. // const _info = this.getActiveSubscriptionInfoForSimSlotIndex(i)
  208. // Log.i(
  209. // `SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(${i}): ${
  210. // _info ? "ok" : "null"
  211. // }`
  212. // )
  213. // return _info
  214. // }
  215. // SubscriptionManager.getActiveSubscriptionIdList.overload().implementation =
  216. // function () {
  217. // const _list = this.getActiveSubscriptionIdList()
  218. // Log.i(
  219. // `spoof SubscriptionManager.getActiveSubscriptionIdList ${_list} -> ${subId}`
  220. // )
  221. // return [parseInt(subId)]
  222. // }
  223. // SubscriptionManager.getActiveSubscriptionInfo.overload(
  224. // "int"
  225. // ).implementation = function (i) {
  226. // const _info = this.getActiveSubscriptionInfo(i)
  227. // const simCount = this.getActiveSubscriptionInfoCountMax()
  228. // let subInfo = null
  229. // try {
  230. // for (let i = 0; i < simCount; i++) {
  231. // subInfo = this.getActiveSubscriptionInfoForSimSlotIndex(i)
  232. // if (subInfo) {
  233. // break
  234. // }
  235. // }
  236. // Log.i(`spoof SubscriptionManager.getActiveSubscriptionInfo(${i})`)
  237. // } catch (error) {
  238. // console.error(
  239. // `spoof error SubscriptionManager.getActiveSubscriptionInfo(${i})`
  240. // )
  241. // error.printStackTrace()
  242. // }
  243. // return subInfo
  244. // }
  245. // SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex.overload(
  246. // "int"
  247. // ).implementation = function (i) {
  248. // const _info = this.getActiveSubscriptionInfoForSimSlotIndex(i)
  249. // Log.i(
  250. // `SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex: ${_info}`
  251. // )
  252. // return _info
  253. // }
  254. // SubscriptionManager.isActiveSubscriptionId.overload("int").implementation =
  255. // function (i) {
  256. // const _isActive = this.isActiveSubscriptionId(i)
  257. // Log.i(
  258. // `spoof SubscriptionManager.isActiveSubscriptionId(${i}): ${_isActive} -> true`
  259. // )
  260. // return true
  261. // }
  262. const SubscriptionInfo = Java.use("android.telephony.SubscriptionInfo")
  263. SubscriptionInfo.getMcc.overload().implementation = function () {
  264. const _mcc = this.getMcc()
  265. Log.i(`spoof SubscriptionInfo.getMcc: ${_mcc} -> ${mcc}`)
  266. return parseInt(mcc)
  267. }
  268. SubscriptionInfo.getMnc.overload().implementation = function () {
  269. const _mnc = this.getMnc()
  270. Log.i(`spoof SubscriptionInfo.getMnc: ${_mnc} -> ${mnc}`)
  271. return parseInt(mnc)
  272. }
  273. SubscriptionInfo.getMccString.overload().implementation = function () {
  274. const _mccString = this.getMccString()
  275. Log.i(`spoof SubscriptionInfo.getMccString: ${_mccString} -> ${mcc}`)
  276. return mcc
  277. }
  278. SubscriptionInfo.getMncString.overload().implementation = function () {
  279. const _mncString = this.getMncString()
  280. Log.i(`spoof SubscriptionInfo.getMncString: ${_mncString} -> ${mnc}`)
  281. return mnc
  282. }
  283. SubscriptionInfo.getNumber.overload().implementation = function () {
  284. const _number = this.getNumber()
  285. Log.i(`spoof SubscriptionInfo.getNumber: ${_number} -> ${number}`)
  286. return number
  287. }
  288. SubscriptionInfo.getIccId.overload().implementation = function () {
  289. const _iccId = this.getIccId()
  290. Log.i(`spoof SubscriptionInfo.getIccId: ${_iccId} -> ${iccId}`)
  291. return iccId
  292. }
  293. SubscriptionInfo.getCountryIso.overload().implementation = function () {
  294. const _countryIso = this.getCountryIso()
  295. Log.i(
  296. `spoof SubscriptionInfo.getCountryIso: ${_countryIso} -> ${countryIso}`
  297. )
  298. return countryIso
  299. }
  300. // SubscriptionInfo.getSubscriptionId.overload().implementation = function () {
  301. // const _subId = this.getSubscriptionId()
  302. // if (!subId) {
  303. // Log.i(_subId)
  304. // return _subId
  305. // }
  306. // Log.i(`spoof SubscriptionInfo.getSubscriptionId: ${_subId} -> ${subId}`)
  307. // return parseInt(subId)
  308. // }
  309. const TelephonyManager = Java.use("android.telephony.TelephonyManager")
  310. // TelephonyManager.createForSubscriptionId.overload("int").implementation =
  311. // function (i) {
  312. // Log.i(`spoof TelephonyManager.createForSubscriptionId: ${i}`)
  313. // return this
  314. // }
  315. TelephonyManager.getLine1Number.overload().implementation = function () {
  316. const _number = this.getLine1Number()
  317. Log.i(`spoof TelephonyManager.getLine1Number: ${_number} -> ${number}`)
  318. return number
  319. }
  320. TelephonyManager.getSimOperator.overload().implementation = function () {
  321. const _simOperator = this.getSimOperator()
  322. Log.i(
  323. `spoof TelephonyManager.getSimOperator: ${_simOperator} -> ${simOperator}`
  324. )
  325. return simOperator
  326. }
  327. TelephonyManager.getNetworkOperator.overload().implementation =
  328. function () {
  329. const _networkOperator = this.getNetworkOperator()
  330. Log.i(
  331. `spoof TelephonyManager.getNetworkOperator: ${_networkOperator} -> ${networkOperator}`
  332. )
  333. return networkOperator
  334. }
  335. TelephonyManager.getSimSerialNumber.overload().implementation =
  336. function () {
  337. const _simSerialNumber = this.getSimSerialNumber()
  338. Log.i(
  339. `spoof TelephonyManager.getSimSerialNumber: ${_simSerialNumber} -> ${simSerialNumber}`
  340. )
  341. return simSerialNumber
  342. }
  343. TelephonyManager.getSubscriberId.overload().implementation = function () {
  344. const _imsi = this.getSubscriberId()
  345. Log.i(`spoof TelephonyManager.getSubscriberId: ${_imsi} -> ${imsi}`)
  346. return imsi
  347. }
  348. TelephonyManager.getImei.overload().implementation = function () {
  349. const _imei = this.getImei()
  350. Log.i(`spoof TelephonyManager.getImei: ${_imei} -> ${imei}`)
  351. return imei
  352. }
  353. TelephonyManager.getNetworkCountryIso.overload().implementation =
  354. function () {
  355. const _countryIso = this.getNetworkCountryIso()
  356. Log.i(
  357. `spoof TelephonyManager.getNetworkCountryIso: ${_countryIso} -> ${countryIso}`
  358. )
  359. return countryIso
  360. }
  361. TelephonyManager.getSimCountryIso.overload().implementation = function () {
  362. const _countryIso = this.getSimCountryIso()
  363. Log.i(
  364. `spoof TelephonyManager.getSimCountryIso: ${_countryIso} -> ${countryIso}`
  365. )
  366. return countryIso
  367. }
  368. // TelephonyManager.getSubscriptionId.overload().implementation = function () {
  369. // const _subId = this.getSubscriptionId()
  370. // if (!subId) {
  371. // Log.i(_subId)
  372. // return _subId
  373. // }
  374. // Log.i(`spoof TelephonyManager.getSubscriptionId: ${_subId} -> ${subId}`)
  375. // return parseInt(subId)
  376. // }
  377. TelephonyManager.getSimState.overload().implementation = function () {
  378. const _simState = this.getSimState()
  379. Log.i(`spoof TelephonyManager.getSimState: ${_simState} -> 5`)
  380. return 5
  381. }
  382. const PhoneNumberVerification = Java.use(
  383. "com.google.android.gms.constellation.PhoneNumberVerification"
  384. )
  385. PhoneNumberVerification.$init.overload(
  386. "java.lang.String",
  387. "long",
  388. "int",
  389. "int",
  390. "java.lang.String",
  391. "android.os.Bundle",
  392. "int",
  393. "long"
  394. ).implementation = function (str, j, i, i2, str2, bundle, i3, l) {
  395. Log.e(
  396. `PhoneNumberVerification.$init(str=${str}, j=${j}, i=${i}, i2=${i2}, str2=${str2}, i3=${i3}, l=${l}`
  397. )
  398. // print bundle
  399. const keySet = bundle.keySet().toArray()
  400. for (let i = 0; i < keySet.length; i++) {
  401. const key = keySet[i]
  402. Log.i(
  403. `PhoneNumberVerification(key: ${key}, value: ${bundle.get(
  404. key
  405. )})`
  406. )
  407. }
  408. return this.$init(str, j, i, i2, str2, bundle, i3, l)
  409. }
  410. const VerifyPhoneNumberRequest = Java.use(
  411. "com.google.android.gms.constellation.VerifyPhoneNumberRequest"
  412. )
  413. VerifyPhoneNumberRequest.$init.overload(
  414. //String str, long j, IdTokenRequest idTokenRequest, Bundle bundle, List list, boolean z, int i, List list2
  415. "java.lang.String",
  416. "long",
  417. "com.google.android.gms.constellation.IdTokenRequest",
  418. "android.os.Bundle",
  419. "java.util.List",
  420. "boolean",
  421. "int",
  422. "java.util.List"
  423. ).implementation = function (
  424. str,
  425. j,
  426. idTokenRequest,
  427. bundle,
  428. list,
  429. z,
  430. i,
  431. list2
  432. ) {
  433. Log.e(`VerifyPhoneNumberRequest.$init(
  434. str=${str}, j=${j}, idTokenRequest=${idTokenRequest}, bundle=${bundle}, list=${list}, z=${z}, i=${i}, list2=${list2})`)
  435. // print bundle
  436. const keySet = bundle.keySet().toArray()
  437. for (let i = 0; i < keySet.length; i++) {
  438. const key = keySet[i]
  439. Log.i(
  440. `VerifyPhoneNumberRequest.Bundle(key=${key}, value=${bundle.get(
  441. key
  442. )})`
  443. )
  444. }
  445. return this.$init(str, j, idTokenRequest, bundle, list, z, i, list2)
  446. }
  447. const SetAsterismConsentRequest = Java.use(
  448. "com.google.android.gms.asterism.SetAsterismConsentRequest"
  449. )
  450. SetAsterismConsentRequest.$init.overload(
  451. "int",
  452. "int",
  453. "int",
  454. "[I",
  455. "java.lang.Long",
  456. "int",
  457. "android.os.Bundle",
  458. "int",
  459. "java.lang.String",
  460. "java.lang.String",
  461. "java.lang.String",
  462. "java.lang.String",
  463. "java.lang.String",
  464. "java.lang.String",
  465. "java.lang.String",
  466. "java.lang.String",
  467. "int"
  468. ).implementation = function (
  469. i,
  470. i2,
  471. i3,
  472. iArr,
  473. l,
  474. i4,
  475. bundle,
  476. i5,
  477. str,
  478. str2,
  479. str3,
  480. str4,
  481. str5,
  482. str6,
  483. str7,
  484. str8,
  485. i6
  486. ) {
  487. Log.i(
  488. `SetAsterismConsentRequest.$init(
  489. i=${i}, i2=${i2}, i3=${i3}, iArr=${iArr}, l=${l},
  490. i4=${i4}, bundle=${bundle}, i5=${i5}, str=${str},
  491. str2=${str2}, str3=${str3}, str4=${str4}, str5=${str5},
  492. str6=${str6}, str7=${str7}, str8=${str8}, i6=${i6})`
  493. )
  494. // print bundle
  495. const keySet = bundle.keySet().toArray()
  496. for (let i = 0; i < keySet.length; i++) {
  497. const key = keySet[i]
  498. Log.i(
  499. `SetAsterismConsentRequest.Bundle(key=${key}, value=${bundle.get(
  500. key
  501. )})`
  502. )
  503. }
  504. return this.$init(
  505. i,
  506. i2,
  507. i3,
  508. iArr,
  509. l,
  510. i4,
  511. bundle,
  512. i5,
  513. str,
  514. str2,
  515. str3,
  516. str4,
  517. str5,
  518. str6,
  519. str7,
  520. str8,
  521. i6
  522. )
  523. }
  524. const SetAsterismConsentResponse = Java.use(
  525. "com.google.android.gms.asterism.SetAsterismConsentResponse"
  526. )
  527. SetAsterismConsentResponse.$init.overload(
  528. "int",
  529. "java.lang.String",
  530. "java.lang.String"
  531. ).implementation = function (i, str, str2) {
  532. Log.i(
  533. `SetAsterismConsentResponse.$init(i=${i}, str=${str}, str2=${str2})`
  534. )
  535. return this.$init(i, str, str2)
  536. }
  537. try {
  538. const amac = Java.use("amac")
  539. const amlo = Java.use("amlo")
  540. const emiy = Java.use("emiy")
  541. const emiz = Java.use("emiz")
  542. const emis = Java.use("emis")
  543. const fiwu = Java.use("fiwu")
  544. const ambs = Java.use("ambs")
  545. const emkm = Java.use("emkm")
  546. const fivh = Java.use("fivh")
  547. const fivk = Java.use("fivk")
  548. const fivn = Java.use("fivn")
  549. const emjr = Java.use("emjr")
  550. const amag = Java.use("amag")
  551. const ftha = Java.use("ftha")
  552. const ftgy = Java.use("ftgy")
  553. const fuem = Java.use("fuem")
  554. const fiwt = Java.use("fiwt")
  555. const TimeUnit = Java.use("java.util.concurrent.TimeUnit")
  556. const ambi = Java.use("ambi")
  557. const fivj = Java.use("fivj")
  558. amac.o.overload("amlu", "boolean", "boolean", "fiwt").implementation =
  559. function (amluVar, z, z2, fiwtVar) {
  560. Log.e(
  561. ` amac.o(amluVar=${dump(
  562. amluVar
  563. )}, z=${z}, z2=${z2}, fiwtVar=${dump(fiwtVar)})`
  564. )
  565. try {
  566. var z3
  567. var z4
  568. const eq = fiwtVar.eQ()
  569. const arr0 = Java.array("java.lang.Object", [this.z(eq)])
  570. this._a.value.d("SetConsentRequest: %s", arr0)
  571. var amloVar = this._d.value
  572. var emiyVar = Java.cast(emiz.h.value.eV(), emiy)
  573. if (!emiyVar._b.value.fm()) {
  574. emiyVar.O()
  575. }
  576. var emizVar = Java.cast(emiyVar._b.value, emiz)
  577. emizVar.b = emkm.a(10)
  578. Log.i(emizVar, emizVar.b, emizVar.a)
  579. emizVar.a = emizVar.a | 1
  580. var eV = emis.d.value.eV()
  581. if ((fiwtVar.a.value & 2) != 0) {
  582. var fivnVar = fiwtVar.e.value
  583. if (fivnVar == null) {
  584. fivnVar = fivn.c.value
  585. }
  586. var b = fivh.b(fivnVar.a.value)
  587. if (b == 0) {
  588. z3 = false
  589. } else if (b == 3) {
  590. z3 = true
  591. } else {
  592. z3 = false
  593. }
  594. if (!eV._b.value.fm()) {
  595. eV.O()
  596. }
  597. var fbzbVar = eV._b.value
  598. var emisVar = Java.cast(fbzbVar, emis)
  599. emisVar.a |= 1
  600. emisVar.b = z3
  601. var fivnVar2 = fiwtVar.e.value
  602. if (fivnVar2 == null) {
  603. fivnVar2 = fivn.c.value
  604. }
  605. var a2 = fivk.a(fivnVar2.b.value)
  606. if (a2 == 0) {
  607. z4 = false
  608. } else if (a2 == 3) {
  609. z4 = true
  610. } else {
  611. z4 = false
  612. }
  613. if (!fbzbVar.fm()) {
  614. eV.O()
  615. }
  616. var emisVar2 = Java.cast(eV._b.value, emis)
  617. emisVar2.a |= 2
  618. emisVar2.c = z4
  619. }
  620. if (!emiyVar._b.value.fm()) {
  621. emiyVar.O()
  622. }
  623. var emizVar2 = Java.cast(emiyVar._b.value, emiz)
  624. var emisVar3 = Java.cast(eV.K(), emis)
  625. emisVar3.getClass()
  626. emizVar2.c = emisVar3
  627. emizVar2.a |= 2
  628. amloVar.A(amluVar, emjr.b(5), Java.cast(emiyVar.K(), emiz))
  629. var v = this.v()
  630. var akxiVar = this._c.value
  631. var j = this._e.value
  632. if (amag._a.value == null) {
  633. amag._a.value = ftha.b(
  634. ftgy._a.value,
  635. "google.internal.communications.phonedeviceverification.v1.PhoneDeviceVerification/SetConsent",
  636. fuem.a(fiwt.k.value),
  637. fuem.a(fiwu.a.value)
  638. )
  639. }
  640. // const vdg = v.d.value.g(
  641. // amag._a.value,
  642. // akxiVar,
  643. // fiwtVar,
  644. // Java.use('java.lang.Long').valueOf(j).longValue(),
  645. // TimeUnit.MILLISECONDS.value,
  646. // v.e.value
  647. // )
  648. // Log.i("aaaaa")
  649. // const eqres = Java.cast(vdg, fiwu).eQ()
  650. // Log.i("bbbbb")
  651. // const res = this.z(eqres)
  652. // Log.i("SetConsentResponse: ", res)
  653. // const arr = Java.array("java.lang.Object", [res])
  654. // this._a.value.d("SetConsentResponse: %s", arr)
  655. var amloVar2 = this._d.value
  656. var emiyVar2 = Java.cast(emiz.h.value.eV(), emiy)
  657. if (!emiyVar2._b.value.fm()) {
  658. emiyVar2.O()
  659. }
  660. var emizVar3 = Java.cast(emiyVar2._b.value, emiz)
  661. emizVar3.b = emkm.a(10)
  662. emizVar3.a |= 1
  663. amloVar2.A(
  664. amluVar,
  665. emjr.b(6),
  666. Java.cast(emiyVar2.K(), emiz)
  667. )
  668. var a3 = ambi.b().a(this._b.value.getApplicationContext())
  669. a3.n(z)
  670. a3.m(Java.use("java.lang.Boolean").valueOf(z2))
  671. var b2 = fivj.b(fiwtVar.g.value)
  672. if (b2 == 0) {
  673. b2 = 1
  674. }
  675. var a4 = fivj.a(b2)
  676. var edit = Java.cast(a3, ambs)._c.value.edit()
  677. edit.putInt("device_consent_version", a4)
  678. edit.apply()
  679. Log.i("oooooooooo")
  680. } catch (e) {
  681. Log.i("2222222", e)
  682. trace()
  683. }
  684. // this.o(amluVar, z, z2, fiwtVar)
  685. }
  686. } catch (error) {}
  687. const alyx = Java.use("alyx")
  688. alyx.a.overload("fixf").implementation = function (fixf) {
  689. const b = this.a(fixf)
  690. const keySet = b.keySet().toArray()
  691. for (let i = 0; i < keySet.length; i++) {
  692. const key = keySet[i]
  693. Log.w(`alyx.a::key: ${key}, value: ${b.get(key)}`)
  694. }
  695. return b
  696. }
  697. alyx.m.overload("amlu", "java.util.List").implementation = function (
  698. amlu,
  699. list
  700. ) {
  701. const a = amlu._a.value // string
  702. const f = amlu.f.value // string
  703. const g = amlu.g.value // list
  704. const h = amlu.h.value // list
  705. const HashMap = Java.use("java.util.HashMap")
  706. const d = Java.cast(amlu.d.value, HashMap) // map
  707. const e = Java.cast(amlu.e.value, HashMap) // map
  708. Log.e(
  709. `alyx.m(${JSON.stringify({
  710. a,
  711. f,
  712. g: g ? JSON.parse(dump(g)) : null,
  713. h: h ? JSON.parse(dump(h)) : null,
  714. d: d ? JSON.parse(dump(d)) : null,
  715. e: e ? JSON.parse(dump(e)) : null
  716. })})`
  717. )
  718. const res = this.m(amlu, list)
  719. Log.e(`alyx.m res: ${dump(res)}`)
  720. return res
  721. }
  722. alyx.r.overload(
  723. "amlu",
  724. "java.util.List",
  725. "java.lang.String",
  726. "java.lang.String"
  727. ).implementation = function (amlu, list, str, str2) {
  728. Log.e(
  729. `alyx.r(${JSON.stringify({
  730. amlu: dumpJson(amlu),
  731. list: dumpJson(list),
  732. str,
  733. str2
  734. })})`
  735. )
  736. try {
  737. const res = this.r(amlu, list, str, str2)
  738. Log.e(`alyx.r res: ${res}`)
  739. return res
  740. } catch (error) {
  741. Log.e(`alyx.r error: ${error}`)
  742. }
  743. return false
  744. }
  745. alyx.x.overload("amlu", "java.util.List").implementation = function (
  746. amlu,
  747. list
  748. ) {
  749. const res = this.x(amlu, list)
  750. Log.e(`alyx.x(
  751. amlu=${dump(amlu)},
  752. list=${dump(list)})
  753. => ${dump(res)}`)
  754. return res
  755. }
  756. //amlu amluVar, fixf fixfVar, ammt ammtVar
  757. alyx.e.overload("amlu", "fixf", "ammt").implementation = function (
  758. amlu,
  759. fixf,
  760. ammt
  761. ) {
  762. const res = this.e(amlu, fixf, ammt)
  763. Log.e(`alyx.e(
  764. amlu=${dump(amlu)},
  765. fixf=${dump(fixf)},
  766. ammt=${dump(ammt)})
  767. => ${dump(res)}`)
  768. return res
  769. }
  770. // alyx.v.overload("amlu", "java.util.List").implementation = function (
  771. // amlu,
  772. // list
  773. // ) {
  774. // const res = this.v(amlu, list)
  775. // Log.e(`alyx.v(
  776. // amlu=${dump(amlu)},
  777. // list=${dump(list)})
  778. // => ${dump(res)}`)
  779. // trace()
  780. // return res
  781. // }
  782. const ftit = Java.use("ftit")
  783. const ftgv = Java.use("ftgv")
  784. ftit.h.overload("ftgv").implementation = function (ftgvVar) {
  785. try {
  786. Log.e(`ftit.h(
  787. this=${dump(this)},
  788. ftgvVar=${dump(ftgvVar)})`)
  789. return Java.use("ftiu").$new(this, ftgvVar)
  790. } catch (e) {
  791. e.printStackTrace()
  792. Log.e(`ftit.h exception: ${e}`)
  793. }
  794. }
  795. const Secure = Java.use("android.provider.Settings$Secure")
  796. Secure.getString.overload(
  797. "android.content.ContentResolver",
  798. "java.lang.String"
  799. ).implementation = function (contentResolver, str) {
  800. const _str = this.getString(contentResolver, str)
  801. if (str === "android_id") {
  802. Log.w(`spoof Secure.getString(android_id): ${_str} -> ${androidId}`)
  803. return androidId
  804. }
  805. return _str
  806. }
  807. const Build = Java.use("android.os.Build")
  808. Build.getString.overload("java.lang.String").implementation = function (
  809. str
  810. ) {
  811. const _str = this.getString(str)
  812. Log.w(`Build.getString(${str}): ${_str}`)
  813. return _str
  814. }
  815. Build.getSerial.overload().implementation = function () {
  816. const _serial = this.getSerial()
  817. Log.w(`spoof Build.getSerial: ${_serial} -> ${serialNumber}`)
  818. return serialNumber
  819. }
  820. // const SystemProperties = Java.use("android.os.SystemProperties")
  821. // SystemProperties.get.overload("java.lang.String").implementation =
  822. // function (str) {
  823. // const _str = this.get(str)
  824. // Log.w(`SystemProperties.get(${str}): ${_str}`)
  825. // return _str
  826. // }
  827. // SystemProperties.get.overload(
  828. // "java.lang.String",
  829. // "java.lang.String"
  830. // ).implementation = function (str, str2) {
  831. // const _str = this.get(str, str2)
  832. // Log.w(`SystemProperties.get(${str}, ${str2}): ${_str}`)
  833. // return _str
  834. // }
  835. // SystemProperties.getInt.overload("java.lang.String", "int").implementation =
  836. // function (str, i) {
  837. // const _i = this.getInt(str, i)
  838. // Log.w(`SystemProperties.getInt(${str}, ${i}): ${_i}`)
  839. // return _i
  840. // }
  841. // SystemProperties.getLong.overload(
  842. // "java.lang.String",
  843. // "long"
  844. // ).implementation = function (str, l) {
  845. // const _l = this.getLong(str, l)
  846. // Log.w(`SystemProperties.getLong(${str}, ${l}): ${_l}`)
  847. // return _l
  848. // }
  849. // SystemProperties.getBoolean.overload(
  850. // "java.lang.String",
  851. // "boolean"
  852. // ).implementation = function (str, z) {
  853. // const _z = this.getBoolean(str, z)
  854. // Log.w(`SystemProperties.getBoolean(${str}, ${z}): ${_z}`)
  855. // return _z
  856. // }
  857. const alzg = Java.use("alzg")
  858. alzg.d.overload(
  859. // boolean, map
  860. "boolean",
  861. "java.util.Map"
  862. ).implementation = function (z, map) {
  863. Log.e(`alzg.d(z=${z}, map=${dump(map)})`)
  864. return this.d(z, map)
  865. }
  866. // const ammv = Java.use("ammv")
  867. // ammv.a.overload(
  868. // // amlu amluVar, fixf fixfVar, ammt ammtVar, ammi ammiVar
  869. // "amlu",
  870. // "fixf",
  871. // "ammt",
  872. // "ammi"
  873. // ).implementation = function (amlu, fixf, ammt, ammi) {
  874. // Log.e(`ammv.a(
  875. // amlu=${dump(amlu)},
  876. // fixf=${dump(fixf)},
  877. // ammt=${dump(ammt)},
  878. // ammi=${dump(ammi)})`)
  879. // trace()
  880. // return this.a(amlu, fixf, ammt, ammi)
  881. // }
  882. // const amag = Java.use("amag")
  883. // amag.b.overload(
  884. // // akxi akxiVar, fiwx fiwxVar, long j
  885. // "akxi",
  886. // "fiwx",
  887. // "long"
  888. // ).implementation = function (akxi, fiwx, j) {
  889. // Log.e(`amag.b(
  890. // akxi=${dump(akxi)},
  891. // fiwx=${dump(fiwx)},
  892. // j=${j})`)
  893. // trace()
  894. // return this.b(akxi, fiwx, j)
  895. // }
  896. // const Configuration = Java.use(
  897. // "com.google.android.ims.provisioning.config.Configuration"
  898. // )
  899. // Configuration.k.overload().implementation = function () {
  900. // Log.e(`Configuration.k() ${dump(this)}`)
  901. // return this.k()
  902. // }
  903. })