_spoof.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. const mcc = "255"
  2. const mnc = "06"
  3. const simOperator = "25506"
  4. const networkOperator = "25506"
  5. const simSerialNumber = "89380062300689131876"
  6. const iccId = "89380062300689131876"
  7. const number = "731848010"
  8. const imei = "864929043714851"
  9. const imsi = "255065007246456"
  10. const countryIso = "ua"
  11. const 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 i, int i2, int i3, int[] iArr, Long l, int i4, Bundle bundle, int i5, String str, String str2, String str3, String str4, String str5, String str6, String str7, String str8
  284. "int",
  285. "int",
  286. "int",
  287. "[I",
  288. "java.lang.Long",
  289. "int",
  290. "android.os.Bundle",
  291. "int",
  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. "java.lang.String"
  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. ) {
  318. console.log(
  319. Java.use("android.util.Log").getStackTraceString(
  320. Java.use("java.lang.Throwable").$new()
  321. )
  322. )
  323. console.log("SetAsterismConsentRequest.$init")
  324. console.log(
  325. `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}`
  326. )
  327. // print bundle
  328. const keySet = bundle.keySet().toArray()
  329. for (let i = 0; i < keySet.length; i++) {
  330. const key = keySet[i]
  331. console.log(`key: ${key}, value: ${bundle.get(key)}`)
  332. }
  333. return this.$init(
  334. i,
  335. i2,
  336. i3,
  337. iArr,
  338. l,
  339. i4,
  340. bundle,
  341. i5,
  342. str,
  343. str2,
  344. str3,
  345. str4,
  346. str5,
  347. str6,
  348. str7,
  349. str8
  350. )
  351. }
  352. const SetAsterismConsentResponse = Java.use(
  353. "com.google.android.gms.asterism.SetAsterismConsentResponse"
  354. )
  355. SetAsterismConsentResponse.$init.overload(
  356. "int",
  357. "java.lang.String",
  358. "java.lang.String"
  359. ).implementation = function (i, str, str2) {
  360. console.log(
  361. Java.use("android.util.Log").getStackTraceString(
  362. Java.use("java.lang.Throwable").$new()
  363. )
  364. )
  365. console.log("SetAsterismConsentResponse.$init")
  366. console.log(`i: ${i}, str: ${str}, str2: ${str2}`)
  367. // return this.$init(
  368. // 1,
  369. // "c4q5zP5Ft4A:APA91bEASr50HwwOY789LSZrcHPT8aG_fT19xlelS35qgIJeC3UBYypAHmmL9IygzlphzTKKz0wCdiQwuoPZMJKvgKPmGi3_imdr1CY0s7fs8qa_LMgNDFfvWEnpTCReAYc7IjThhFQq",
  370. // "c4q5zP5Ft4A"
  371. // )
  372. return this.$init(i, str, str2)
  373. }
  374. })
  375. })