spoof1.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  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(
  90. `SmsManager.getDefaultSmsSubscriptionId: ${_subId} -> ${subId}`
  91. )
  92. return parseInt(subId)
  93. }
  94. SmsManager.getSubscriptionId.overload().implementation = function () {
  95. const _subId = this.getSubscriptionId()
  96. console.log(`SmsManager.getSubscriptionId: ${_subId} -> ${subId}`)
  97. return parseInt(subId)
  98. }
  99. const SubscriptionInfo = Java.use("android.telephony.SubscriptionInfo")
  100. SubscriptionInfo.getMcc.overload().implementation = function () {
  101. const _mcc = this.getMcc()
  102. console.log(`spoof SubscriptionInfo.getMcc: ${_mcc} -> ${mcc}`)
  103. return parseInt(mcc)
  104. }
  105. SubscriptionInfo.getMnc.overload().implementation = function () {
  106. const _mnc = this.getMnc()
  107. console.log(`spoof SubscriptionInfo.getMnc: ${_mnc} -> ${mnc}`)
  108. return parseInt(mnc)
  109. }
  110. SubscriptionInfo.getMccString.overload().implementation = function () {
  111. const _mccString = this.getMccString()
  112. console.log(
  113. `spoof SubscriptionInfo.getMccString: ${_mccString} -> ${mcc}`
  114. )
  115. return mcc
  116. }
  117. SubscriptionInfo.getMncString.overload().implementation = function () {
  118. const _mncString = this.getMncString()
  119. console.log(
  120. `spoof SubscriptionInfo.getMncString: ${_mncString} -> ${mnc}`
  121. )
  122. return mnc
  123. }
  124. SubscriptionInfo.getNumber.overload().implementation = function () {
  125. const _number = this.getNumber()
  126. console.log(
  127. `spoof SubscriptionInfo.getNumber: ${_number} -> ${number}`
  128. )
  129. return number
  130. }
  131. SubscriptionInfo.getIccId.overload().implementation = function () {
  132. const _iccId = this.getIccId()
  133. console.log(
  134. `spoof SubscriptionInfo.getIccId: ${_iccId} -> ${iccId}`
  135. )
  136. return iccId
  137. }
  138. SubscriptionInfo.getCountryIso.overload().implementation = function () {
  139. const _countryIso = this.getCountryIso()
  140. console.log(
  141. `spoof SubscriptionInfo.getCountryIso: ${_countryIso} -> ${countryIso}`
  142. )
  143. return countryIso
  144. }
  145. SubscriptionInfo.getSubscriptionId.overload().implementation =
  146. function () {
  147. const _subId = this.getSubscriptionId()
  148. if (!subId) {
  149. console.log(_subId)
  150. return _subId
  151. }
  152. console.log(
  153. `spoof SubscriptionInfo.getSubscriptionId: ${_subId} -> ${subId}`
  154. )
  155. return parseInt(subId)
  156. }
  157. const TelephonyManager = Java.use("android.telephony.TelephonyManager")
  158. TelephonyManager.getLine1Number.overload().implementation =
  159. function () {
  160. const _number = this.getLine1Number()
  161. console.log(
  162. `spoof TelephonyManager.getLine1Number: ${_number} -> ${number}`
  163. )
  164. return number
  165. }
  166. TelephonyManager.getSimOperator.overload().implementation =
  167. function () {
  168. const _simOperator = this.getSimOperator()
  169. console.log(
  170. `spoof TelephonyManager.getSimOperator: ${_simOperator} -> ${simOperator}`
  171. )
  172. return simOperator
  173. }
  174. TelephonyManager.getNetworkOperator.overload().implementation =
  175. function () {
  176. const _networkOperator = this.getNetworkOperator()
  177. console.log(
  178. `spoof TelephonyManager.getNetworkOperator: ${_networkOperator} -> ${networkOperator}`
  179. )
  180. return networkOperator
  181. }
  182. TelephonyManager.getSimSerialNumber.overload().implementation =
  183. function () {
  184. const _simSerialNumber = this.getSimSerialNumber()
  185. console.log(
  186. `spoof TelephonyManager.getSimSerialNumber: ${_simSerialNumber} -> ${simSerialNumber}`
  187. )
  188. return simSerialNumber
  189. }
  190. TelephonyManager.getSubscriberId.overload().implementation =
  191. function () {
  192. const _imsi = this.getSubscriberId()
  193. console.log(
  194. `spoof TelephonyManager.getSubscriberId: ${_imsi} -> ${imsi}`
  195. )
  196. return imsi
  197. }
  198. TelephonyManager.getImei.overload().implementation = function () {
  199. const _imei = this.getImei()
  200. console.log(`spoof TelephonyManager.getImei: ${_imei} -> ${imei}`)
  201. return imei
  202. }
  203. TelephonyManager.getNetworkCountryIso.overload().implementation =
  204. function () {
  205. const _countryIso = this.getNetworkCountryIso()
  206. console.log(
  207. `spoof TelephonyManager.getNetworkCountryIso: ${_countryIso} -> ${countryIso}`
  208. )
  209. return countryIso
  210. }
  211. TelephonyManager.getSimCountryIso.overload().implementation =
  212. function () {
  213. const _countryIso = this.getSimCountryIso()
  214. console.log(
  215. `spoof TelephonyManager.getSimCountryIso: ${_countryIso} -> ${countryIso}`
  216. )
  217. return countryIso
  218. }
  219. TelephonyManager.getSubscriptionId.overload().implementation =
  220. function () {
  221. const _subId = this.getSubscriptionId()
  222. if (!subId) {
  223. console.log(_subId)
  224. return _subId
  225. }
  226. console.log(
  227. `spoof TelephonyManager.getSubscriptionId: ${_subId} -> ${subId}`
  228. )
  229. return parseInt(subId)
  230. }
  231. TelephonyManager.getSimState.overload().implementation = function () {
  232. const _simState = this.getSimState()
  233. console.log(`spoof TelephonyManager.getSimState: ${_simState} -> 5`)
  234. return 5
  235. }
  236. const PhoneNumberVerification = Java.use(
  237. "com.google.android.gms.constellation.PhoneNumberVerification"
  238. )
  239. PhoneNumberVerification.$init.overload(
  240. "java.lang.String",
  241. "long",
  242. "int",
  243. "int",
  244. "java.lang.String",
  245. "android.os.Bundle",
  246. "int",
  247. "long"
  248. ).implementation = function (str, l, i, i2, str2, bundle, i3, l2) {
  249. console.log("PhoneNumberVerification.$init")
  250. console.log(
  251. `str: ${str}, l: ${l}, i: ${i}, i2: ${i2}, str2: ${str2}, i3: ${i3}, l2: ${l2}`
  252. )
  253. // print bundle
  254. if (bundle) {
  255. const keySet = bundle.keySet().toArray()
  256. for (let i = 0; i < keySet.length; i++) {
  257. const key = keySet[i]
  258. console.log(`key: ${key}, value: ${bundle.get(key)}`)
  259. }
  260. }
  261. return this.$init(str, l, i, i2, str2, bundle, i3, l2)
  262. }
  263. // const aays = Java.use("aays")
  264. // aays.d.overload("int", "boolean").implementation = function (i, z) {
  265. // console.log("aays.d", i, z, Object.keys(this.f.value))
  266. // return number
  267. // }
  268. const SetAsterismConsentRequest = Java.use(
  269. "com.google.android.gms.asterism.SetAsterismConsentRequest"
  270. )
  271. SetAsterismConsentRequest.$init.overload(
  272. "int",
  273. "int",
  274. "int",
  275. "[I",
  276. "java.lang.Long",
  277. "int",
  278. "android.os.Bundle",
  279. "int",
  280. "java.lang.String",
  281. "java.lang.String",
  282. "java.lang.String",
  283. "java.lang.String",
  284. "java.lang.String",
  285. "java.lang.String",
  286. "java.lang.String",
  287. "java.lang.String"
  288. ).implementation = function (
  289. i,
  290. i2,
  291. i3,
  292. iArr,
  293. l,
  294. i4,
  295. bundle,
  296. i5,
  297. str,
  298. str2,
  299. str3,
  300. str4,
  301. str5,
  302. str6,
  303. str7,
  304. str8
  305. ) {
  306. console.log(
  307. Java.use("android.util.Log").getStackTraceString(
  308. Java.use("java.lang.Throwable").$new()
  309. )
  310. )
  311. console.log("SetAsterismConsentRequest.$init")
  312. console.log(
  313. `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}`
  314. )
  315. // print bundle
  316. const keySet = bundle.keySet().toArray()
  317. for (let i = 0; i < keySet.length; i++) {
  318. const key = keySet[i]
  319. console.log(`key: ${key}, value: ${bundle.get(key)}`)
  320. }
  321. return this.$init(
  322. i,
  323. i2,
  324. i3,
  325. iArr,
  326. l,
  327. i4,
  328. bundle,
  329. i5,
  330. str,
  331. str2,
  332. str3,
  333. str4,
  334. str5,
  335. str6,
  336. str7,
  337. str8
  338. )
  339. }
  340. const SetAsterismConsentResponse = Java.use(
  341. "com.google.android.gms.asterism.SetAsterismConsentResponse"
  342. )
  343. SetAsterismConsentResponse.$init.overload(
  344. "int",
  345. "java.lang.String",
  346. "java.lang.String"
  347. ).implementation = function (i, str, str2) {
  348. console.log(
  349. Java.use("android.util.Log").getStackTraceString(
  350. Java.use("java.lang.Throwable").$new()
  351. )
  352. )
  353. console.log("SetAsterismConsentResponse.$init")
  354. console.log(`i: ${i}, str: ${str}, str2: ${str2}`)
  355. // return this.$init(
  356. // 1,
  357. // "c4q5zP5Ft4A:APA91bEASr50HwwOY789LSZrcHPT8aG_fT19xlelS35qgIJeC3UBYypAHmmL9IygzlphzTKKz0wCdiQwuoPZMJKvgKPmGi3_imdr1CY0s7fs8qa_LMgNDFfvWEnpTCReAYc7IjThhFQq",
  358. // "c4q5zP5Ft4A"
  359. // )
  360. return this.$init(i, str, str2)
  361. }
  362. })
  363. })