spoof_sms.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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 PhoneNumberVerification = Java.use('com.google.android.gms.constellation.PhoneNumberVerification')
  36. PhoneNumberVerification.$init.overload(
  37. 'java.lang.String',
  38. 'long',
  39. 'int',
  40. 'int',
  41. 'java.lang.String',
  42. 'android.os.Bundle',
  43. 'int',
  44. 'long'
  45. ).implementation = function (str, l, i, i2, str2, bundle, i3, l2) {
  46. Log.i('PhoneNumberVerification.$init')
  47. Log.i(`str: ${str}, l: ${l}, i: ${i}, i2: ${i2}, str2: ${str2}, i3: ${i3}, l2: ${l2}`)
  48. // print bundle
  49. if (bundle) {
  50. const keySet = bundle.keySet().toArray()
  51. for (let i = 0; i < keySet.length; i++) {
  52. const key = keySet[i]
  53. Log.i(`key: ${key}, value: ${bundle.get(key)}`)
  54. }
  55. }
  56. return this.$init(str, l, i, i2, str2, bundle, i3, l2)
  57. }
  58. function printConfiguration(config) {
  59. JSON.stringify({
  60. mDeviceId: config.mDeviceId.value,
  61. mTachyonAuthToken: config.mTachyonAuthToken.value,
  62. mVerifiedSmsToken: config.mVerifiedSmsToken.value,
  63. tachygramEnabled: config.tachygramEnabled.value,
  64. tachyonUrl: config.tachyonUrl.value,
  65. mConfigState: config.mConfigState.value,
  66. mToken: {
  67. mValue: config.mToken.value.mValue.value,
  68. mExpirationTime: config.mToken.value.mExpirationTime.value
  69. },
  70. mType: config.mType.value,
  71. mImsConfiguration: {
  72. mAuthDigestPassword: config.mImsConfiguration.value.mAuthDigestPassword.value,
  73. mAuthDigestRealm: config.mImsConfiguration.value.mAuthDigestRealm.value,
  74. mAuthDigestUsername: config.mImsConfiguration.value.mAuthDigestUsername.value,
  75. mAuthenticationScheme: config.mImsConfiguration.value.mAuthenticationScheme.value,
  76. mDomain: config.mImsConfiguration.value.mDomain.value,
  77. mPcscfAddress: config.mImsConfiguration.value.mPcscfAddress.value,
  78. mPcsfPort: config.mImsConfiguration.value.mPcsfPort.value,
  79. mPrivateIdentity: config.mImsConfiguration.value.mPrivateIdentity.value,
  80. mPsMediaTransport: config.mImsConfiguration.value.mPsMediaTransport.value,
  81. mPsRtpTransport: config.mImsConfiguration.value.mPsRtpTransport.value,
  82. mPsSipTransport: config.mImsConfiguration.value.mPsSipTransport.value,
  83. mPublicIdentity: config.mImsConfiguration.value.mPublicIdentity.value,
  84. mUserName: config.mImsConfiguration.value.mUserName.value,
  85. mWifiMediaTransport: config.mImsConfiguration.value.mWifiMediaTransport.value,
  86. mWifiRtpTransport: config.mImsConfiguration.value.mWifiRtpTransport.value,
  87. mWifiSipTransport: config.mImsConfiguration.value.mWifiSipTransport.value,
  88. mT1: config.mImsConfiguration.value.mT1.value,
  89. mT2: config.mImsConfiguration.value.mT2.value,
  90. mT4: config.mImsConfiguration.value.mT4.value,
  91. mLocalSipPort: config.mImsConfiguration.value.mLocalSipPort.value,
  92. mQ: config.mImsConfiguration.value.mQ.value,
  93. mKeepAlive: config.mImsConfiguration.value.mKeepAlive.value,
  94. mPhoneContext: config.mImsConfiguration.value.mPhoneContext.value,
  95. mRegRetryBaseTime: config.mImsConfiguration.value.mRegRetryBaseTime.value,
  96. mRegRetryMaxTime: config.mImsConfiguration.value.mRegRetryMaxTime.value,
  97. mNatUrlFmt: config.mImsConfiguration.value.mNatUrlFmt.value,
  98. mIntUrlFmt: config.mImsConfiguration.value.mIntUrlFmt.value,
  99. rcsVolteSingleRegistration: config.mImsConfiguration.value.rcsVolteSingleRegistration.value
  100. },
  101. mInstantMessageConfiguration: {
  102. mAutoAccept: config.mInstantMessageConfiguration.value.mAutoAccept.value,
  103. mAutoAcceptGroupChat: config.mInstantMessageConfiguration.value.mAutoAcceptGroupChat.value,
  104. mChatAuth: config.mInstantMessageConfiguration.value.mChatAuth.value,
  105. mChatRevokeTimer: config.mInstantMessageConfiguration.value.mChatRevokeTimer.value,
  106. mConferenceFactoryUri: config.mInstantMessageConfiguration.value.mConferenceFactoryUri.value,
  107. mDeferredMessageFunctionUri:
  108. config.mInstantMessageConfiguration.value.mDeferredMessageFunctionUri.value,
  109. mExploderUri: config.mInstantMessageConfiguration.value.mExploderUri.value,
  110. mFileTransferAutoAcceptSupported:
  111. config.mInstantMessageConfiguration.value.mFileTransferAutoAcceptSupported.value,
  112. mFtCapAlwaysOn: config.mInstantMessageConfiguration.value.mFtCapAlwaysOn.value,
  113. mFtHttpCapAlwaysOn: config.mInstantMessageConfiguration.value.mFtHttpCapAlwaysOn.value,
  114. mFtHttpContentServerPassword:
  115. config.mInstantMessageConfiguration.value.mFtHttpContentServerPassword.value,
  116. mFtHttpContentServerUri: config.mInstantMessageConfiguration.value.mFtHttpContentServerUri.value,
  117. mFtHttpContentServerUser: config.mInstantMessageConfiguration.value.mFtHttpContentServerUser.value,
  118. mFtStoreAndForwardEnabled:
  119. config.mInstantMessageConfiguration.value.mFtStoreAndForwardEnabled.value,
  120. mFullGroupSandFSupported: config.mInstantMessageConfiguration.value.mFullGroupSandFSupported.value,
  121. mImCapAlwaysOn: config.mInstantMessageConfiguration.value.mImCapAlwaysOn.value,
  122. mImSessionStart: config.mInstantMessageConfiguration.value.mImSessionStart.value,
  123. mImWarnSF: config.mInstantMessageConfiguration.value.mImWarnSF.value,
  124. mMaxAdhocGroupSize: config.mInstantMessageConfiguration.value.mMaxAdhocGroupSize.value,
  125. mPublishPresenceCap: config.mInstantMessageConfiguration.value.mPublishPresenceCap.value,
  126. mReconnectGuardTimer: config.mInstantMessageConfiguration.value.mReconnectGuardTimer.value,
  127. mSmsFallBackAuth: config.mInstantMessageConfiguration.value.mSmsFallBackAuth.value,
  128. mMaxSize1to1: config.mInstantMessageConfiguration.value.mMaxSize1to1.value,
  129. mMaxSize1toM: config.mInstantMessageConfiguration.value.mMaxSize1toM.value,
  130. mMaxSizeFileTransfer: config.mInstantMessageConfiguration.value.mMaxSizeFileTransfer.value,
  131. mWarnSizeFileTransfer: config.mInstantMessageConfiguration.value.mWarnSizeFileTransfer.value,
  132. mFtThumbnailSupported: config.mInstantMessageConfiguration.value.mFtThumbnailSupported.value,
  133. mFtDefaultMechanism: config.mInstantMessageConfiguration.value.mFtDefaultMechanism.value,
  134. mMessageTech: config.mInstantMessageConfiguration.value.mMessageTech.value,
  135. mDefaultSharingMethod: config.mInstantMessageConfiguration.value.mDefaultSharingMethod.value,
  136. mTimerIdleSecs: config.mInstantMessageConfiguration.value.mTimerIdleSecs.value,
  137. mDeliveryReportTimeout: config.mInstantMessageConfiguration.value.mDeliveryReportTimeout.value,
  138. mAnonymousChat: config.mInstantMessageConfiguration.value.mAnonymousChat.value,
  139. mMaxConcurrentSession: config.mInstantMessageConfiguration.value.mMaxConcurrentSession.value,
  140. mSwitchoverSize: config.mInstantMessageConfiguration.value.mSwitchoverSize.value
  141. },
  142. mReconfigRequested: config.mReconfigRequested.value,
  143. mMessageTech: config.mMessageTech.value,
  144. rcsState: config.rcsState.value,
  145. iccids: config.iccids.value,
  146. mValiditySecs: config.mValiditySecs.value,
  147. mLastUpdateSecs: config.mLastUpdateSecs.value,
  148. mVersion: config.mVersion.value
  149. })
  150. }
  151. // const Configuration = Java.use('com.google.android.ims.provisioning.config.Configuration')
  152. // Configuration.k.overload().implementation = function () {
  153. // Log.e(`Configuration.k()`)
  154. // printConfiguration(this)
  155. // return this.k()
  156. // }
  157. function dumpList(list) {
  158. if (list) {
  159. let res = []
  160. for (let i = 0; i < list.size(); i++) {
  161. res.push('' + list.get(i))
  162. }
  163. return res
  164. }
  165. return []
  166. }
  167. })
  168. })