spoof_gms.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  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. function trace() {
  13. console.log(
  14. Java.use("android.util.Log").getStackTraceString(
  15. Java.use("java.lang.Throwable").$new()
  16. )
  17. )
  18. }
  19. Java.perform(function () {
  20. const SmsManager = Java.use("android.telephony.SmsManager")
  21. SmsManager.getSmsManagerForSubscriptionId.overload("int").implementation =
  22. function (i) {
  23. const _smsManager = this.getSmsManagerForSubscriptionId(i)
  24. console.log(`SmsManager.getSmsManagerForSubscriptionId: ${i}`)
  25. return _smsManager
  26. }
  27. SmsManager.getDefault.overload().implementation = function () {
  28. const _smsManager = this.getDefault(i)
  29. console.log(`SmsManager.getDefault`)
  30. return _smsManager
  31. }
  32. SmsManager.getDefaultSmsSubscriptionId.overload().implementation =
  33. function () {
  34. const _subId = this.getDefaultSmsSubscriptionId()
  35. console.log(
  36. `SmsManager.getDefaultSmsSubscriptionId: ${_subId} -> ${subId}`
  37. )
  38. return parseInt(subId)
  39. }
  40. SmsManager.getSubscriptionId.overload().implementation = function () {
  41. const _subId = this.getSubscriptionId()
  42. console.log(`SmsManager.getSubscriptionId: ${_subId} -> ${subId}`)
  43. return parseInt(subId)
  44. }
  45. const SubscriptionInfo = Java.use("android.telephony.SubscriptionInfo")
  46. SubscriptionInfo.getMcc.overload().implementation = function () {
  47. const _mcc = this.getMcc()
  48. console.log(`spoof SubscriptionInfo.getMcc: ${_mcc} -> ${mcc}`)
  49. return parseInt(mcc)
  50. }
  51. SubscriptionInfo.getMnc.overload().implementation = function () {
  52. const _mnc = this.getMnc()
  53. console.log(`spoof SubscriptionInfo.getMnc: ${_mnc} -> ${mnc}`)
  54. return parseInt(mnc)
  55. }
  56. SubscriptionInfo.getMccString.overload().implementation = function () {
  57. const _mccString = this.getMccString()
  58. console.log(
  59. `spoof SubscriptionInfo.getMccString: ${_mccString} -> ${mcc}`
  60. )
  61. return mcc
  62. }
  63. SubscriptionInfo.getMncString.overload().implementation = function () {
  64. const _mncString = this.getMncString()
  65. console.log(
  66. `spoof SubscriptionInfo.getMncString: ${_mncString} -> ${mnc}`
  67. )
  68. return mnc
  69. }
  70. SubscriptionInfo.getNumber.overload().implementation = function () {
  71. const _number = this.getNumber()
  72. console.log(`spoof SubscriptionInfo.getNumber: ${_number} -> ${number}`)
  73. return number
  74. }
  75. SubscriptionInfo.getIccId.overload().implementation = function () {
  76. const _iccId = this.getIccId()
  77. console.log(`spoof SubscriptionInfo.getIccId: ${_iccId} -> ${iccId}`)
  78. return iccId
  79. }
  80. SubscriptionInfo.getCountryIso.overload().implementation = function () {
  81. const _countryIso = this.getCountryIso()
  82. console.log(
  83. `spoof SubscriptionInfo.getCountryIso: ${_countryIso} -> ${countryIso}`
  84. )
  85. return countryIso
  86. }
  87. SubscriptionInfo.getSubscriptionId.overload().implementation = function () {
  88. const _subId = this.getSubscriptionId()
  89. if (!subId) {
  90. console.log(_subId)
  91. return _subId
  92. }
  93. console.log(
  94. `spoof SubscriptionInfo.getSubscriptionId: ${_subId} -> ${subId}`
  95. )
  96. return parseInt(subId)
  97. }
  98. const TelephonyManager = Java.use("android.telephony.TelephonyManager")
  99. TelephonyManager.getLine1Number.overload().implementation = function () {
  100. const _number = this.getLine1Number()
  101. console.log(
  102. `spoof TelephonyManager.getLine1Number: ${_number} -> ${number}`
  103. )
  104. return number
  105. }
  106. TelephonyManager.getSimOperator.overload().implementation = function () {
  107. const _simOperator = this.getSimOperator()
  108. console.log(
  109. `spoof TelephonyManager.getSimOperator: ${_simOperator} -> ${simOperator}`
  110. )
  111. return simOperator
  112. }
  113. TelephonyManager.getNetworkOperator.overload().implementation =
  114. function () {
  115. const _networkOperator = this.getNetworkOperator()
  116. console.log(
  117. `spoof TelephonyManager.getNetworkOperator: ${_networkOperator} -> ${networkOperator}`
  118. )
  119. return networkOperator
  120. }
  121. TelephonyManager.getSimSerialNumber.overload().implementation =
  122. function () {
  123. const _simSerialNumber = this.getSimSerialNumber()
  124. console.log(
  125. `spoof TelephonyManager.getSimSerialNumber: ${_simSerialNumber} -> ${simSerialNumber}`
  126. )
  127. return simSerialNumber
  128. }
  129. TelephonyManager.getSubscriberId.overload().implementation = function () {
  130. const _imsi = this.getSubscriberId()
  131. console.log(
  132. `spoof TelephonyManager.getSubscriberId: ${_imsi} -> ${imsi}`
  133. )
  134. return imsi
  135. }
  136. TelephonyManager.getImei.overload().implementation = function () {
  137. const _imei = this.getImei()
  138. console.log(`spoof TelephonyManager.getImei: ${_imei} -> ${imei}`)
  139. return imei
  140. }
  141. TelephonyManager.getNetworkCountryIso.overload().implementation =
  142. function () {
  143. const _countryIso = this.getNetworkCountryIso()
  144. console.log(
  145. `spoof TelephonyManager.getNetworkCountryIso: ${_countryIso} -> ${countryIso}`
  146. )
  147. return countryIso
  148. }
  149. TelephonyManager.getSimCountryIso.overload().implementation = function () {
  150. const _countryIso = this.getSimCountryIso()
  151. console.log(
  152. `spoof TelephonyManager.getSimCountryIso: ${_countryIso} -> ${countryIso}`
  153. )
  154. return countryIso
  155. }
  156. TelephonyManager.getSubscriptionId.overload().implementation = function () {
  157. const _subId = this.getSubscriptionId()
  158. if (!subId) {
  159. console.log(_subId)
  160. return _subId
  161. }
  162. console.log(
  163. `spoof TelephonyManager.getSubscriptionId: ${_subId} -> ${subId}`
  164. )
  165. return parseInt(subId)
  166. }
  167. TelephonyManager.getSimState.overload().implementation = function () {
  168. const _simState = this.getSimState()
  169. console.log(`spoof TelephonyManager.getSimState: ${_simState} -> 5`)
  170. return 5
  171. }
  172. const PhoneNumberVerification = Java.use(
  173. "com.google.android.gms.constellation.PhoneNumberVerification"
  174. )
  175. PhoneNumberVerification.$init.overload(
  176. "java.lang.String",
  177. "long",
  178. "int",
  179. "int",
  180. "java.lang.String",
  181. "android.os.Bundle",
  182. "int",
  183. "long"
  184. ).implementation = function (str, j, i, i2, str2, bundle, i3, l) {
  185. console.log("PhoneNumberVerification.$init")
  186. console.log(
  187. `str: ${str}, j: ${j}, i: ${i}, i2: ${i2}, str2: ${str2}, i3: ${i3}, l: ${l}`
  188. )
  189. // print bundle
  190. const keySet = bundle.keySet().toArray()
  191. for (let i = 0; i < keySet.length; i++) {
  192. const key = keySet[i]
  193. console.log(`key: ${key}, value: ${bundle.get(key)}`)
  194. }
  195. return this.$init(str, j, i, i2, str2, bundle)
  196. }
  197. const SetAsterismConsentRequest = Java.use(
  198. "com.google.android.gms.asterism.SetAsterismConsentRequest"
  199. )
  200. SetAsterismConsentRequest.$init.overload(
  201. "int",
  202. "int",
  203. "int",
  204. "[I",
  205. "java.lang.Long",
  206. "int",
  207. "android.os.Bundle",
  208. "int",
  209. "java.lang.String",
  210. "java.lang.String",
  211. "java.lang.String",
  212. "java.lang.String",
  213. "java.lang.String",
  214. "java.lang.String",
  215. "java.lang.String",
  216. "java.lang.String",
  217. "int"
  218. ).implementation = function (
  219. i,
  220. i2,
  221. i3,
  222. iArr,
  223. l,
  224. i4,
  225. bundle,
  226. i5,
  227. str,
  228. str2,
  229. str3,
  230. str4,
  231. str5,
  232. str6,
  233. str7,
  234. str8,
  235. i6
  236. ) {
  237. console.log("SetAsterismConsentRequest.$init")
  238. console.log(
  239. `i: ${i}, i2: ${i2}, i3: ${i3}, iArr: ${iArr}, l: ${l}, i4: ${i4}, i5: ${i5}, str: ${str}, str2: ${str2}, str3: ${str3}, str4: ${str4}, str5: ${str5}, str6: ${str6}, str7: ${str7}, str8: ${str8}, i6: ${i6}`
  240. )
  241. // print bundle
  242. const keySet = bundle.keySet().toArray()
  243. for (let i = 0; i < keySet.length; i++) {
  244. const key = keySet[i]
  245. console.log(`key: ${key}, value: ${bundle.get(key)}`)
  246. }
  247. return this.$init(
  248. i,
  249. i2,
  250. i3,
  251. iArr,
  252. l,
  253. i4,
  254. bundle,
  255. i5,
  256. str,
  257. str2,
  258. str3,
  259. str4,
  260. str5,
  261. str6,
  262. str7,
  263. str8,
  264. i6
  265. )
  266. }
  267. const SetAsterismConsentResponse = Java.use(
  268. "com.google.android.gms.asterism.SetAsterismConsentResponse"
  269. )
  270. SetAsterismConsentResponse.$init.overload(
  271. "int",
  272. "java.lang.String",
  273. "java.lang.String"
  274. ).implementation = function (i, str, str2) {
  275. console.log("SetAsterismConsentResponse.$init")
  276. console.log(`i: ${i}, str: ${str}, str2: ${str2}`)
  277. return this.$init(i, str, str2)
  278. }
  279. const amac = Java.use("amac")
  280. const amlo = Java.use("amlo")
  281. const emiy = Java.use("emiy")
  282. const emiz = Java.use("emiz")
  283. const emis = Java.use("emis")
  284. const fiwu = Java.use("fiwu")
  285. const ambs = Java.use("ambs")
  286. const emkm = Java.use("emkm")
  287. const fivh = Java.use("fivh")
  288. const fivk = Java.use("fivk")
  289. const fivn = Java.use("fivn")
  290. const emjr = Java.use("emjr")
  291. const amag = Java.use("amag")
  292. const ftha = Java.use("ftha")
  293. const ftgy = Java.use("ftgy")
  294. const fuem = Java.use("fuem")
  295. const fiwt = Java.use("fiwt")
  296. const TimeUnit = Java.use("java.util.concurrent.TimeUnit")
  297. const ambi = Java.use("ambi")
  298. const fivj = Java.use("fivj")
  299. amac.o.overload("amlu", "boolean", "boolean", "fiwt").implementation =
  300. function (amluVar, z, z2, fiwtVar) {
  301. console.log("amac.o", amluVar, z, z2, fiwtVar)
  302. try {
  303. var z3
  304. var z4
  305. const eq = fiwtVar.eQ()
  306. const arr0 = Java.array("java.lang.Object", [this.z(eq)])
  307. this._a.value.d("SetConsentRequest: %s", arr0)
  308. var amloVar = this._d.value
  309. var emiyVar = Java.cast(emiz.h.value.eV(), emiy)
  310. if (!emiyVar._b.value.fm()) {
  311. emiyVar.O()
  312. }
  313. var emizVar = Java.cast(emiyVar._b.value, emiz)
  314. emizVar.b = emkm.a(10)
  315. console.log(emizVar, emizVar.b, emizVar.a)
  316. emizVar.a = emizVar.a | 1
  317. var eV = emis.d.value.eV()
  318. if ((fiwtVar.a.value & 2) != 0) {
  319. var fivnVar = fiwtVar.e.value
  320. if (fivnVar == null) {
  321. fivnVar = fivn.c.value
  322. }
  323. var b = fivh.b(fivnVar.a.value)
  324. if (b == 0) {
  325. z3 = false
  326. } else if (b == 3) {
  327. z3 = true
  328. } else {
  329. z3 = false
  330. }
  331. if (!eV._b.value.fm()) {
  332. eV.O()
  333. }
  334. var fbzbVar = eV._b.value
  335. var emisVar = Java.cast(fbzbVar, emis)
  336. emisVar.a |= 1
  337. emisVar.b = z3
  338. var fivnVar2 = fiwtVar.e.value
  339. if (fivnVar2 == null) {
  340. fivnVar2 = fivn.c.value
  341. }
  342. var a2 = fivk.a(fivnVar2.b.value)
  343. if (a2 == 0) {
  344. z4 = false
  345. } else if (a2 == 3) {
  346. z4 = true
  347. } else {
  348. z4 = false
  349. }
  350. if (!fbzbVar.fm()) {
  351. eV.O()
  352. }
  353. var emisVar2 = Java.cast(eV._b.value, emis)
  354. emisVar2.a |= 2
  355. emisVar2.c = z4
  356. }
  357. if (!emiyVar._b.value.fm()) {
  358. emiyVar.O()
  359. }
  360. var emizVar2 = Java.cast(emiyVar._b.value, emiz)
  361. var emisVar3 = Java.cast(eV.K(), emis)
  362. emisVar3.getClass()
  363. emizVar2.c = emisVar3
  364. emizVar2.a |= 2
  365. amloVar.A(amluVar, emjr.b(5), Java.cast(emiyVar.K(), emiz))
  366. var v = this.v()
  367. var akxiVar = this._c.value
  368. var j = this._e.value
  369. if (amag._a.value == null) {
  370. amag._a.value = ftha.b(
  371. ftgy._a.value,
  372. "google.internal.communications.phonedeviceverification.v1.PhoneDeviceVerification/SetConsent",
  373. fuem.a(fiwt.k.value),
  374. fuem.a(fiwu.a.value)
  375. )
  376. }
  377. // const vdg = v.d.value.g(
  378. // amag._a.value,
  379. // akxiVar,
  380. // fiwtVar,
  381. // Java.use('java.lang.Long').valueOf(j).longValue(),
  382. // TimeUnit.MILLISECONDS.value,
  383. // v.e.value
  384. // )
  385. // console.log("aaaaa")
  386. // const eqres = Java.cast(vdg, fiwu).eQ()
  387. // console.log("bbbbb")
  388. // const res = this.z(eqres)
  389. // console.log("SetConsentResponse: ", res)
  390. // const arr = Java.array("java.lang.Object", [res])
  391. // this._a.value.d("SetConsentResponse: %s", arr)
  392. var amloVar2 = this._d.value
  393. var emiyVar2 = Java.cast(emiz.h.value.eV(), emiy)
  394. if (!emiyVar2._b.value.fm()) {
  395. emiyVar2.O()
  396. }
  397. var emizVar3 = Java.cast(emiyVar2._b.value, emiz)
  398. emizVar3.b = emkm.a(10)
  399. emizVar3.a |= 1
  400. amloVar2.A(amluVar, emjr.b(6), Java.cast(emiyVar2.K(), emiz))
  401. var a3 = ambi.b().a(this._b.value.getApplicationContext())
  402. a3.n(z)
  403. a3.m(Java.use("java.lang.Boolean").valueOf(z2))
  404. var b2 = fivj.b(fiwtVar.g.value)
  405. if (b2 == 0) {
  406. b2 = 1
  407. }
  408. var a4 = fivj.a(b2)
  409. var edit = Java.cast(a3, ambs)._c.value.edit()
  410. edit.putInt("device_consent_version", a4)
  411. edit.apply()
  412. console.log("oooooooooo")
  413. } catch (e) {
  414. console.log("2222222", e)
  415. trace()
  416. }
  417. // this.o(amluVar, z, z2, fiwtVar)
  418. }
  419. const ConscryptFileDescriptorSocket = Java.use(
  420. "com.google.android.gms.org.conscrypt.ConscryptFileDescriptorSocket"
  421. )
  422. ConscryptFileDescriptorSocket.setSoWriteTimeout.overload(
  423. "int"
  424. ).implementation = function (i) {
  425. console.log("ConscryptFileDescriptorSocket.setSoWriteTimeout: ", i)
  426. return this.setSoWriteTimeout(i)
  427. }
  428. // ConscryptFileDescriptorSocket.verifyCertificateChain.overload(
  429. // //byte[][] bArr, String str
  430. // "[[B",
  431. // "java.lang.String"
  432. // ).implementation = function (bArr, str) {
  433. // console.log(
  434. // "ConscryptFileDescriptorSocket.verifyCertificateChain: ",
  435. // bArr,
  436. // str
  437. // )
  438. // }
  439. const cvgy = Java.use("cvgy")
  440. cvgy.g.overload().implementation = function () {
  441. const g = this.g()
  442. console.log("cvgy.g", g)
  443. trace()
  444. return g
  445. }
  446. cvgy.createSocket.overload().implementation = function () {
  447. const createSocket = this.createSocket()
  448. console.log("cvgy.createSocket", createSocket)
  449. trace()
  450. return createSocket
  451. }
  452. const alja = Java.use("alja")
  453. alja.u.overload("java.lang.Exception").implementation = function (e) {
  454. console.log("alja.u", JSON.stringify(e))
  455. return this.u(e)
  456. }
  457. })