spoof_gms.js 32 KB

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