idea的插件java2smali测试只能转成class文件,不知道怎么回事。
于是手动转。核心在于,把核心代码写好后,弄个文件夹,转成smali文件后再参考逆向出来的smali文件修补,把调用方法改掉。在idea中打开生成的smali文件,可按关键词包名”Lcom/”进行搜索,一一修补。尽量不要用com,不然到处是,可用gov或edu,biz这样的少用的包名。
其实直接按文件的包名修补最简单,这样生成的smali文件不用再改包名呢。
javac com/ximalaya/ting/android/host/manager/request/CommonRequestM.java
java -jar D:\app\decompile\dx.jar --dex --output=Test.dex com/ximalaya/ting/android/host/manager/request/CommonRequestM.class
java -jar D:\app\decompile\baksmali.jar Test.dex -o out -l //不加-l转成的smali文件中使用.registers,加了l就是.locals,-o out表示会在当前文件目录中生成out目录,然而不加l则可以正常运行,加l好像不能运行。
参考文档:https://github.com/izgzhen/java2smali/
java -jar apktool_2.9.3.jar -r -f d 8.0.1.3.apk -o xmly8013smali //不解资源文件
java -jar apktool_2.9.3.jar d out_old.apk -o out_old //全解
java -jar apktool_2.6.0.jar b out_old -o out.apk //回apk
java -jar apktool_2.9.3.jar b D:\project\android\xmly\xmly32603smalipojie -o D:\project\android\xmly\xmpojie.apk
D:\app\decompile\zipalign.exe -f 4 xmpojie.apk xmpojiealign.apk //对齐
Java.perform(function () {
//静态属性修改
let personClazz = Java.use(“com.example.hookdemo.Person”);
console.log(“值:” + personClazz.age.value)//访问静态字段
console.log(“值:” + personClazz.print.value)//访问与方法同名的字段需要加下划线
//动态属性修改
Java.choose("com.example.hookdemo.Person", {
onMatch: function (instance) {
instance.name.value="被修改的name"
console.log(instance.name.value)
}, onComplete: function () {
console.log("end")
}
})
})