spoof_sms.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. class Log {
  2. static TAG = '[SMS]'
  3. static Debug = true
  4. static format(...msg) {
  5. let m = []
  6. for (let i = 0; i < msg.length; i++) {
  7. if (typeof msg[i] === 'object') {
  8. m.push(JSON.stringify(msg[i]))
  9. } else {
  10. m.push(msg[i])
  11. }
  12. }
  13. m = m.join(' ')
  14. return m
  15. }
  16. static i(...msg) {
  17. if (!this.Debug) return
  18. console.log(`\x1b[30m${this.TAG} ${this.format(...msg)}\x1b[0m`)
  19. }
  20. static w(...msg) {
  21. console.log(`\x1b[33m${this.TAG} ${this.format(...msg)}\x1b[0m`)
  22. }
  23. static e(...msg) {
  24. console.log(`\x1b[31m${this.TAG} ${this.format(...msg)}\x1b[0m`)
  25. }
  26. static s(...msg) {
  27. console.log(`\x1b[32m${this.TAG} ${this.format(...msg)}\x1b[0m`)
  28. }
  29. }
  30. function trace(tag) {
  31. Log.e((tag || '') + Java.use('android.util.Log').getStackTraceString(Java.use('java.lang.Throwable').$new()))
  32. }
  33. setImmediate(() => {
  34. Java.perform(function () {
  35. const dubm = Java.use('dubm')
  36. dubm.$init.overload().implementation = function () {
  37. Log.e('dubm.$init()')
  38. trace()
  39. return this.$init()
  40. }
  41. const SystemProperties = Java.use('android.os.SystemProperties')
  42. const imsi = SystemProperties.get('persist.spoof.imsi')
  43. console.log('imsi:', imsi)
  44. const ImsiRequest = Java.use('com.google.android.gms.constellation.ImsiRequest')
  45. const VerifyPhoneNumberRequest = Java.use('com.google.android.gms.constellation.VerifyPhoneNumberRequest')
  46. VerifyPhoneNumberRequest.$init.overload(
  47. //String str, long j, IdTokenRequest idTokenRequest, Bundle bundle, List list, boolean z, int i, List list2
  48. 'java.lang.String',
  49. 'long',
  50. 'com.google.android.gms.constellation.IdTokenRequest',
  51. 'android.os.Bundle',
  52. 'java.util.List',
  53. 'boolean',
  54. 'int',
  55. 'java.util.List'
  56. ).implementation = function (str, j, idTokenRequest, bundle, list, z, i, list2) {
  57. Log.e(`VerifyPhoneNumberRequest.$init(
  58. str=${str}, j=${j},
  59. idTokenRequest=${idTokenRequest},
  60. bundle=${bundle},
  61. list=${list.size()},
  62. z=${z},
  63. i=${i},
  64. list2=${list2.size()})`)
  65. trace()
  66. for (let i = 0; i < list.size(); i++) {
  67. Log.e(` list[${i}] = ${list.get(i)}`)
  68. }
  69. for (let i = 0; i < list2.size(); i++) {
  70. Log.e(` list2[${i}] = ${list2.get(i)}`)
  71. }
  72. // bundle.putString('IMSI', imsi)
  73. // list.clear()
  74. // list2.clear()
  75. // z = false
  76. if (list.size() > 0) {
  77. const imsiRequest = Java.cast(list.get(0), ImsiRequest)
  78. Log.e(`ImsiRequest(a=${imsiRequest.a.value}, b=${imsiRequest.b.value})`)
  79. }
  80. // return this.$init('upi-carrier-id-with-mo-sms-relax', j, idTokenRequest, bundle, list, z, i, list2)
  81. return this.$init(str, j, idTokenRequest, bundle, list, z, i, list2)
  82. }
  83. VerifyPhoneNumberRequest.writeToParcel.overload('android.os.Parcel', 'int').implementation = function (
  84. parcel,
  85. i
  86. ) {
  87. Log.e(`VerifyPhoneNumberRequest.writeToParcel(parcel=${parcel}, i=${i})`)
  88. trace()
  89. return this.writeToParcel(parcel, i)
  90. }
  91. //com/google/android/apps/messaging/shared/mobileconfiguration/accessor/MobileConfigurationRetriever
  92. // const MobileConfigurationRetriever = Java.use(
  93. // 'com.google.android.apps.messaging.shared.mobileconfiguration.accessor.MobileConfigurationRetriever.MobileConfigurationRetriever'
  94. // )
  95. // console.log('MobileConfigurationRetriever:', MobileConfigurationRetriever)
  96. const dupb = Java.use('dupb')
  97. dupb.$init.overload().implementation = function () {
  98. Log.e('dupb.$init()')
  99. trace()
  100. return this.$init()
  101. }
  102. const bhyo = Java.use('bhyo')
  103. bhyo.d.overload('java.lang.String').implementation = function (str) {
  104. Log.e(`bhyo.d(str=${str})`)
  105. const res = this.d(str)
  106. Log.s(`dupb.b=${res.b.value}`)
  107. res.b.value = 'upi-carrier-id-with-mo-sms-relax'
  108. return res
  109. }
  110. console.log(dubm.J.value.C.value)
  111. bhyo.c.overload('java.lang.String').implementation = function (str) {
  112. Log.e(`bhyo.c(str=${str})`)
  113. const res = this.c(str)
  114. console.log(res.C, Object.keys(res.C))
  115. res.C.value = 1
  116. return res
  117. }
  118. })
  119. }, 0)