_spoof_gms.js 28 KB

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