spoof1.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  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. setImmediate(() => {
  13. Java.perform(function () {
  14. console.log("")
  15. console.log("[.] Cert Pinning Bypass/Re-Pinning")
  16. var CertificateFactory = Java.use(
  17. "java.security.cert.CertificateFactory"
  18. )
  19. var FileInputStream = Java.use("java.io.FileInputStream")
  20. var BufferedInputStream = Java.use("java.io.BufferedInputStream")
  21. var X509Certificate = Java.use("java.security.cert.X509Certificate")
  22. var KeyStore = Java.use("java.security.KeyStore")
  23. var TrustManagerFactory = Java.use("javax.net.ssl.TrustManagerFactory")
  24. var SSLContext = Java.use("javax.net.ssl.SSLContext")
  25. // Load CAs from an InputStream
  26. console.log("[+] Loading our CA...")
  27. var cf = CertificateFactory.getInstance("X.509")
  28. try {
  29. var fileInputStream = FileInputStream.$new(
  30. "/data/local/tmp/cert-der.crt"
  31. )
  32. } catch (err) {
  33. console.log("[o] " + err)
  34. }
  35. var bufferedInputStream = BufferedInputStream.$new(fileInputStream)
  36. var ca = cf.generateCertificate(bufferedInputStream)
  37. bufferedInputStream.close()
  38. var certInfo = Java.cast(ca, X509Certificate)
  39. console.log("[o] Our CA Info: " + certInfo.getSubjectDN())
  40. // Create a KeyStore containing our trusted CAs
  41. console.log("[+] Creating a KeyStore for our CA...")
  42. var keyStoreType = KeyStore.getDefaultType()
  43. var keyStore = KeyStore.getInstance(keyStoreType)
  44. keyStore.load(null, null)
  45. keyStore.setCertificateEntry("ca", ca)
  46. // Create a TrustManager that trusts the CAs in our KeyStore
  47. console.log(
  48. "[+] Creating a TrustManager that trusts the CA in our KeyStore..."
  49. )
  50. var tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm()
  51. var tmf = TrustManagerFactory.getInstance(tmfAlgorithm)
  52. tmf.init(keyStore)
  53. console.log("[+] Our TrustManager is ready...")
  54. console.log("[+] Hijacking SSLContext methods now...")
  55. console.log("[-] Waiting for the app to invoke SSLContext.init()...")
  56. SSLContext.init.overload(
  57. "[Ljavax.net.ssl.KeyManager;",
  58. "[Ljavax.net.ssl.TrustManager;",
  59. "java.security.SecureRandom"
  60. ).implementation = function (a, b, c) {
  61. console.log("[o] App invoked javax.net.ssl.SSLContext.init...")
  62. SSLContext.init
  63. .overload(
  64. "[Ljavax.net.ssl.KeyManager;",
  65. "[Ljavax.net.ssl.TrustManager;",
  66. "java.security.SecureRandom"
  67. )
  68. .call(this, a, tmf.getTrustManagers(), c)
  69. console.log(
  70. "[+] SSLContext initialized with our custom TrustManager!"
  71. )
  72. }
  73. const SmsManager = Java.use("android.telephony.SmsManager")
  74. SmsManager.getSmsManagerForSubscriptionId.overload(
  75. "int"
  76. ).implementation = function (i) {
  77. const _smsManager = this.getSmsManagerForSubscriptionId(i)
  78. console.log(`SmsManager.getSmsManagerForSubscriptionId: ${i}`)
  79. return _smsManager
  80. }
  81. SmsManager.getDefault.overload().implementation = function () {
  82. const _smsManager = this.getDefault(i)
  83. console.log(`SmsManager.getDefault`)
  84. return _smsManager
  85. }
  86. SmsManager.getDefaultSmsSubscriptionId.overload().implementation =
  87. function () {
  88. const _subId = this.getDefaultSmsSubscriptionId()
  89. console.log(`SmsManager.getDefaultSmsSubscriptionId: ${_subId}`)
  90. return _subId
  91. }
  92. SmsManager.getSubscriptionId.overload().implementation = function () {
  93. const _subId = this.getSubscriptionId()
  94. console.log(`SmsManager.getSubscriptionId: ${_subId}`)
  95. return _subId
  96. }
  97. const SubscriptionInfo = Java.use("android.telephony.SubscriptionInfo")
  98. SubscriptionInfo.getMcc.overload().implementation = function () {
  99. const _mcc = this.getMcc()
  100. console.log(`spoof SubscriptionInfo.getMcc: ${_mcc} -> ${mcc}`)
  101. return parseInt(mcc)
  102. }
  103. SubscriptionInfo.getMnc.overload().implementation = function () {
  104. const _mnc = this.getMnc()
  105. console.log(`spoof SubscriptionInfo.getMnc: ${_mnc} -> ${mnc}`)
  106. return parseInt(mnc)
  107. }
  108. SubscriptionInfo.getMccString.overload().implementation = function () {
  109. const _mccString = this.getMccString()
  110. console.log(
  111. `spoof SubscriptionInfo.getMccString: ${_mccString} -> ${mcc}`
  112. )
  113. return mcc
  114. }
  115. SubscriptionInfo.getMncString.overload().implementation = function () {
  116. const _mncString = this.getMncString()
  117. console.log(
  118. `spoof SubscriptionInfo.getMncString: ${_mncString} -> ${mnc}`
  119. )
  120. return mnc
  121. }
  122. SubscriptionInfo.getNumber.overload().implementation = function () {
  123. const _number = this.getNumber()
  124. console.log(
  125. `spoof SubscriptionInfo.getNumber: ${_number} -> ${number}`
  126. )
  127. return number
  128. }
  129. SubscriptionInfo.getIccId.overload().implementation = function () {
  130. const _iccId = this.getIccId()
  131. console.log(
  132. `spoof SubscriptionInfo.getIccId: ${_iccId} -> ${iccId}`
  133. )
  134. return iccId
  135. }
  136. SubscriptionInfo.getCountryIso.overload().implementation = function () {
  137. const _countryIso = this.getCountryIso()
  138. console.log(
  139. `spoof SubscriptionInfo.getCountryIso: ${_countryIso} -> ${countryIso}`
  140. )
  141. return countryIso
  142. }
  143. SubscriptionInfo.getSubscriptionId.overload().implementation =
  144. function () {
  145. const _subId = this.getSubscriptionId()
  146. if (!subId) {
  147. console.log(_subId)
  148. return _subId
  149. }
  150. console.log(
  151. `spoof SubscriptionInfo.getSubscriptionId: ${_subId} -> ${subId}`
  152. )
  153. return parseInt(subId)
  154. }
  155. const TelephonyManager = Java.use("android.telephony.TelephonyManager")
  156. TelephonyManager.getLine1Number.overload().implementation =
  157. function () {
  158. const _number = this.getLine1Number()
  159. console.log(
  160. `spoof TelephonyManager.getLine1Number: ${_number} -> ${number}`
  161. )
  162. return number
  163. }
  164. TelephonyManager.getSimOperator.overload().implementation =
  165. function () {
  166. const _simOperator = this.getSimOperator()
  167. console.log(
  168. `spoof TelephonyManager.getSimOperator: ${_simOperator} -> ${simOperator}`
  169. )
  170. return simOperator
  171. }
  172. TelephonyManager.getNetworkOperator.overload().implementation =
  173. function () {
  174. const _networkOperator = this.getNetworkOperator()
  175. console.log(
  176. `spoof TelephonyManager.getNetworkOperator: ${_networkOperator} -> ${networkOperator}`
  177. )
  178. return networkOperator
  179. }
  180. TelephonyManager.getSimSerialNumber.overload().implementation =
  181. function () {
  182. const _simSerialNumber = this.getSimSerialNumber()
  183. console.log(
  184. `spoof TelephonyManager.getSimSerialNumber: ${_simSerialNumber} -> ${simSerialNumber}`
  185. )
  186. return simSerialNumber
  187. }
  188. TelephonyManager.getSubscriberId.overload().implementation =
  189. function () {
  190. const _imsi = this.getSubscriberId()
  191. console.log(
  192. `spoof TelephonyManager.getSubscriberId: ${_imsi} -> ${imsi}`
  193. )
  194. return imsi
  195. }
  196. TelephonyManager.getImei.overload().implementation = function () {
  197. const _imei = this.getImei()
  198. console.log(`spoof TelephonyManager.getImei: ${_imei} -> ${imei}`)
  199. return imei
  200. }
  201. TelephonyManager.getNetworkCountryIso.overload().implementation =
  202. function () {
  203. const _countryIso = this.getNetworkCountryIso()
  204. console.log(
  205. `spoof TelephonyManager.getNetworkCountryIso: ${_countryIso} -> ${countryIso}`
  206. )
  207. return countryIso
  208. }
  209. TelephonyManager.getSimCountryIso.overload().implementation =
  210. function () {
  211. const _countryIso = this.getSimCountryIso()
  212. console.log(
  213. `spoof TelephonyManager.getSimCountryIso: ${_countryIso} -> ${countryIso}`
  214. )
  215. return countryIso
  216. }
  217. TelephonyManager.getSubscriptionId.overload().implementation =
  218. function () {
  219. const _subId = this.getSubscriptionId()
  220. if (!subId) {
  221. console.log(_subId)
  222. return _subId
  223. }
  224. console.log(
  225. `spoof TelephonyManager.getSubscriptionId: ${_subId} -> ${subId}`
  226. )
  227. return parseInt(subId)
  228. }
  229. // const asos = Java.use("asos")
  230. // asos.b.overload().implementation = function () {
  231. // console.log("asos.b")
  232. // return true
  233. // }
  234. const asmy = Java.use("asmy")
  235. const bqni = Java.use("bqni")
  236. const askd = Java.use("askd")
  237. // asmy.b.overload().implementation = function () {
  238. // this.$super.b()
  239. // this._a.value.Q(bqni.b(19))
  240. // this._a.value.av(27)
  241. // const a = this._a.value._P.value.a()
  242. // var c = askd.c(a, "")
  243. // console.log(this._a.value.r)
  244. // var ar = Java.cast(this._a.value, Java.use("arqs"))
  245. // ar.r(36, Java.cast(c, Java.use("java.lang.Object")))
  246. // }
  247. const PhoneNumberVerification = Java.use(
  248. "com.google.android.gms.constellation.PhoneNumberVerification"
  249. )
  250. PhoneNumberVerification.$init.overload(
  251. "java.lang.String",
  252. "long",
  253. "int",
  254. "int",
  255. "java.lang.String",
  256. "android.os.Bundle",
  257. "int",
  258. "long"
  259. ).implementation = function (str, l, i, i2, str2, bundle, i3, l2) {
  260. console.log("PhoneNumberVerification.$init")
  261. console.log(
  262. `str: ${str}, l: ${l}, i: ${i}, i2: ${i2}, str2: ${str2}, i3: ${i3}, l2: ${l2}`
  263. )
  264. // print bundle
  265. if (bundle) {
  266. const keySet = bundle.keySet().toArray()
  267. for (let i = 0; i < keySet.length; i++) {
  268. const key = keySet[i]
  269. console.log(`key: ${key}, value: ${bundle.get(key)}`)
  270. }
  271. }
  272. return this.$init(str, l, i, i2, str2, bundle, i3, l2)
  273. }
  274. // const aays = Java.use("aays")
  275. // aays.d.overload("int", "boolean").implementation = function (i, z) {
  276. // console.log("aays.d", i, z, Object.keys(this.f.value))
  277. // return number
  278. // }
  279. const SetAsterismConsentRequest = Java.use(
  280. "com.google.android.gms.asterism.SetAsterismConsentRequest"
  281. )
  282. SetAsterismConsentRequest.$init.overload(
  283. "int",
  284. "int",
  285. "int",
  286. "[I",
  287. "java.lang.Long",
  288. "int",
  289. "android.os.Bundle",
  290. "int",
  291. "java.lang.String",
  292. "java.lang.String",
  293. "java.lang.String",
  294. "java.lang.String",
  295. "java.lang.String",
  296. "java.lang.String",
  297. "java.lang.String",
  298. "java.lang.String",
  299. "int"
  300. ).implementation = function (
  301. i,
  302. i2,
  303. i3,
  304. iArr,
  305. l,
  306. i4,
  307. bundle,
  308. i5,
  309. str,
  310. str2,
  311. str3,
  312. str4,
  313. str5,
  314. str6,
  315. str7,
  316. str8,
  317. i6
  318. ) {
  319. console.log(
  320. Java.use("android.util.Log").getStackTraceString(
  321. Java.use("java.lang.Throwable").$new()
  322. )
  323. )
  324. console.log("SetAsterismConsentRequest.$init")
  325. console.log(
  326. `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}`
  327. )
  328. // print bundle
  329. const keySet = bundle.keySet().toArray()
  330. for (let i = 0; i < keySet.length; i++) {
  331. const key = keySet[i]
  332. console.log(`key: ${key}, value: ${bundle.get(key)}`)
  333. }
  334. return this.$init(
  335. i,
  336. i2,
  337. i3,
  338. iArr,
  339. l,
  340. i4,
  341. bundle,
  342. i5,
  343. str,
  344. str2,
  345. str3,
  346. str4,
  347. str5,
  348. str6,
  349. str7,
  350. str8,
  351. i6
  352. )
  353. }
  354. const SetAsterismConsentResponse = Java.use(
  355. "com.google.android.gms.asterism.SetAsterismConsentResponse"
  356. )
  357. SetAsterismConsentResponse.$init.overload(
  358. "int",
  359. "java.lang.String",
  360. "java.lang.String"
  361. ).implementation = function (i, str, str2) {
  362. console.log(
  363. Java.use("android.util.Log").getStackTraceString(
  364. Java.use("java.lang.Throwable").$new()
  365. )
  366. )
  367. console.log("SetAsterismConsentResponse.$init")
  368. console.log(`i: ${i}, str: ${str}, str2: ${str2}`)
  369. // return this.$init(
  370. // 1,
  371. // "c4q5zP5Ft4A:APA91bEASr50HwwOY789LSZrcHPT8aG_fT19xlelS35qgIJeC3UBYypAHmmL9IygzlphzTKKz0wCdiQwuoPZMJKvgKPmGi3_imdr1CY0s7fs8qa_LMgNDFfvWEnpTCReAYc7IjThhFQq",
  372. // "c4q5zP5Ft4A"
  373. // )
  374. return this.$init(i, str, str2)
  375. }
  376. })
  377. })