BCryptClassMapper.kt (1492B) - raw
1 package me.rhunk.snapenhance.mapper.impl 2 3 import com.android.tools.smali.dexlib2.iface.instruction.formats.ArrayPayload 4 import me.rhunk.snapenhance.mapper.AbstractClassMapper 5 import me.rhunk.snapenhance.mapper.ext.getClassName 6 import me.rhunk.snapenhance.mapper.ext.getStaticConstructor 7 import me.rhunk.snapenhance.mapper.ext.isFinal 8 9 class BCryptClassMapper : AbstractClassMapper("BCryptClass") { 10 val classReference = classReference("class") 11 val hashMethod = string("hashMethod") 12 13 init { 14 mapper { 15 for (clazz in classes) { 16 if (!clazz.isFinal()) continue 17 18 val isBcryptClass = clazz.getStaticConstructor()?.let { constructor -> 19 constructor.implementation?.instructions?.filterIsInstance<ArrayPayload>()?.any { it.arrayElements.size == 18 && it.arrayElements[0] == 608135816 } 20 } 21 22 if (isBcryptClass == true) { 23 val hashDexMethod = clazz.methods.first { 24 it.parameterTypes.size == 2 && 25 it.parameterTypes[0] == "Ljava/lang/String;" && 26 it.parameterTypes[1] == "Ljava/lang/String;" && 27 it.returnType == "Ljava/lang/String;" 28 } 29 30 hashMethod.set(hashDexMethod.name) 31 classReference.set(clazz.getClassName()) 32 return@mapper 33 } 34 } 35 } 36 } 37 }